mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2025-07-15 01:32:53 -07:00
Fix flake8-commas C812 missing trailing comma
This commit is contained in:
parent
0bcbabd681
commit
14b2aa6bf4
13 changed files with 39 additions and 39 deletions
|
@ -110,7 +110,7 @@ FORKS = {
|
|||
FORK_MEDUSA: {'proc_dir': None, 'failed': None, 'process_method': None, 'force': None, 'delete_on': None, 'ignore_subs': None},
|
||||
FORK_MEDUSA_API: {'path': None, 'failed': None, 'process_method': None, 'force_replace': None, 'return_data': None, 'type': None, 'delete_files': None, 'is_priority': None},
|
||||
FORK_SICKGEAR: {'dir': None, 'failed': None, 'process_method': None, 'force': None},
|
||||
FORK_STHENO: {"proc_dir": None, "failed": None, "process_method": None, "force": None, "delete_on": None, "ignore_subs": None}
|
||||
FORK_STHENO: {"proc_dir": None, "failed": None, "process_method": None, "force": None, "delete_on": None, "ignore_subs": None},
|
||||
}
|
||||
ALL_FORKS = {k: None for k in set(list(itertools.chain.from_iterable([FORKS[x].keys() for x in FORKS.keys()])))}
|
||||
|
||||
|
@ -653,7 +653,7 @@ def configure_transcoder():
|
|||
codec_alias = {
|
||||
'libx264': ['libx264', 'h264', 'h.264', 'AVC', 'MPEG-4'],
|
||||
'libmp3lame': ['libmp3lame', 'mp3'],
|
||||
'libfaac': ['libfaac', 'aac', 'faac']
|
||||
'libfaac': ['libfaac', 'aac', 'faac'],
|
||||
}
|
||||
transcode_defaults = {
|
||||
'iPad': {
|
||||
|
@ -662,7 +662,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'aac', 'ACODEC_ALLOW': ['libfaac'], 'ABITRATE': None, 'ACHANNELS': 2,
|
||||
'ACODEC2': 'ac3', 'ACODEC2_ALLOW': ['ac3'], 'ABITRATE2': None, 'ACHANNELS2': 6,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'iPad-1080p': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -670,7 +670,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'aac', 'ACODEC_ALLOW': ['libfaac'], 'ABITRATE': None, 'ACHANNELS': 2,
|
||||
'ACODEC2': 'ac3', 'ACODEC2_ALLOW': ['ac3'], 'ABITRATE2': None, 'ACHANNELS2': 6,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'iPad-720p': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -678,7 +678,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'aac', 'ACODEC_ALLOW': ['libfaac'], 'ABITRATE': None, 'ACHANNELS': 2,
|
||||
'ACODEC2': 'ac3', 'ACODEC2_ALLOW': ['ac3'], 'ABITRATE2': None, 'ACHANNELS2': 6,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'Apple-TV': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -686,7 +686,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'ac3', 'ACODEC_ALLOW': ['ac3'], 'ABITRATE': None, 'ACHANNELS': 6,
|
||||
'ACODEC2': 'aac', 'ACODEC2_ALLOW': ['libfaac'], 'ABITRATE2': None, 'ACHANNELS2': 2,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'iPod': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -694,7 +694,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'aac', 'ACODEC_ALLOW': ['libfaac'], 'ABITRATE': 128000, 'ACHANNELS': 2,
|
||||
'ACODEC2': None, 'ACODEC2_ALLOW': [], 'ABITRATE2': None, 'ACHANNELS2': None,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'iPhone': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -702,7 +702,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'aac', 'ACODEC_ALLOW': ['libfaac'], 'ABITRATE': 128000, 'ACHANNELS': 2,
|
||||
'ACODEC2': None, 'ACODEC2_ALLOW': [], 'ABITRATE2': None, 'ACHANNELS2': None,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'PS3': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -710,7 +710,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'ac3', 'ACODEC_ALLOW': ['ac3'], 'ABITRATE': None, 'ACHANNELS': 6,
|
||||
'ACODEC2': 'aac', 'ACODEC2_ALLOW': ['libfaac'], 'ABITRATE2': None, 'ACHANNELS2': 2,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'xbox': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -718,7 +718,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'ac3', 'ACODEC_ALLOW': ['ac3'], 'ABITRATE': None, 'ACHANNELS': 6,
|
||||
'ACODEC2': None, 'ACODEC2_ALLOW': [], 'ABITRATE2': None, 'ACHANNELS2': None,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'Roku-480p': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -726,7 +726,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'aac', 'ACODEC_ALLOW': ['libfaac'], 'ABITRATE': 128000, 'ACHANNELS': 2,
|
||||
'ACODEC2': 'ac3', 'ACODEC2_ALLOW': ['ac3'], 'ABITRATE2': None, 'ACHANNELS2': 6,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'Roku-720p': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -734,7 +734,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'aac', 'ACODEC_ALLOW': ['libfaac'], 'ABITRATE': 128000, 'ACHANNELS': 2,
|
||||
'ACODEC2': 'ac3', 'ACODEC2_ALLOW': ['ac3'], 'ABITRATE2': None, 'ACHANNELS2': 6,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'Roku-1080p': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -742,7 +742,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'aac', 'ACODEC_ALLOW': ['libfaac'], 'ABITRATE': 160000, 'ACHANNELS': 2,
|
||||
'ACODEC2': 'ac3', 'ACODEC2_ALLOW': ['ac3'], 'ABITRATE2': None, 'ACHANNELS2': 6,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'mkv': {
|
||||
'VEXTENSION': '.mkv', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -750,7 +750,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'dts', 'ACODEC_ALLOW': ['libfaac', 'dts', 'ac3', 'mp2', 'mp3'], 'ABITRATE': None, 'ACHANNELS': 8,
|
||||
'ACODEC2': None, 'ACODEC2_ALLOW': [], 'ABITRATE2': None, 'ACHANNELS2': None,
|
||||
'ACODEC3': 'ac3', 'ACODEC3_ALLOW': ['libfaac', 'dts', 'ac3', 'mp2', 'mp3'], 'ABITRATE3': None, 'ACHANNELS3': 8,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'mp4-scene-release': {
|
||||
'VEXTENSION': '.mp4', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': None, 'VCRF': 19, 'VLEVEL': '3.1',
|
||||
|
@ -758,7 +758,7 @@ def configure_transcoder():
|
|||
'ACODEC': 'dts', 'ACODEC_ALLOW': ['libfaac', 'dts', 'ac3', 'mp2', 'mp3'], 'ABITRATE': None, 'ACHANNELS': 8,
|
||||
'ACODEC2': None, 'ACODEC2_ALLOW': [], 'ABITRATE2': None, 'ACHANNELS2': None,
|
||||
'ACODEC3': 'ac3', 'ACODEC3_ALLOW': ['libfaac', 'dts', 'ac3', 'mp2', 'mp3'], 'ABITRATE3': None, 'ACHANNELS3': 8,
|
||||
'SCODEC': 'mov_text'
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
'MKV-SD': {
|
||||
'VEXTENSION': '.mkv', 'VCODEC': 'libx264', 'VPRESET': None, 'VFRAMERATE': None, 'VBITRATE': '1200k', 'VCRF': None, 'VLEVEL': None,
|
||||
|
@ -766,8 +766,8 @@ def configure_transcoder():
|
|||
'ACODEC': 'aac', 'ACODEC_ALLOW': ['libfaac'], 'ABITRATE': 128000, 'ACHANNELS': 2,
|
||||
'ACODEC2': 'ac3', 'ACODEC2_ALLOW': ['ac3'], 'ABITRATE2': None, 'ACHANNELS2': 6,
|
||||
'ACODEC3': None, 'ACODEC3_ALLOW': [], 'ABITRATE3': None, 'ACHANNELS3': None,
|
||||
'SCODEC': 'mov_text'
|
||||
}
|
||||
'SCODEC': 'mov_text',
|
||||
},
|
||||
}
|
||||
if DEFAULTS and DEFAULTS in transcode_defaults:
|
||||
VEXTENSION = transcode_defaults[DEFAULTS]['VEXTENSION']
|
||||
|
@ -957,7 +957,7 @@ def check_python():
|
|||
major=sys.version_info[0],
|
||||
minor=sys.version_info[1],
|
||||
x=days_left,
|
||||
)
|
||||
),
|
||||
)
|
||||
if days_left <= grace_period:
|
||||
logger.warning('Please upgrade to a more recent Python version.')
|
||||
|
|
|
@ -60,7 +60,7 @@ def process(section, dir_name, input_name=None, status=0, client_agent='manual',
|
|||
logger.error('Unable to open URL', section)
|
||||
return ProcessResult(
|
||||
message='{0}: Failed to post-process - Unable to connect to {0}'.format(section),
|
||||
status_code=1
|
||||
status_code=1,
|
||||
)
|
||||
if r.status_code not in [requests.codes.ok, requests.codes.created, requests.codes.accepted]:
|
||||
logger.error('Server returned status {0}'.format(r.status_code), section)
|
||||
|
|
|
@ -17,7 +17,7 @@ class ProcessResult(object):
|
|||
def __str__(self):
|
||||
return 'Processing {0}: {1}'.format(
|
||||
'succeeded' if bool(self) else 'failed',
|
||||
self.message
|
||||
self.message,
|
||||
)
|
||||
|
||||
def __repr__(self):
|
||||
|
|
|
@ -46,7 +46,7 @@ def process(section, dir_name, input_name=None, status=0, client_agent='manual',
|
|||
'api_key': apikey,
|
||||
'mode': 'UPDATEREQUESTEDSTATUS',
|
||||
'db_id': gamez_id,
|
||||
'status': download_status
|
||||
'status': download_status,
|
||||
}
|
||||
|
||||
logger.debug('Opening URL: {0}'.format(url), section)
|
||||
|
|
|
@ -73,7 +73,7 @@ def process(section, dir_name, input_name=None, status=0, client_agent='manual',
|
|||
params = {
|
||||
'apikey': apikey,
|
||||
'cmd': 'forceProcess',
|
||||
'dir': remote_dir(dir_name) if remote_path else dir_name
|
||||
'dir': remote_dir(dir_name) if remote_path else dir_name,
|
||||
}
|
||||
|
||||
res = force_process(params, url, apikey, input_name, dir_name, section, wait_for)
|
||||
|
@ -83,7 +83,7 @@ def process(section, dir_name, input_name=None, status=0, client_agent='manual',
|
|||
params = {
|
||||
'apikey': apikey,
|
||||
'cmd': 'forceProcess',
|
||||
'dir': os.path.split(remote_dir(dir_name))[0] if remote_path else os.path.split(dir_name)[0]
|
||||
'dir': os.path.split(remote_dir(dir_name))[0] if remote_path else os.path.split(dir_name)[0],
|
||||
}
|
||||
|
||||
res = force_process(params, url, apikey, input_name, dir_name, section, wait_for)
|
||||
|
@ -187,7 +187,7 @@ def get_status(url, apikey, dir_name):
|
|||
|
||||
params = {
|
||||
'apikey': apikey,
|
||||
'cmd': 'getHistory'
|
||||
'cmd': 'getHistory',
|
||||
}
|
||||
|
||||
logger.debug('Opening URL: {0} with PARAMS: {1}'.format(url, params))
|
||||
|
|
|
@ -33,7 +33,7 @@ class InitialSchema(main_db.SchemaUpgrade):
|
|||
queries = [
|
||||
'CREATE TABLE db_version (db_version INTEGER);',
|
||||
'CREATE TABLE downloads (input_directory TEXT, input_name TEXT, input_hash TEXT, input_id TEXT, client_agent TEXT, status INTEGER, last_update NUMERIC, CONSTRAINT pk_downloadID PRIMARY KEY (input_directory, input_name));',
|
||||
'INSERT INTO db_version (db_version) VALUES (2);'
|
||||
'INSERT INTO db_version (db_version) VALUES (2);',
|
||||
]
|
||||
for query in queries:
|
||||
self.connection.action(query)
|
||||
|
@ -59,7 +59,7 @@ class InitialSchema(main_db.SchemaUpgrade):
|
|||
'INSERT INTO downloads2 SELECT * FROM downloads;',
|
||||
'DROP TABLE IF EXISTS downloads;',
|
||||
'ALTER TABLE downloads2 RENAME TO downloads;',
|
||||
'INSERT INTO db_version (db_version) VALUES (2);'
|
||||
'INSERT INTO db_version (db_version) VALUES (2);',
|
||||
]
|
||||
for query in queries:
|
||||
self.connection.action(query)
|
||||
|
|
|
@ -42,7 +42,7 @@ def auto_fork(section, input_category):
|
|||
logger.info('Attempting to verify {category} fork'.format
|
||||
(category=input_category))
|
||||
url = '{protocol}{host}:{port}{root}/api/rootfolder'.format(
|
||||
protocol=protocol, host=host, port=port, root=web_root
|
||||
protocol=protocol, host=host, port=port, root=web_root,
|
||||
)
|
||||
headers = {'X-Api-Key': apikey}
|
||||
try:
|
||||
|
@ -66,11 +66,11 @@ def auto_fork(section, input_category):
|
|||
|
||||
if apikey:
|
||||
url = '{protocol}{host}:{port}{root}/api/{apikey}/?cmd=help&subject=postprocess'.format(
|
||||
protocol=protocol, host=host, port=port, root=web_root, apikey=apikey
|
||||
protocol=protocol, host=host, port=port, root=web_root, apikey=apikey,
|
||||
)
|
||||
else:
|
||||
url = '{protocol}{host}:{port}{root}/home/postprocess/'.format(
|
||||
protocol=protocol, host=host, port=port, root=web_root
|
||||
protocol=protocol, host=host, port=port, root=web_root,
|
||||
)
|
||||
|
||||
# attempting to auto-detect fork
|
||||
|
|
|
@ -85,7 +85,7 @@ class NTMRotatingLogHandler(object):
|
|||
console.setFormatter(DispatchingFormatter(
|
||||
{'nzbtomedia': logging.Formatter('[%(asctime)s] [%(levelname)s]::%(message)s', '%H:%M:%S'),
|
||||
'postprocess': logging.Formatter('[%(asctime)s] [%(levelname)s]::%(message)s', '%H:%M:%S'),
|
||||
'db': logging.Formatter('[%(asctime)s] [%(levelname)s]::%(message)s', '%H:%M:%S')
|
||||
'db': logging.Formatter('[%(asctime)s] [%(levelname)s]::%(message)s', '%H:%M:%S'),
|
||||
},
|
||||
logging.Formatter('%(message)s'), ))
|
||||
|
||||
|
@ -122,7 +122,7 @@ class NTMRotatingLogHandler(object):
|
|||
file_handler.setFormatter(DispatchingFormatter(
|
||||
{'nzbtomedia': logging.Formatter('%(asctime)s %(levelname)-8s::%(message)s', '%Y-%m-%d %H:%M:%S'),
|
||||
'postprocess': logging.Formatter('%(asctime)s %(levelname)-8s::%(message)s', '%Y-%m-%d %H:%M:%S'),
|
||||
'db': logging.Formatter('%(asctime)s %(levelname)-8s::%(message)s', '%Y-%m-%d %H:%M:%S')
|
||||
'db': logging.Formatter('%(asctime)s %(levelname)-8s::%(message)s', '%Y-%m-%d %H:%M:%S'),
|
||||
},
|
||||
logging.Formatter('%(message)s'), ))
|
||||
|
||||
|
|
|
@ -183,9 +183,9 @@ class DBConnection(object):
|
|||
'WHERE {conditions}'.format(
|
||||
table=table_name,
|
||||
params=', '.join(gen_params(value_dict)),
|
||||
conditions=' AND '.join(gen_params(key_dict))
|
||||
conditions=' AND '.join(gen_params(key_dict)),
|
||||
),
|
||||
items
|
||||
items,
|
||||
)
|
||||
|
||||
if self.connection.total_changes == changes_before:
|
||||
|
@ -194,9 +194,9 @@ class DBConnection(object):
|
|||
'VALUES ({values})'.format(
|
||||
table=table_name,
|
||||
columns=', '.join(map(text_type, value_dict.keys())),
|
||||
values=', '.join(['?'] * len(value_dict.values()))
|
||||
values=', '.join(['?'] * len(value_dict.values())),
|
||||
),
|
||||
list(value_dict.values())
|
||||
list(value_dict.values()),
|
||||
)
|
||||
|
||||
def table_info(self, table_name):
|
||||
|
|
|
@ -14,7 +14,7 @@ def configure_client():
|
|||
password = core.QBITTORRENT_PASSWORD
|
||||
|
||||
logger.debug(
|
||||
'Connecting to {0}: http://{1}:{2}'.format(agent, host, port)
|
||||
'Connecting to {0}: http://{1}:{2}'.format(agent, host, port),
|
||||
)
|
||||
client = qBittorrentClient('http://{0}:{1}/'.format(host, port))
|
||||
try:
|
||||
|
|
|
@ -25,7 +25,7 @@ media_list = [r'\.s\d{2}e\d{2}\.', r'\.1080[pi]\.', r'\.720p\.', r'\.576[pi]', r
|
|||
r'\.internal\.', r'\bac3\b', r'\.ntsc\.', r'\.pal\.', r'\.secam\.', r'\bdivx\b', r'\bxvid\b']
|
||||
media_pattern = re.compile('|'.join(media_list), flags=re.IGNORECASE)
|
||||
garbage_name = re.compile(r'^[a-zA-Z0-9]*$')
|
||||
char_replace = [[r'(\w)1\.(\w)', r'\1i\2']
|
||||
char_replace = [[r'(\w)1\.(\w)', r'\1i\2'],
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -672,7 +672,7 @@ def rip_iso(item, new_dir, bitbucket):
|
|||
combined.extend(concat)
|
||||
continue
|
||||
name = '{name}.cd{x}'.format(
|
||||
name=os.path.splitext(os.path.split(item)[1])[0], x=n + 1
|
||||
name=os.path.splitext(os.path.split(item)[1])[0], x=n + 1,
|
||||
)
|
||||
new_files.append({item: {'name': name, 'files': concat}})
|
||||
if core.CONCAT:
|
||||
|
|
2
setup.py
2
setup.py
|
@ -11,7 +11,7 @@ from setuptools import setup
|
|||
def read(*names, **kwargs):
|
||||
with io.open(
|
||||
os.path.join(os.path.dirname(__file__), *names),
|
||||
encoding=kwargs.get('encoding', 'utf8')
|
||||
encoding=kwargs.get('encoding', 'utf8'),
|
||||
) as fh:
|
||||
return fh.read()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue