# -*- coding: utf-8 -*- # !/usr/bin/env python import datetime import hashlib import inspect import itertools import logging.config import os import re import sys from functools import wraps from os.path import abspath, join import click import daiquiri import daiquiri.formatter PROJECT_ROOT = abspath(os.path.split(os.path.realpath(__file__))[0] + "/..") sys.path.insert(0, PROJECT_ROOT) sys.path.insert(0, join(PROJECT_ROOT, "apps")) CONFIG_DIR = os.path.join(PROJECT_ROOT, 'configs') RESERVED = ('__init__.py', 'base.py', 'local.py') files = itertools.chain.from_iterable(files for root, dirs, files in os.walk(CONFIG_DIR)) configs = [_.replace('.py', '') for _ in files if _.endswith('.py') and _ not in RESERVED] md5 = lambda raw_pwd: hashlib.md5(raw_pwd).hexdigest() get_current_file = lambda: inspect.getfile(inspect.currentframe()) def setup_logger(filename, namespace): filename = filename.replace('.', '-') everything_log_filename = '%s-errors.log' % (filename,) error_log_filename = '%s-everything.log' % (filename,) formatter = daiquiri.formatter.ColorFormatter( fmt = "[%(asctime)s] %(levelname)s[%(thread)d] %(module)s [%(name)s:%(lineno)d]: %(message)s" ) daiquiri.setup( level = logging.DEBUG, outputs = ( daiquiri.output.File(error_log_filename, level = logging.ERROR, formatter = formatter), daiquiri.output.TimedRotatingFile( everything_log_filename, level = logging.DEBUG, interval = datetime.timedelta(days = 1), formatter = formatter ) ) ) return daiquiri.getLogger(namespace) def regex_split(source, *delimiters): regexPattern = '|'.join(map(re.escape, delimiters)) return re.split(regexPattern, source.encode('utf-8')) # def init_environment_vars(): # dotenv_path = join(PROJECT_ROOT, '.env.%s' % os.environ.get('MY_ENV')) # load_dotenv(dotenv_path) def init_django_env(interactive): """ 初始化django的环境 :param interactive: 是否为交互模式,大部分需要人参与的命令脚本此项应为True :return: """ try: if interactive: which_setting = click.prompt( u"请输入设置文件名,可选项, %s" % (configs,)) if which_setting not in configs: click.secho(u"输入不在可选项内!", blink = True, bold = True, bg = 'red') sys.exit(1) else: which_setting = os.environ.get('DJANGO_SETTINGS_MODULE').split('.')[1] click.echo(u"[注意]你正在使用%s配置" % which_setting) os.environ.update({"DJANGO_SETTINGS_MODULE": "configs.%s" % which_setting}) import django django.setup() except KeyError: click.secho(u"请首先在工程根目录文件夹内设置.env环境变量选项, 可参考.envexample文件", blink = True, bold = True, bg = 'red') raise def init_env(interactive = True): init_django_env(interactive) from patch import patch_requests patch_requests() # init_environment_vars() def get_logger(name): return logging.getLogger(name) def measure_time(logger): def decorate(func): @wraps(func) def wrapper(*args, **kwargs): start = datetime.datetime.now() result = func(*args, **kwargs) end = datetime.datetime.now() logger.info('function(%s) time cost:%s' % (func.__name__, end - start)) return result return wrapper return decorate