Calc uniq ID for artist & album + other improvment

Class method + rename
This commit is contained in:
2017-04-19 02:01:00 +02:00
parent 9f74d70596
commit 848472531b

View File

@@ -45,6 +45,7 @@ import os
import plistlib
import sys
import argparse
import hashlib
class SetEncoder(json.JSONEncoder):
@@ -135,8 +136,9 @@ class ITunesParser:
akey = track['Artist']
# Add artist
if akey not in self._artists:
a_id = self.calc_id(akey)
self._artists[akey] = {
'id': len(self._artists), # TODO Calc an uniq ID (permit to replace data)
'Persistent ID': a_id,
'Name': akey,
'Track Count': 0,
'Play Count': 0,
@@ -149,7 +151,7 @@ class ITunesParser:
# TODO If no Rating, don't take 0
play_count = track['Play Count'] if 'Play Count' in track else 0
rating = self._calc_rating(rating, self._artists[akey]['Rating'], self._artists[akey]['Track Count'])
rating = self.calc_rating(rating, self._artists[akey]['Rating'], self._artists[akey]['Track Count'])
self._artists[akey]['Track Count'] += 1
self._artists[akey]['Rating'] = rating
@@ -173,14 +175,15 @@ class ITunesParser:
akey = track['Album']
if akey not in self._albums:
a_id = self.calc_id(akey)
self._albums[akey] = {
'id': len(self._albums),
'Persistent ID': a_id,
'Name': akey,
'Track Count': 0,
'Play Count': 0,
'Rating': 0,
'Genre': set(),
'artist': set()
'Artist': set()
}
# Compute information
@@ -189,7 +192,7 @@ class ITunesParser:
# TODO If no Rating, don't take 0
play_count = track['Play Count'] if 'Play Count' in track else 0
rating = self._calc_rating(rating, self._albums[akey]['Rating'], self._albums[akey]['Track Count'])
rating = self.calc_rating(rating, self._albums[akey]['Rating'], self._albums[akey]['Track Count'])
self._albums[akey]['Track Count'] += 1
self._albums[akey]['Rating'] = rating
@@ -205,7 +208,7 @@ class ITunesParser:
## Add different artists
if 'Artist' not in track:
return
self._albums[akey]['artist'].add(track['Artist'])
self._albums[akey]['Artist'].add(track['Artist'])
return
def _write_artists(self):
@@ -215,8 +218,9 @@ class ITunesParser:
file_artist = io.open('es-artist-data.json', 'wb')
for artist in self._artists:
persistent_id = self._artists[artist]['Persistent ID']
json_track_index = {
"index": {"_index": "itunessongs", "_type": "artist"}
"index": {"_index": "itunessongs", "_type": "artist", "_id": persistent_id}
}
file_artist.write(bytes(json.dumps(json_track_index, indent=None, cls=SetEncoder), 'UTF-8'))
file_artist.write(bytes("\n", 'UTF-8'))
@@ -231,8 +235,9 @@ class ITunesParser:
file_albums = io.open('es-albums-data.json', 'wb')
for album in self._albums:
persistent_id = self._albums[album]['Persistent ID']
json_track_index = {
"index": {"_index": "itunessongs", "_type": "album"}
"index": {"_index": "itunessongs", "_type": "album", "_id": persistent_id}
}
file_albums.write(bytes(json.dumps(json_track_index, indent=None, cls=SetEncoder), 'UTF-8'))
file_albums.write(bytes("\n", 'UTF-8'))
@@ -240,9 +245,22 @@ class ITunesParser:
file_albums.write(bytes("\n", 'UTF-8'))
file_albums.close()
def _calc_rating(self, added_value, current_rating, count):
@classmethod
def calc_rating(cls, added_value, current_rating, count):
"""
Calculate average rating from a current rating, a rating value to add and the number of elements
"""
return (current_rating * count + added_value) // (count + 1)
@classmethod
def calc_id(cls, key):
"""
Calculate a MD5 sum from a key as ID
"""
md5 = hashlib.md5()
md5.update(key.encode('UTF-8'))
return md5.hexdigest()
#### main block ####
# Default input & output files