Commentaires

This commit is contained in:
redstorm45 2017-12-11 09:04:37 +01:00
parent 45f97936f0
commit 036a432b48
5 changed files with 63 additions and 75 deletions

View file

@ -1,10 +1,10 @@
[api] [api]
# Valeur app à transmettre à l'API # Identifiant de connexion à transmettre à l'API
app = '' app = ''
# Token à transmettre à l'API # Token de connexion à transmettre à l'API
token = '' token = ''
# Formats à reconnaitre # Extensions à reconnaître comme extensions vidéos valides
extensions = 'avi','mkv','mp4','m2ts','rmvb' extensions = 'avi','mkv','mp4','m2ts','rmvb'
# Serveur où appeler l'API # Serveur où appeler l'API
server = 'http://piexel.rez' server = 'http://piexel.rez'

18
file.py
View file

@ -16,19 +16,28 @@ class File:
self.fileable_type = {None: None, 'App\\Film':'film', 'App\\Episode':'episode'}[api_fileable_type] self.fileable_type = {None: None, 'App\\Film':'film', 'App\\Episode':'episode'}[api_fileable_type]
def get_ext(self): def get_ext(self):
"""
Donne l'extension du fichier
"""
_, ext = posixpath.splitext(self.name) _, ext = posixpath.splitext(self.name)
return ext return ext
def without_ext(self): def without_ext(self):
"""
Donne le nom du fichier sans extension
"""
n, ext = posixpath.splitext(self.name) n, ext = posixpath.splitext(self.name)
return n return n
def extract_title(self, tok): def extract_title(self, tok):
# extrait un titre de film depuis la variable #TITLE# """
extrait un titre de film depuis la variable #TITLE#
"""
# récupère le titre
if 'TITLE' in self.info: if 'TITLE' in self.info:
fname = self.info['TITLE'] fname = self.info['TITLE']
else: else:
fname, ext = posixpath.splitext(self.name) fname = self.without_ext()
# 1) séparateurs # 1) séparateurs
fname = fname.replace('.', ' ') fname = fname.replace('.', ' ')
fname = fname.replace('_', ' ') fname = fname.replace('_', ' ')
@ -70,8 +79,9 @@ class File:
self.fileable_type = 'film' self.fileable_type = 'film'
def filename_same(self, other): def filename_same(self, other):
# Compare les noms de fichiers de self et de other """
# En supprimant les espaces, la date, et les marques de qualitée Vérifie si les deux noms de fichiers sont les mêmes
"""
return self.name == other.name return self.name == other.name
def __eq__(self, other): def __eq__(self, other):

30
main.py
View file

@ -45,8 +45,10 @@ def ftpwalk(directory, ftp):
def visit_folder(domain, api, rules, tok): def visit_folder(domain, api, rules, tok):
""" """
Visite un dossier sur un serveur, Visite un dossier sur un serveur, spécifié par <domain>,
et ajoute les fichiers trouvés à l'API et ajoute les fichiers qui vérifient les règles <rules>,
à l'API par l'interface <api>, tout en filtrant les tokens
trouvés dans le nom des fichiers avec l'interface <tok>
""" """
# Connection au serveur # Connection au serveur
print('connect to:', domain['server']) print('connect to:', domain['server'])
@ -100,6 +102,10 @@ def visit_folder(domain, api, rules, tok):
print('visit finished ',domain['server']+domain['path']) print('visit finished ',domain['server']+domain['path'])
def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok): def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok):
"""
Utilise les listes des fichiers locaux Lfilm_loc et des fichiers de l'API Lfilm_api
pour mettre à jour la liste des films de l'api sur le domaine <domain>
"""
Lloc = Lfilm_loc Lloc = Lfilm_loc
Lapi = Lfilm_api Lapi = Lfilm_api
@ -277,6 +283,10 @@ def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok):
# TODO: traiter les films non postés (Lcannot_post) # TODO: traiter les films non postés (Lcannot_post)
def handle_episodes(Lepisode_loc, Lepisode_api, domain, api, rules, tok): def handle_episodes(Lepisode_loc, Lepisode_api, domain, api, rules, tok):
"""
Utilise les listes des fichiers locaux Lepisode_loc et des fichiers de l'API Lepisode_api
pour mettre à jour la liste des episodes et des series de l'api sur le domaine <domain>
"""
Lloc = Lepisode_loc Lloc = Lepisode_loc
Lapi = Lepisode_api Lapi = Lepisode_api
@ -383,20 +393,30 @@ def handle_episodes(Lepisode_loc, Lepisode_api, domain, api, rules, tok):
def post_markers(api, file_, fileid): def post_markers(api, file_, fileid):
"""
Poste sur l'api par l'interface <api> tout les marqueurs
du fichier <file_>, indexé à l'ID <fileid>
"""
for lang in file_.markers['lang']: for lang in file_.markers['lang']:
api.post_file_language(fileid, lang) api.post_file_language(fileid, lang)
time.sleep(0.5) time.sleep(1)
for qual in file_.markers['quality']: for qual in file_.markers['quality']:
api.post_file_qualities(fileid, qual) api.post_file_qualities(fileid, qual)
time.sleep(0.5) time.sleep(1)
for sub in file_.markers['subtitle']: for sub in file_.markers['subtitle']:
api.post_file_subtitle(fileid, sub) api.post_file_subtitle(fileid, sub)
time.sleep(0.5) time.sleep(1)
def main(): def main():
"""
Fonction principale du programme, réalise toute les opérations
de chargement des configurations, d'initialisation des interfaces,
et parcours tout les dossiers cherchables.
"""
conf = config.Config() conf = config.Config()
api = piexel.Piexel(conf.server, conf.app, conf.token) api = piexel.Piexel(conf.server, conf.app, conf.token)
tokens = tokenizer.Tokenizer(conf, api) tokens = tokenizer.Tokenizer(conf, api)
folders = api.get_folders() folders = api.get_folders()
rules = api.get_paths() rules = api.get_paths()

View file

@ -89,7 +89,7 @@ class Piexel:
def get_tokens(self, **params): def get_tokens(self, **params):
""" """
Récupère les fichiers Récupère les tokens
:param params: paramètres à passer :param params: paramètres à passer
""" """
fields = self._get_request([], [], **params) fields = self._get_request([], [], **params)
@ -97,7 +97,7 @@ class Piexel:
def get_folders(self, **params): def get_folders(self, **params):
""" """
Récupère les fichiers Récupère les dossiers de recherche
:param params: paramètres à passer :param params: paramètres à passer
""" """
fields = self._get_request([], [], **params) fields = self._get_request([], [], **params)
@ -105,7 +105,7 @@ class Piexel:
def get_paths(self, **params): def get_paths(self, **params):
""" """
Récupère les fichiers Récupère les règles d'indexage
:param params: paramètres à passer :param params: paramètres à passer
""" """
fields = self._get_request([], [], **params) fields = self._get_request([], [], **params)
@ -161,7 +161,7 @@ class Piexel:
def post_file_subtitle(self, file, **params): def post_file_subtitle(self, file, **params):
""" """
Ajoute une langue à un fichier Ajoute une langue de sous-titre à un fichier
:param params: paramètres à passer :param params: paramètres à passer
""" """
fields = self._get_request(['value'], ['value'], **params) fields = self._get_request(['value'], ['value'], **params)
@ -169,7 +169,7 @@ class Piexel:
def post_file_qualities(self, file, **params): def post_file_qualities(self, file, **params):
""" """
Ajoute une langue à un fichier Ajoute une qualitée à un fichier
:param params: paramètres à passer :param params: paramètres à passer
""" """
fields = self._get_request(['value'], ['value'], **params) fields = self._get_request(['value'], ['value'], **params)
@ -199,22 +199,6 @@ class Piexel:
fields = self._get_request(['season', 'episode', 'serie_id'], ['season', 'episode', 'serie_id'], **params) fields = self._get_request(['season', 'episode', 'serie_id'], ['season', 'episode', 'serie_id'], **params)
return self._get_response('episode', fields, 'post') return self._get_response('episode', fields, 'post')
def post_broken(self, **params):
"""
Ajoute un lien mort
:param params: paramètres à passer
"""
fields = self._get_request(['id', 'type'], ['id', 'type'], **params)
return self._get_response('broken', fields, 'post')
def put_film(self, **params):
"""
Edite un film
:param params: paramètres à passer
"""
fields = self._get_request(['id', 'title', 'title_vo', 'tmdb_id', 'summary', 'cover_img', 'rating', 'runtime', 'release_date', 'autoFill'], ['id'], **params)
return self._get_response('films', fields, 'put')
def put_file(self, id, **params): def put_file(self, id, **params):
""" """
Edite un fichier Edite un fichier
@ -223,48 +207,11 @@ class Piexel:
fields = self._get_request(['path', 'name', 'filable_type', 'filable_id', 'quality', 'lang', 'subtitles'], [], **params) fields = self._get_request(['path', 'name', 'filable_type', 'filable_id', 'quality', 'lang', 'subtitles'], [], **params)
return self._get_response('file/'+str(id), fields, 'put') return self._get_response('file/'+str(id), fields, 'put')
def put_subtitle(self, **params):
"""
Edite un sous-titre
:param params: paramètres à passer
"""
fields = self._get_request(['id', 'path', 'name', 'subtitlable_type', 'subtitlable_id', 'quality', 'lang'], ['id'], **params)
return self._get_response('subtitles', fields, 'put')
def put_serie(self, **params):
"""
Edite une série
:param params: paramètres à passer
"""
fields = self._get_request(['id', 'title', 'status', 'imdb_id', 'tmdb_id', 'summary', 'cover_img', 'rating', 'release_date', 'autoFill'], ['id'], **params)
return self._get_response('series', fields, 'put')
def put_episode(self, **params):
"""
Edite un épisode d'une série
:param params: paramètres à passer
"""
fields = self._get_request(['id', 'title', 'serid_id', 'tmdb_id', 'summary', 'cover_img', 'season', 'episode', 'rating', 'release_date'], ['id'], **params)
return self._get_response('episodes', fields, 'put')
def put_broken(self, **params):
"""
Edite un lien mort
:param params: paramètres à passer
"""
fields = self._get_request(['id', 'treated'], ['id', 'treated'], **params)
return self._get_response('broken', fields, 'put')
def delete_file(self, id, **params): def delete_file(self, id, **params):
""" """
Edite un lien mort Supprime un fichier
:param params: paramètres à passer :param params: paramètres à passer
""" """
fields = self._get_request([], [], **params) fields = self._get_request([], [], **params)
return self._get_response('file/'+str(id), fields, 'delete') return self._get_response('file/'+str(id), fields, 'delete')
if __name__ == '__main__':
piexel = Piexel('http://piexel.rez', 'app', 'token')
film = piexel.get_films(title='test')
print(film)

View file

@ -5,18 +5,29 @@ import re
class Tokenizer: class Tokenizer:
def __init__(self, conf, api): def __init__(self, conf, api):
self.conf = conf self.conf = conf
self.api = api self.reload_tokens(api)
self.reload_tokens()
def reload_tokens(self): def reload_tokens(self, api):
self.tk = self.api.get_tokens() """
Charge les tokens depuis l'API,
et initialise la liste des étapes
"""
self.tk = api.get_tokens()
self.steps = list(set(t['step'] for t in self.tk)) self.steps = list(set(t['step'] for t in self.tk))
self.steps.sort() self.steps.sort()
def get_tokens_step(self, step): def get_tokens_step(self, step):
"""
Retourne tout les tokens de l'étape <step>
"""
return [t for t in self.tk if t['step'] == step] return [t for t in self.tk if t['step'] == step]
def tokenize(self, filename): def tokenize(self, filename):
"""
Analyse <filename> pour trouver tous ses marqueurs.
Les marqueurs sont enlevés, et rangés dans des listes.
retourne le nom privé des marqueurs, ainsi que le dictionnaire des marqueurs
"""
found = {'lang':[], 'quality':[], 'subtitle':[]} found = {'lang':[], 'quality':[], 'subtitle':[]}
for step in self.steps: for step in self.steps:
for tok in self.get_tokens_step(step): for tok in self.get_tokens_step(step):