|
3 | 3 | from renderer.renderer import RenderBuilder |
4 | 4 | from oklchUtils.OKLCHUtils import OKLCHUtils |
5 | 5 | from calc import Calc |
6 | | - |
| 6 | +from settings import Settings |
7 | 7 | from fetcher.fetcher import FetchLangStats |
8 | 8 |
|
9 | 9 | # Fetch info |
10 | 10 | USERNAME = os.environ['USERNAME'] |
11 | 11 | TOKEN = os.environ['GITHUB_TOKEN'] |
12 | | - |
13 | | -# Plane settings |
14 | | -HEIGHT: int = 140 |
15 | | -WIDTH: int = 250 |
16 | | - |
17 | | -# Captions settings |
18 | | -LEGEND_MARGIN_X: int = 140 |
19 | | -LEGEND_MARGIN_Y: int = 30 |
20 | | -SPACE_BETWEEN_CAPTIONS: int = 22 |
21 | | -FONT_COLOR: str = "#c1c1c1" |
22 | | - |
23 | | -# Color settings |
24 | | -OKLCH_CHROMA: float = 0.099 |
25 | | -OKLCH_LIGHTNESS: float = 0.636 |
26 | | -OTHER_COLOR_CHROMA: float = 0.000 |
27 | | - |
28 | | -# Round sizes settings |
29 | | -OUTER_RADIUS: int = 55 |
30 | | -THICKNESS: int = 12 |
31 | | - |
32 | | -# Margins settings |
33 | | -MARGIN_X: int = 20 |
34 | | -MARGIN_Y: int = 15 |
35 | | - |
36 | | -# Arrays settings |
37 | | -TOP_K: int = 4 |
38 | | - |
39 | | -# Output filepath |
40 | 12 | OUTPUT_FILE: str = "./out.svg" |
| 13 | +SETTINGS_FILE: str = "./settings.yaml" |
| 14 | + |
| 15 | +SETTINGS = Settings.from_yaml(SETTINGS_FILE) |
41 | 16 |
|
42 | | -def get_langs_data(token: str): |
| 17 | +def get_langs_data( |
| 18 | + token: str, |
| 19 | + username: str, |
| 20 | + exclude_langs: list[str] = SETTINGS.GENERAL_SETTINGS.EXCLUDED_LANGUAGES |
| 21 | + ) -> dict[str, float]: |
43 | 22 | info = {} |
44 | | - |
45 | 23 | total_size = 0 |
46 | 24 |
|
47 | | - for elem in FetchLangStats(token).fetch_user(USERNAME): |
| 25 | + for elem in FetchLangStats(token).fetch_user(username): |
| 26 | + if elem.name in exclude_langs: continue |
| 27 | + |
48 | 28 | total_size += elem.size |
49 | 29 | if elem.name not in info: info[elem.name] = elem.size |
50 | 30 | else: info[elem.name] += elem.size |
51 | 31 |
|
52 | | - return info.keys(), map(lambda x: x/total_size, info.values()) |
| 32 | + return {k: info[k]/total_size for k in info} |
53 | 33 |
|
54 | 34 | def truncate(langs_arr: list[tuple[float, str]], k: int): |
55 | 35 | if len(langs_arr) <= k: return langs_arr |
56 | 36 | return langs_arr[:k-1] + [(sum(map(lambda x: x[0], langs_arr[k-1:])), "Other")] |
57 | 37 |
|
58 | 38 | def main(): |
59 | | - NAMES_ARR, PERCENT_ARR = get_langs_data(TOKEN) |
| 39 | + languages_stats = get_langs_data(TOKEN, USERNAME) |
60 | 40 |
|
61 | | - sorted_percents = sorted([(percent, name) for percent,name in zip(PERCENT_ARR, NAMES_ARR)], key=lambda x: x[0], reverse=True) |
| 41 | + sorted_percents = sorted( |
| 42 | + [(percent, name) for percent,name in zip(languages_stats.values(), languages_stats.keys())], |
| 43 | + key=lambda x: x[0], |
| 44 | + reverse=True |
| 45 | + ) |
62 | 46 |
|
63 | | - sorted_percents = truncate(sorted_percents, TOP_K) |
| 47 | + sorted_percents = truncate(sorted_percents, SETTINGS.GENERAL_SETTINGS.TOP_K) |
64 | 48 |
|
65 | 49 | _ = Calc( |
66 | | - outer_radius=OUTER_RADIUS, |
67 | | - thickness=THICKNESS, |
| 50 | + outer_radius=SETTINGS.DIAGRAM_SETTINGS.OUTER_RADIUS, |
| 51 | + thickness=SETTINGS.DIAGRAM_SETTINGS.THICKNESS, |
68 | 52 | percent_array=[elem[0] for elem in sorted_percents], |
69 | 53 | sections_colors_array=OKLCHUtils.create_colors_array( |
70 | 54 | length=len(sorted_percents), |
71 | | - chroma=OKLCH_CHROMA, |
72 | | - lightness=OKLCH_LIGHTNESS |
| 55 | + chroma=SETTINGS.GENERAL_SETTINGS.COLORING.CHROMA, |
| 56 | + lightness=SETTINGS.GENERAL_SETTINGS.COLORING.LIGHTNESS |
73 | 57 | ), |
74 | 58 | renderer=RenderBuilder( |
75 | | - height=HEIGHT, |
76 | | - width=WIDTH, |
77 | | - outer_radius=OUTER_RADIUS, |
78 | | - thickness=THICKNESS, |
79 | | - margin_x=MARGIN_X, |
80 | | - margin_y=MARGIN_Y, |
81 | | - legend_margin_x=LEGEND_MARGIN_X, |
82 | | - legend_margin_y=LEGEND_MARGIN_Y, |
83 | | - space_between_captions=SPACE_BETWEEN_CAPTIONS, |
84 | | - font_color=FONT_COLOR |
| 59 | + height=SETTINGS.GENERAL_SETTINGS.PLANE.HEIGHT, |
| 60 | + width=SETTINGS.GENERAL_SETTINGS.PLANE.WIDTH, |
| 61 | + outer_radius=SETTINGS.DIAGRAM_SETTINGS.OUTER_RADIUS, |
| 62 | + thickness=SETTINGS.DIAGRAM_SETTINGS.THICKNESS, |
| 63 | + margin_x=SETTINGS.DIAGRAM_SETTINGS.MARGIN_X, |
| 64 | + margin_y=SETTINGS.DIAGRAM_SETTINGS.MARGIN_Y, |
| 65 | + legend_margin_x=SETTINGS.LEGEND_SETTINGS.MARGIN_X, |
| 66 | + legend_margin_y=SETTINGS.LEGEND_SETTINGS.MARGIN_Y, |
| 67 | + space_between_captions=SETTINGS.LEGEND_SETTINGS.SPACE_BETWEEN_CAPTIONS, |
| 68 | + font_color=SETTINGS.LEGEND_SETTINGS.FONT_COLOR |
85 | 69 | ), |
86 | | - margin_x=MARGIN_X, |
87 | | - margin_y=MARGIN_Y, |
| 70 | + margin_x=SETTINGS.DIAGRAM_SETTINGS.MARGIN_X, |
| 71 | + margin_y=SETTINGS.DIAGRAM_SETTINGS.MARGIN_Y, |
88 | 72 | names_array=[elem[1] for elem in sorted_percents] |
89 | 73 | ) |
90 | 74 |
|
|
0 commit comments