piexel-indexer/file.py
2018-02-06 14:31:01 +01:00

101 lines
3.2 KiB
Python

# coding:utf-8
import posixpath
import re
class File:
"""
Décrit une référence de fichier dans le disque
"""
def __init__(self, path, name, info, api_id=None, api_fileid=None, api_fileable_type=None):
self.path = path
self.name = name
self.info = info
self.markers = {}
self.api_id = api_id
self.api_fileid = api_fileid
self.fileable_type = {None: None, 'App\\Film': 'film', 'App\\Episode': 'episode'}[api_fileable_type]
def get_ext(self):
"""
Donne l'extension du fichier
"""
_, ext = posixpath.splitext(self.name)
return ext
def without_ext(self):
"""
Donne le nom du fichier sans extension
"""
n, ext = posixpath.splitext(self.name)
return n
def extract_title(self, tok):
"""
extrait un titre de film depuis la variable #TITLE#
"""
# récupère le titre
if 'TITLE' in self.info:
fname = self.info['TITLE']
else:
fname = self.without_ext()
# 1) séparateurs
fname = fname.replace('.', ' ')
fname = fname.replace('_', ' ')
fname = fname.replace('-', ' ')
# 1.5) parenthèses de marqueurs
fname = fname.replace('(', ' ( ')
fname = fname.replace(')', ' ) ')
# 2) marqueurs
fname, info = tok.tokenize(' ' + fname + ' ')
self.markers = info
# 3) minuscule
fname = fname.lower()
# 4) année
if not 'YEAR' in self.info:
m = re.match(r'.*\[ ?(\d{4}) ?\].*', fname)
if m:
self.info['YEAR'] = m.group(1)
if 'YEAR' in self.info:
year = self.info['YEAR']
fname = fname.replace('[' + str(year) + ']', '')
fname = fname.replace('[ ' + str(year) + ' ]', '')
fname = fname.replace('[' + str(year) + ' ]', '')
fname = fname.replace('[ ' + str(year) + ']', '')
# 5) espaces en bout, centraux et rajoutés
fname = fname.lstrip().rstrip()
while ' ' in fname:
fname = fname.replace(' ', ' ')
# 6) parenthèses de marqueurs
fname = fname.replace('( )', ' ')
while ' ' in fname:
fname = fname.replace(' ', ' ')
self.title = fname
# 7) type: épisode / film
if not self.fileable_type:
for m in ['SERIE', 'EPISODE_NUM', 'SEASON_NUM']:
if m in self.info:
self.fileable_type = 'episode'
if (not self.fileable_type) and 'TITLE' in self.info:
self.fileable_type = 'film'
def filename_same(self, other):
"""
Vérifie si les deux noms de fichiers sont les mêmes
"""
return self.name == other.name
def __eq__(self, other):
return (self.path, self.name) == (other.path, other.name)
def __hash__(self):
return hash((self.path, self.name))
def __str__(self):
if 'YEAR' in self.info:
return str(self.path + '/' + self.name + ' year:[' + str(self.info['YEAR']) + ']')
return str(self.path + '/' + self.name)
def __repr__(self):
return str(self)