Skip to content

Commit 067012f

Browse files
committed
Declare the directory structure in a file
Create a configuration file with directories listed in it. The paths are specified inside a singleton - Directories. All the files now references this class and use no hardcoded paths.
1 parent 10d90a5 commit 067012f

10 files changed

+45
-23
lines changed

src/analyses.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from abc import ABC, abstractmethod
22
from file_utils import save_json, load_txt_into_set
33
import re
4+
from config import Directories
45

56

67
class Analysis(ABC):
@@ -27,13 +28,13 @@ def finalize(self):
2728
pass
2829

2930
def save(self):
30-
save_json(self.state, f"../outputs/json/{self.name}.json")
31+
save_json(self.state, f"{Directories.json_outputs}/{self.name}.json")
3132

3233

3334
class WordFrequencyAnalysis(Analysis):
3435
def __init__(self):
3536
self.words = {}
36-
self.stopwords = load_txt_into_set("../data/raw/stopwords.txt")
37+
self.stopwords = load_txt_into_set(f"{Directories.raw_data}/stopwords.txt")
3738

3839
@property
3940
def name(self):
@@ -90,7 +91,7 @@ def __init__(self):
9091

9192
self.lists = {}
9293
for form in self.forms:
93-
self.lists[form] = load_txt_into_set(f"../data/processed/{form}.txt")
94+
self.lists[form] = load_txt_into_set(f"{Directories.processed_data}/{form}.txt")
9495

9596
self.counts = {}
9697
for form in self.forms:

src/analyze.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from analyzer import Analyzer
33
from analyses import *
44

5-
Analyzer("../data/processed/commits.txt", [
5+
Analyzer([
66
WordFrequencyAnalysis(),
77
FirstWordFrequencyAnalysis(),
88
VerbFormAnalysis(),

src/analyzer.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
from config import Directories
2+
3+
14
class Analyzer:
2-
def __init__(self, commits_path, analyses):
3-
self.commits_path = commits_path
5+
def __init__(self, analyses):
46
self.analyses = analyses
57
self.authors = {}
68
self.total_number = 0
@@ -9,7 +11,7 @@ def __init__(self, commits_path, analyses):
911
self.MAX_COMMITS_BY_AUTHOR = 3
1012

1113
def analyze(self):
12-
file = open(self.commits_path)
14+
file = open(f"{Directories.processed_data}/commits.txt")
1315
with file:
1416
for line in file:
1517
[author, repo, lines, message] = line.split("::", 3)

src/config.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Directories:
2+
root = ".."
3+
4+
data = root + "/" + "data"
5+
processed_data = data + "/" + "processed"
6+
raw_data = data + "/" + "raw"
7+
8+
outputs = root + "/" + "outputs"
9+
charts = outputs + "/" + "charts"
10+
json_outputs = outputs + "/" + "json"

src/download_and_parse.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,19 @@
55
import gzip
66
import urllib.request
77
import io
8+
9+
from config import Directories
810
from file_utils import open_file_dir_safe
911

1012
date = sys.argv[1]
1113

1214
url = f"http://data.githubarchive.org/{date}.json.gz"
13-
print(url)
1415

1516
response = urllib.request.urlopen(url)
1617
compressed_file = io.BytesIO(response.read())
1718
file = gzip.GzipFile(fileobj=compressed_file)
1819

19-
output_filename = "../data/processed/commits.txt"
20+
output_filename = f"{Directories.processed_data}/commits.txt"
2021
output_mode = "a" if os.path.exists(output_filename) else "w"
2122
output_file = open_file_dir_safe(output_filename, output_mode)
2223

src/generate_conjugations.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
#!/usr/bin/env python3
2+
from config import Directories
23
from file_utils import load_txt_into_set, load_json, open_file_dir_safe
34
import re
45

5-
infinitives = load_txt_into_set("../data/processed/infinitive.txt")
6-
irregular = load_json("../data/processed/irregular_verbs.json")
6+
infinitives = load_txt_into_set(f"{Directories.processed_data}/infinitive.txt")
7+
irregular = load_json(f"{Directories.processed_data}/irregular_verbs.json")
78

8-
imperative_file = open_file_dir_safe("../data/processed/imperative.txt", 'w')
9-
third_person_file = open_file_dir_safe("../data/processed/third_person.txt", 'w')
10-
gerund_file = open_file_dir_safe("../data/processed/gerund.txt", 'w')
11-
past_tense_file = open_file_dir_safe("../data/processed/past_tense.txt", 'w')
9+
imperative_file = open_file_dir_safe(f"{Directories.processed_data}/imperative.txt", 'w')
10+
third_person_file = open_file_dir_safe(f"{Directories.processed_data}/third_person.txt", 'w')
11+
gerund_file = open_file_dir_safe(f"{Directories.processed_data}/gerund.txt", 'w')
12+
past_tense_file = open_file_dir_safe(f"{Directories.processed_data}/past_tense.txt", 'w')
1213

1314
vowel = "[aeiouy]"
1415
consonant = "[b-df-hj-np-tv-z]"

src/plot.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#!/usr/bin/env python3
2+
from config import Directories
23
from plotters import *
34
from os import makedirs
45

5-
makedirs("../outputs/charts", exist_ok=True)
6+
makedirs(Directories.charts, exist_ok=True)
67

78
FirstWordFrequencyPlotter().plot()
89
WordFrequencyPlotter().plot()

src/plotters.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
from abc import ABC, abstractmethod
22
import matplotlib.pyplot as plt
33
import numpy as np
4+
5+
from config import Directories
46
from file_utils import load_json
57

68

79
class Plotter(ABC):
810
def __init__(self):
9-
self.data = load_json(f"../outputs/json/{self.input_file_name}.json")
11+
self.data = load_json(f"{Directories.json_outputs}/{self.input_file_name}.json")
1012

1113
@property
1214
@abstractmethod
@@ -53,8 +55,8 @@ def plot(self):
5355

5456
plt.tight_layout()
5557

56-
plt.savefig(f"../outputs/charts/{self.name}.png", transparent=True)
57-
plt.savefig(f"../outputs/charts/{self.name}.svg")
58+
plt.savefig(f"{Directories.charts}/{self.name}.png", transparent=True)
59+
plt.savefig(f"{Directories.charts}/{self.name}.svg")
5860
plt.close()
5961

6062

src/process_irregular_verbs.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
#!/usr/bin/env python3
22
from pyquery import PyQuery as pq
33
import re
4+
5+
from config import Directories
46
from file_utils import save_json
57

6-
doc = pq(filename='../data/raw/irregular_verbs.html')
8+
doc = pq(filename=f'{Directories.raw_data}/irregular_verbs.html')
79

810
table = doc(".wikitable")
911
tds = table("tr td:first")
@@ -20,4 +22,4 @@
2022
infinitive = conjugations.pop(0)
2123
words[infinitive] = conjugations[0]
2224

23-
save_json(words, "../data/processed/irregular_verbs.json")
25+
save_json(words, f"{Directories.processed_data}/irregular_verbs.json")

src/process_verbs.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
#!/usr/bin/env python3
22
import re
3+
4+
from config import Directories
35
from file_utils import open_file_dir_safe
46

5-
input_file = open("../data/raw/verbs.txt")
6-
output_file = open_file_dir_safe("../data/processed/infinitive.txt", "w")
7+
input_file = open(f"{Directories.raw_data}/verbs.txt")
8+
output_file = open_file_dir_safe(f"{Directories.processed_data}/infinitive.txt", "w")
79

810
with input_file, output_file:
911
for line in input_file:

0 commit comments

Comments
 (0)