Commentaires
This commit is contained in:
parent
45f97936f0
commit
036a432b48
5 changed files with 63 additions and 75 deletions
|
@ -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
18
file.py
|
@ -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
30
main.py
|
@ -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()
|
||||||
|
|
||||||
|
|
65
piexel.py
65
piexel.py
|
@ -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)
|
|
||||||
|
|
19
tokenizer.py
19
tokenizer.py
|
@ -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):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue