Fonctions de filtrage et d'association par propriété commune
This commit is contained in:
parent
63a45247e3
commit
cbbb8148b5
1 changed files with 53 additions and 25 deletions
78
main.py
78
main.py
|
@ -115,39 +115,25 @@ def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok):
|
|||
#print('api titles:', '|'.join(sorted([f.title for f in Lapi])))
|
||||
|
||||
# supprime les dossiers de l'api (ils ne devraient pas apparaître)
|
||||
Linvalid = [f for f in Lapi if (not tok.conf.is_valid_file(f.name)) or not (filerule.match_rules(f.path+'/'+f.name, rules))]
|
||||
Lapi = [f for f in Lapi if tok.conf.is_valid_file(f.name)]
|
||||
Lapi, Linvalid = filter_by(Lapi, lambda f:tok.conf.is_valid_file(f.name) and filerule.match_rules(f.path+'/'+f.name, rules))
|
||||
|
||||
# Compare avec la liste de l'api
|
||||
Lmissing = [f for f in Lapi if f not in Lloc] # fichiers non présents localement
|
||||
Lunref = [f for f in Lloc if f not in Lapi] # fichiers non référencés
|
||||
|
||||
# Fichiers déplacés (ou copiés) localement
|
||||
Lrelink = [] # liste des références à changer
|
||||
for file2 in Lunref:
|
||||
for file1 in Lapi:
|
||||
if file1.filename_same(file2):
|
||||
Lrelink.append((file1, file2))
|
||||
break
|
||||
for fApi, fLoc in Lrelink:
|
||||
Lunref, _, Lrelink = update_find_by_common(Lunref, Lapi, lambda f:f.name)
|
||||
for floc, fapi in Lrelink:
|
||||
if fApi in Lmissing:
|
||||
Lmissing.remove(fApi)
|
||||
Lunref.remove(fLoc)
|
||||
print('moved/copied:', Lrelink)
|
||||
|
||||
# Linke les fichiers identiques au même film
|
||||
Llink = []
|
||||
for file1 in Lunref:
|
||||
for file2 in Lapi:
|
||||
if file1.title == file2.title:
|
||||
Llink.append((file1, file2))
|
||||
print('D add:', file1, file2, file2.api_id)
|
||||
break
|
||||
print('doubles:', sorted(Llink, key=lambda f:str(f)))
|
||||
# Linke les fichiers du même titre (simplifié) au même film
|
||||
Lunref, _, Llink = update_find_by_common(Lunref, Lapi, lambda f:f.title)
|
||||
for f, fApi in Llink:
|
||||
if fApi in Lmissing:
|
||||
Lmissing.remove(fApi)
|
||||
Lunref.remove(f)
|
||||
print('doubles:', sorted(Llink, key=lambda f:str(f[0])))
|
||||
|
||||
# Linke les films par nom si possible
|
||||
APIfilms = api.get_films()
|
||||
|
@ -155,12 +141,12 @@ def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok):
|
|||
for f in APIfilms:
|
||||
if f['title']:
|
||||
t = f['title'].replace(' ','').lower()
|
||||
if len(t) <= 2:
|
||||
if len(t) > 2:
|
||||
if t not in [e[0] for e in API_alltitles]:
|
||||
API_alltitles.append((t, f['id']))
|
||||
if f['title_vo']:
|
||||
t = f['title_vo'].replace(' ','').lower()
|
||||
if len(t) <= 2:
|
||||
if len(t) > 2:
|
||||
if t not in [e[0] for e in API_alltitles]:
|
||||
API_alltitles.append((t, f['id']))
|
||||
Llink2 = []
|
||||
|
@ -206,7 +192,7 @@ def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok):
|
|||
|
||||
# Put les renommages / déplacements
|
||||
i = 0
|
||||
for filmApi, filmLoc in Lrelink:
|
||||
for filmLoc, filmApi in Lrelink:
|
||||
i += 1
|
||||
print('['+str(i)+'/'+str(len(Lrelink))+']'+'relink:', filmApi.title)
|
||||
try:
|
||||
|
@ -291,8 +277,7 @@ def handle_episodes(Lepisode_loc, Lepisode_api, domain, api, rules, tok):
|
|||
Lapi = Lepisode_api
|
||||
|
||||
# fichiers invalides
|
||||
Linvalid = [f for f in Lapi if (not tok.conf.is_valid_file(f.name)) or not (filerule.match_rules(f.path+'/'+f.name, rules))]
|
||||
Lapi = [f for f in Lapi if tok.conf.is_valid_file(f.name)]
|
||||
Lapi, Linvalid = filter_by(Lapi, lambda f:tok.conf.is_valid_file(f.name) and filerule.match_rules(f.path+'/'+f.name, rules))
|
||||
|
||||
# Compare avec la liste de l'api
|
||||
Lmissing = [f for f in Lapi if f not in Lloc] # fichiers non présents localement
|
||||
|
@ -391,6 +376,49 @@ def handle_episodes(Lepisode_loc, Lepisode_api, domain, api, rules, tok):
|
|||
|
||||
# TODO: traiter les séries non référencées (series_not_found)
|
||||
|
||||
def filter_by(L, f_prop):
|
||||
"""
|
||||
Sépare la liste L en deux listes,
|
||||
suivant s'ils vérifient la propriété ou non
|
||||
"""
|
||||
prop_true, prop_false = [], []
|
||||
for e in L:
|
||||
if f_prop(e):
|
||||
prop_true.append(e)
|
||||
else:
|
||||
prop_false.append(e)
|
||||
return prop_true, prop_false
|
||||
|
||||
def update_find_by_common(L1, L2, f_prop):
|
||||
"""
|
||||
Effectue une recherche de propriétés commune entre les éléments
|
||||
de L1 et L2, et retourne les listes modifiés:
|
||||
L1, L2, Lassociation
|
||||
"""
|
||||
found = find_by_common(L1, L2, f_prop)
|
||||
found1 = [f[0] for f in found]
|
||||
found2 = [f[1] for f in found]
|
||||
L1 = [e for e in L1 if e not in found1]
|
||||
L2 = [e for e in L2 if e not in found2]
|
||||
return L1, L2, found
|
||||
|
||||
def find_by_common(L1, L2, f_prop):
|
||||
"""
|
||||
Associe les éléments de <L1> et <L2> à travers leur propriétés
|
||||
trouvées avec la fonction f_prop.
|
||||
Les éléments de L1 ne sont associés qu'une fois, ceux de L2 plusieurs
|
||||
"""
|
||||
found = []
|
||||
Lprop2 = [f_prop(e) for e in L2]
|
||||
for i, e1 in enumerate(L1):
|
||||
prop1 = f_prop(e1)
|
||||
if prop1 in Lprop2:
|
||||
j = Lprop2.find(prop1)
|
||||
e2 = L2[j]
|
||||
found.append((e1, e2))
|
||||
break
|
||||
return found
|
||||
|
||||
|
||||
def post_markers(api, file_, fileid):
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue