/
convert.py
executable file
·136 lines (106 loc) · 3.99 KB
/
convert.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/usr/bin/env python3
'''
convert the yml to json.
see README.md for more information.
'''
import os
import yaml
import json
import re
import hashlib
from datetime import datetime
s3_bucket = "https://intertext.s3.us-west-1.amazonaws.com/"
dir_path = os.path.dirname(os.path.realpath(__file__))
yml_path = dir_path + "/" + "discography.yml"
ts_path = dir_path + "/" + "discography.ts"
special_slug_maps = {
"ΑΙΓΑΙΙΣ": "AIGAIIS",
"nausicaä": "nausicaa"
}
# there are some encoding issues with the # character
special_title_maps = {
'A White USB Drive With "HEXAGON" iStock Logo \#1135496271': 'A White USB Drive With "HEXAGON" iStock Logo #1135496271'
}
def make_id(str):
md5_hash = hashlib.md5()
md5_hash.update(str.encode("utf-8"))
return md5_hash.hexdigest()
def make_slug(str):
if str in special_slug_maps:
str = special_slug_maps[str]
str = str.lower()
# convert & to and
str = re.sub(r'&', 'and', str)
# only alphanumeric characters, spaces, and hyphens
str = re.sub(r'[^a-zA-Z0-9\s-]', '', str)
# replace spaces with hyphens
str = re.sub(r'\s+', '-', str)
# replace multiple hyphens with single hyphen
str = re.sub(r'--+', '-', str)
return str
def make_track_title(str):
if str in special_title_maps:
return special_title_maps[str]
return str
def make_html_paragraphs(str):
str = str.rstrip("\n")
str = "<p>" + str + "</p>"
str = str.replace("\n", "</p><p>")
return str
# load data
with open(yml_path, "r") as yml_file:
data = yaml.safe_load(yml_file)
# enrich data
for release in data:
# generate a project slug
release["project_slug"] = make_slug(release["project"])
# generate a release slug
release["release_slug"] = make_slug(release["title"])
# generate a cover
release["cover_url"] = s3_bucket + release["project_slug"] + "/" + release["release_slug"] + "/" + release["release_slug"] + ".jpg"
# generate an mp3 and wav download links
zip_slug = s3_bucket + release["project_slug"] + "/" + release["release_slug"] + "/" + release["release_slug"]
if (release["mp3"]):
release["mp3_url"] = zip_slug + "-mp3.zip"
# generate a wave download link
if (release["wav"]):
release["wav_url"] = zip_slug + "-wav.zip"
# generate an id
release["id"] = make_id(release["project"] + release["title"])
# handle monospaced notes if monospaceNotes is present
if "monospaceNotes" in release:
# preserve \n for monospace
release["notes"] = "<pre>" + release["notes"] + "</pre>"
else:
release["notes"] = make_html_paragraphs(release["notes"])
# always turn turn \n into paragraphs on the credits
release["credits"] = make_html_paragraphs(release["credits"])
# generate a slug for each track
if "tracks" in release:
for track in release["tracks"]:
# generate a track slugs for available formats
# outcome example: project-title/release-title/01-track-title.mp3
slug = make_slug(str(track["number"]).zfill(2) + "-" + track["title"]) # zero pad track number
track_slug = release["project_slug"] + "/" + release["release_slug"] + "/" + slug
if (release["mp3"]):
track["mp3_url"] = s3_bucket + track_slug + ".mp3"
if (release["wav"]):
track["wav_url"] = s3_bucket + track_slug + ".wav"
# generate an id (ARTIST + RELEASE + NUMBER + TITLE + LENGTH)
track["id"] = make_id(release["project"] + release["title"] + str(track["number"]) + track["title"] + track["length"])
# generate a track title
track["title"] = make_track_title(track["title"])
# generate an id for each stream
if "streams" in release:
for stream in release["streams"]:
stream["id"] = make_id(release["project"] + release["title"] + stream["platform"])
# write discography data
with open(ts_path, "w") as json_file:
json.dump(data, json_file, indent=2)
# make it a js export
with open(ts_path, "r") as file:
existing_contents = file.read()
with open(ts_path, "w") as file:
new_string = "export const discography = "
file.write(new_string)
file.write(existing_contents)