synchronized developers and entries

This commit is contained in:
Trilarion
2020-09-07 16:39:47 +02:00
parent 8a08425e09
commit 625871062f
5 changed files with 103 additions and 16 deletions

View File

@ -186,7 +186,7 @@ class DevelopersMaintainer:
if not self.developers:
print('developers not yet loaded')
return
developer_names = [x['Name'] for x in self.developers]
developer_names = list(self.developers.keys())
for index, name in enumerate(developer_names):
for other_name in developer_names[index + 1:]:
if osg.name_similarity(name, other_name) > 0.8:
@ -197,9 +197,9 @@ class DevelopersMaintainer:
if not self.developers:
print('developers not yet loaded')
return
for dev in self.developers:
for dev in self.developers.values():
if not dev['Games']:
print(' {} has no "Games" field'.format(dev['Name']))
print(' {} has no games'.format(dev['Name']))
print('orphanes checked')
def check_for_missing_developers_in_entries(self):
@ -209,7 +209,7 @@ class DevelopersMaintainer:
if not self.entries:
print('entries not yet loaded')
return
for dev in self.developers:
for dev in self.developers.values():
dev_name = dev['Name']
for entry_name in dev['Games']:
x = [x for x in self.entries if x['Title'] == entry_name]
@ -222,6 +222,29 @@ class DevelopersMaintainer:
print('Entry "{}" listed in developer "{}" but not listed in that entry'.format(entry_name, dev_name))
print('missed developer checked')
def update_developers_from_entries(self):
if not self.developers:
print('developer not yet loaded')
return
if not self.entries:
print('entries not yet loaded')
return
# loop over all developers and delete all games
for dev in self.developers.values():
dev['Games'] = []
# loop over all entries and add this game to all developers of this game
for entry in self.entries:
entry_name = entry['Title']
entry_devs = entry.get('Developer', [])
for entry_dev in entry_devs:
entry_dev = entry_dev.value # ignored the comment
if entry_dev in self.developers:
self.developers[entry_dev]['Games'].append(entry_name)
else:
# completely new developer
self.developers[entry_dev] = {'Name': entry_dev, 'Games': entry_name}
print('developers updated')
def read_entries(self):
self.entries = osg.read_entries()
print('{} entries read'.format(len(self.entries)))
@ -237,6 +260,7 @@ if __name__ == "__main__":
'Check for duplicates': m.check_for_duplicates,
'Check for orphans': m.check_for_orphans,
'Check for games in developers not listed': m.check_for_missing_developers_in_entries,
'Update developers from entries': m.update_developers_from_entries,
'Read entries': m.read_entries
}