123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- # -*- 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
|