Exemple #1
0
 async def parse_data(request):
     if request.method == 'POST':
         if request.content_type.startswith('application/json'):
             request.__data__ = await request.json()
             logger.info('request json: %s' % str(request.__data__))
         elif request.content_type.startswith(
                 'application/x-www-form-urlencoded'):
             request.__data__ = await request.post()
             logger.info('request form: %s' % str(request.__data__))
     return (await handler(request))
Exemple #2
0
async def init(loop):
    await orm.create_pool(loop=loop, **configs.db)
    app = web.Application(
        loop=loop,
        middlewares=[logger_factory, auth_factory, response_factory])
    init_jinja2(app, filters=dict(datetime=datetime_filter))
    add_routes(app, 'handlers')
    add_static(app)
    srv = await loop.create_server(app.make_handler(), '127.0.0.1', 9000)
    logger.info('server started at http://127.0.0.1:9000...')
    return srv
Exemple #3
0
def input_param(**kw):
    '''
    :param kw:
    :return:
    '''
    copy = utils.Dict(**web.input(_unicode=False))
    if kw:
        for k, v in kw.iteritems():
            if not k in copy:
                copy[k] = v
    logger.info("recv url: %s data: %s" % (web.ctx.path, copy))
    return copy
Exemple #4
0
def input_param(**kw):
    '''
    :param kw:
    :return:
    '''
    copy = utils.Dict(**web.input(_unicode=False))
    if kw:
        for k, v in kw.iteritems():
            if not k in copy:
                copy[k] = v
    logger.info("recv url: %s data: %s" % (web.ctx.path, copy))
    return copy
Exemple #5
0
def input_data(**kw):
    '''
    request data
    :return:
    '''
    copy = loads(web.data())
    if kw:
        for k, v in kw.iteritems():
            if not k in copy:
                copy[k] = v
    logger.info("recv url: %s data: %s" % (web.ctx.path, copy))
    return copy
Exemple #6
0
def input_data(**kw):
    '''
    request data
    :return:
    '''
    copy = loads(web.data())
    if kw:
        for k, v in kw.iteritems():
            if not k in copy:
                copy[k] = v
    logger.info("recv url: %s data: %s" % (web.ctx.path, copy))
    return copy
Exemple #7
0
async def select(sql, args, size=None):
    log(sql, args)
    global __pool
    async with __pool.get() as conn:
        async with conn.cursor(aiomysql.DictCursor) as cur:
            await cur.execute(sql.replace('?', '%s'), args or ())
        if size:
            rs = await cur.fetchmany(size)
        else:
            rs = await cur.fetchall()
        await cur.close()
        logger.info('rows returned: %s' % len(rs))
        return rs
Exemple #8
0
 async def auth(request):
     logger.info('check user: %s %s' % (request.method, request.path))
     request.__user__ = None
     cookie_str = request.cookies.get(COOKIE_NAME)
     if cookie_str:
         user = await cookie2user(cookie_str)
         if user:
             logger.info('set current user: %s' % user.email)
             request.__user__ = user
     if request.path.startswith('/manage/') and (
             request.__user__ is None or not request.__user__.admin):
         return web.HTTPFound('/signin')
     return (await handler(request))
Exemple #9
0
 def run(self):
     logger.info('Start SaltMan.')
     lc = util.LoopChecker('Main loop')
     while True:
         try:
             targets = self.collect_delegate.collect(self.config)
             self.compress_delegate.compress(self.config, targets)
             time.sleep(1)
             lc.check()
             if len(targets) > 0:
                 lc.reset()
         except:
             e = sys.exc_info()[0]
             logger.error(e)
             time.sleep(5)
Exemple #10
0
async def create_pool(loop, **kwargs):
    logger.info('start create database connection pool...')
    global __pool
    __pool = await aiomysql.create_pool(
        host=kwargs.get('host', 'localhost'),
        port=kwargs.get('port', 3306),
        user=kwargs['user'],
        password=kwargs['password'],
        db=kwargs['database'],
        charset=kwargs.get('charset', 'utf8'),
        autocommit=kwargs.get('autocommit', True),
        maxsize=kwargs.get('maxsize', 10),
        minsize=kwargs.get('minsize', 1),
        loop=loop,
    )
Exemple #11
0
 def __new__(cls, name, bases, attrs):
     # 排除Model类本身
     if name == 'Model':
         return type.__new__(cls, name, bases, attrs)
     tableName = attrs.get('__table__', None) or name
     logger.info('found model: %s (table: %s)' % (name, tableName))
     # 获取所有的Field和主键名:
     mappings = dict()
     fields = []
     primaryKey = None
     for k, v in attrs.items():
         if isinstance(v, Field):
             logger.info('Found mapping: %s ==> %s' % (k, v))
             mappings[k] = v
             if v.primary_key:
                 # 找到主键
                 if primaryKey:
                     raise RuntimeError(
                         'Duplicate primary key for field: %s' % k)
                 primaryKey = k
             else:
                 fields.append(k)
     if not primaryKey:
         raise RuntimeError('Primary key not found!')
     for k in mappings.keys():
         attrs.pop(k)
     escaped_fields = list(map(lambda f: '`%s`' % f, fields))
     attrs['__mappings__'] = mappings  # 保存属性和列的映射关系
     attrs['__table__'] = tableName
     attrs['__primary_key__'] = primaryKey  # 主键属性名
     attrs['__fields__'] = fields  # 除主键外的属性名
     # 构造默认的SELECT,INSERT,UPDATE和DELETE语句
     attrs['__select__'] = 'select `%s`,%s from `%s`' % (
         primaryKey, ','.join(fields), tableName)
     attrs['__insert__'] = 'insert into `%s` (%s, `%s`) VALUES (%s)' % (
         tableName, ','.join(escaped_fields), primaryKey,
         create_args_string(len(escaped_fields) + 1))
     attrs['__update__'] = 'update `%s` set %s where `%s`=?' % (
         tableName, ', '.join(
             map(lambda f: '`%s`=?' %
                 (mappings.get(f).name or f), fields)), primaryKey)
     attrs['__delete__'] = 'delete from `%s` where `%s`=?' % (tableName,
                                                              primaryKey)
     return type.__new__(cls, name, bases, attrs)
Exemple #12
0
def init_jinja2(app, **kw):
    logger.info('init jinja2...')
    options = dict(autoescape=kw.get('autoescape', True),
                   block_start_string=kw.get('block_start_string', '{%'),
                   block_end_string=kw.get('block_end_string', '%}'),
                   variable_start_string=kw.get('variable_start_string', '{{'),
                   variable_end_string=kw.get('variable_end_string', '}}'),
                   auto_reload=kw.get('auto_reload', True))
    path = kw.get('path', None)
    if path is None:
        path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                            'templates')
        logger.info('set jinja2 template path: %s' % path)
    env = Environment(loader=FileSystemLoader(path), **options)
    filters = kw.get('filters', None)
    if filters is not None:
        for name, f in filters.items():
            env.filters[name] = f
    app['__templating__'] = env
Exemple #13
0
 async def response(request):
     logger.info('Response handler...')
     r = await handler(request)
     if isinstance(r, web.StreamResponse):
         return r
     if isinstance(r, bytes):
         resp = web.Response(body=r)
         resp.content_type = 'application/octet-stream'
         return resp
     if isinstance(r, str):
         if r.startswith('redirect:'):
             return web.HTTPFound(r[9:])
         resp = web.Response(body=r.encode('utf-8'))
         resp.content_type = 'text/html;charset=utf-8'
         return resp
     if isinstance(r, dict):
         template = r.get('__template__')
         if template is None:
             resp = web.Response(body=json.dumps(
                 r, ensure_ascii=False,
                 default=lambda o: o.__dict__).encode('utf-8'))
             resp.content_type = 'application/json;charset=utf-8'
             return resp
         else:
             r['__user__'] = request.__user__
             resp = web.Response(
                 body=app['__templating__'].get_template(template).render(
                     **r).encode('utf-8'))
             resp.content_type = 'text/html;charset=utf-8'
             return resp
     if isinstance(r, int) and r >= 100 and r < 600:
         return web.Response(r)
     if isinstance(r, tuple) and len(r) == 2:
         t, m = r
         if isinstance(t, int) and t >= 100 and t < 600:
             return web.Response(t, str(m))
     # default:
     resp = web.Response(body=str(r).encode('utf-8'))
     resp.content_type = 'text/plain;charset=utf-8'
     return resp
Exemple #14
0
    def __init__(self):
        super(Config, self).__init__()
        self.config = None

        cur = os.path.dirname(os.path.realpath(__file__))
        self.filename = cur + '/../config/config.base.json'
        self.local_filename = cur + '/../config/config.local.json'

        with open(self.filename, 'r') as fd:
            self.base = fd.read()

        if os.path.isfile(self.local_filename):
            with open(self.local_filename, 'r') as fd:
                self.local = fd.read()
        else:
            self.local = '{}'

        b = json.loads(self.base)
        l = json.loads(self.local)
        self.config = {
            key: value for (key, value) in (b.items() + l.items())
            }
        logger.info(self.config)
Exemple #15
0
                                  msg=STATUS_CODE[CODE_SUCCESS])
            resp = func(*args, **kw)
            if resp:
                resp_obj.result = resp
            r = json.dumps(_encode_utf8(**resp_obj), ensure_ascii=False)
        except APIError, e:
            error_obj = _encode_utf8(rtn=e.error_code, msg=e.message)
            r = json.dumps(error_obj, ensure_ascii=False)
        except Exception, e:
            # raise
            error_obj = _encode_utf8(rtn=CODE_INTERNAL_ERROR,
                                     msg='[%s]%s' %
                                     (e.__class__.__name__, e.message))
            r = json.dumps(error_obj, ensure_ascii=False)
        web.header('Content-Type', 'application/json;charset=utf-8')
        logger.info("resp data: %s" % r)
        return r

    return _wrapper


def assert_not_empty(text, name):
    if not text:
        raise APIValueError("%s is empty" % name)
    return text


def assert_int(s, name):
    try:
        return int(s)
    except ValueError:
Exemple #16
0
async def close_pool():
    logger.info('close database connection pool...')
    global __pool
    if __pool is not None:
        __pool.close()
        await __pool.wait_closed()
Exemple #17
0
def log(sql, args=()):
    logger.info('SQL: %s, args: %s' % (sql, args))
Exemple #18
0
 def check(self):
     self.cur_count += 1
     if self.cur_count >= self.next_count:
         self.next_count *= 2
         logger.info('%s (%d)' % (self.msg, self.cur_count))
Exemple #19
0
    def _wrapper(*args, **kw):
        try:
            resp_obj = utils.Dict(rtn=CODE_SUCCESS, msg=STATUS_CODE[CODE_SUCCESS])
            resp = func(*args, **kw)
            if resp:
                resp_obj.result = resp
            r = json.dumps(_encode_utf8(**resp_obj), ensure_ascii=False)
        except APIError, e:
            error_obj = _encode_utf8(rtn=e.error_code, msg=e.message)
            r = json.dumps(error_obj, ensure_ascii=False)
        except Exception, e:
            # raise
            error_obj = _encode_utf8(rtn=CODE_INTERNAL_ERROR, msg='[%s]%s' % (e.__class__.__name__, e.message))
            r = json.dumps(error_obj, ensure_ascii=False)
        web.header('Content-Type', 'application/json;charset=utf-8')
        logger.info("resp data: %s" % r)
        return r

    return _wrapper


def assert_not_empty(text, name):
    if not text:
        raise APIValueError("%s is empty" % name)
    return text


def assert_int(s, name):
    try:
        return int(s)
    except ValueError:
Exemple #20
0
 async def logger1(request):
     logger.info('Request: %s %s' % (request.method, request.path))
     return (await handler(request))
Exemple #21
0
def logon(request):
    '''
        登录界面视图
        登录处理视图
        '''
    logger.info("logon: %s" % request)
    logout(request)
    request.csrf_processing_done = True
    ret = login(request)  #  登录页面视图接口
    if not request.POST: return ret

    #软件狗验证,
    #国外逻辑定义:客户端操作系统的语言非中文(IE),浏览器语言非中文(其他浏览器ff,so)
    #        client_language=request.POST.get("client_language")
    #        check_ret=authorize_fun.login_check(request,client_language)
    #        print settings.ZKECO_DEVICE_LIMIT,settings.ATT_DEVICE_LIMIT,settings.MAX_ACPANEL_COUNT,'\n'
    #        if check_ret!=True:
    #            return HttpResponse(check_ret)

    #指纹登入,修改request.user
    #        register_finger = request.REQUEST.get("fpflag", "")
    #        if register_finger == 'fplogin':
    #            template = identify_operatorfinger(request)       #用户比对指纹进入系统
    #            if template == "USER_ERROR":
    #                return HttpResponse("user_error")
    #            elif template == FP_NO_LICENCES:
    #                return HttpResponse('1')
    #            elif template == FP_IDENTIFY_FAILED:
    #                return HttpResponse("error")
    #            else:
    #                user = template.user
    #                template_logon(request,user)

    user = request.user
    logger.info('user: %s' % user)  # 登录日志记录
    if user.is_anonymous():
        return HttpResponse(
            u"%(msg)s" % {"msg": _(u"用户名或密码错误,原因可能是:忘记密码;未区分字母大小写;未开启小键盘!")})
    eb = -1
    try:
        eb = user.backend.find('EmployeeBackend')  # 重载实现员工登录验证
    except:
        pass
    if eb == -1:  # 用户登录
        user.employee = None
        if 'employee' in request.session:
            del request.session["employee"]
    else:  # 员工登录
        request.session["employee"] = user.employee
    if user.is_staff:
        from base.options import options
        from django.utils.translation import check_for_language
        from base.middleware.threadlocals import _thread_locals
        #删除菜单缓存
        cache_key = "%s_%s" % (user.username, "menu_list")
        cache.delete(cache_key)

        _thread_locals.user = user
        lang_code = options['base.language']
        if not lang_code:
            #使用默认安装时选择的语言
            lang_code = settings.LANGUAGE_CODE
        if lang_code and check_for_language(lang_code):
            if hasattr(request, 'session'):
                request.session['django_language'] = lang_code
            else:
                ret.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code)
        try:
            from base.models_logentry import LogEntry, LOGIN
            from django.contrib.contenttypes.models import ContentType
            LogEntry.objects.log_action(user_id=user and user.pk or None,
                                        content_type_id=None,
                                        object_id=user.pk,
                                        object_repr="",
                                        action_flag=LOGIN,
                                        change_message="")
        except:
            import traceback
            traceback.print_exc()
        return HttpResponse('ok')  # 登录处理结束 将结果返回到前端
    else:
        logout(request)
        return HttpResponse(u"%s" % _(u"您还没有分配权限!"))
Exemple #22
0
def logon(request):
    """
        登录界面视图
        登录处理视图
        """
    logger.info("logon: %s" % request)
    logout(request)
    request.csrf_processing_done = True
    ret = login(request)  #  登录页面视图接口
    if not request.POST:
        return ret

    # 软件狗验证,
    # 国外逻辑定义:客户端操作系统的语言非中文(IE),浏览器语言非中文(其他浏览器ff,so)
    #        client_language=request.POST.get("client_language")
    #        check_ret=authorize_fun.login_check(request,client_language)
    #        print settings.ZKECO_DEVICE_LIMIT,settings.ATT_DEVICE_LIMIT,settings.MAX_ACPANEL_COUNT,'\n'
    #        if check_ret!=True:
    #            return HttpResponse(check_ret)

    # 指纹登入,修改request.user
    #        register_finger = request.REQUEST.get("fpflag", "")
    #        if register_finger == 'fplogin':
    #            template = identify_operatorfinger(request)       #用户比对指纹进入系统
    #            if template == "USER_ERROR":
    #                return HttpResponse("user_error")
    #            elif template == FP_NO_LICENCES:
    #                return HttpResponse('1')
    #            elif template == FP_IDENTIFY_FAILED:
    #                return HttpResponse("error")
    #            else:
    #                user = template.user
    #                template_logon(request,user)

    user = request.user
    logger.info("user: %s" % user)  # 登录日志记录
    if user.is_anonymous():
        return HttpResponse(u"%(msg)s" % {"msg": _(u"用户名或密码错误,原因可能是:忘记密码;未区分字母大小写;未开启小键盘!")})
    eb = -1
    try:
        eb = user.backend.find("EmployeeBackend")  # 重载实现员工登录验证
    except:
        pass
    if eb == -1:  # 用户登录
        user.employee = None
        if "employee" in request.session:
            del request.session["employee"]
    else:  # 员工登录
        request.session["employee"] = user.employee
    if user.is_staff:
        from base.options import options
        from django.utils.translation import check_for_language
        from base.middleware.threadlocals import _thread_locals

        # 删除菜单缓存
        cache_key = "%s_%s" % (user.username, "menu_list")
        cache.delete(cache_key)

        _thread_locals.user = user
        lang_code = options["base.language"]
        if not lang_code:
            # 使用默认安装时选择的语言
            lang_code = settings.LANGUAGE_CODE
        if lang_code and check_for_language(lang_code):
            if hasattr(request, "session"):
                request.session["django_language"] = lang_code
            else:
                ret.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code)
        try:
            from base.models_logentry import LogEntry, LOGIN
            from django.contrib.contenttypes.models import ContentType

            LogEntry.objects.log_action(
                user_id=user and user.pk or None,
                content_type_id=None,
                object_id=user.pk,
                object_repr="",
                action_flag=LOGIN,
                change_message="",
            )
        except:
            import traceback

            traceback.print_exc()
        return HttpResponse("ok")  # 登录处理结束 将结果返回到前端
    else:
        logout(request)
        return HttpResponse(u"%s" % _(u"您还没有分配权限!"))