예제 #1
0
def json_value_converter(value):
    simple_dict = SimpleDictDocument()
    if isinstance(value, (datetime.datetime, datetime.date)):
        return value.isoformat()
    elif isinstance(value, uuid.UUID):
        return (str(value))
    elif hasattr(value, 'Value'):
        return simple_dict.object_to_simple_dict(type(value), value)
예제 #2
0
파일: http.py 프로젝트: esauro/spyne
    def __init__(self, app=None, validator=None, mime_type=None,
                    tmp_dir=None, tmp_delete_on_close=True, ignore_uncap=False,
                                                            parse_cookie=False):
        SimpleDictDocument.__init__(self, app, validator, mime_type,
                                                      ignore_uncap=ignore_uncap)

        self.tmp_dir = tmp_dir
        self.tmp_delete_on_close = tmp_delete_on_close
        self.parse_cookie = parse_cookie
예제 #3
0
    def test_sub_name_deser(self):
        class CM(ComplexModel):
            integer = Integer(sub_name='i')
            string = String(sub_name='s')

        d = {'i': [7], 's': ['b']}

        val = SimpleDictDocument().simple_dict_to_object(None, d, CM)

        pprint(d)

        assert val.integer == 7
        assert val.string == 'b'
예제 #4
0
    def test_array_none(self):
        class CM(ComplexModel):
            i = Integer
            s = String

        class CCM(ComplexModel):
            c = Array(CM)

        val = CCM()

        d = SimpleDictDocument().object_to_simple_dict(CCM, val)
        print(d)

        assert len(d) == 0
예제 #5
0
    def test_sub_name_ser(self):
        class CM(ComplexModel):
            integer = Integer(sub_name='i')
            string = String(sub_name='s')

        val = CM(integer=7, string='b')

        d = SimpleDictDocument().object_to_simple_dict(CM, val)

        pprint(d)

        assert d['i'] == 7
        assert d['s'] == 'b'

        assert len(d) == 2
예제 #6
0
    def test_array_nested(self):
        class CM(ComplexModel):
            i = Array(Integer)

        class CCM(ComplexModel):
            c = Array(CM)

        val = CCM(c=[CM(i=range(i)) for i in range(2, 4)])

        d = SimpleDictDocument().object_to_simple_dict(CCM, val)
        pprint(d)

        assert d['c[0].i'] == [0, 1]
        assert d['c[1].i'] == [0, 1, 2]

        assert len(d) == 2
예제 #7
0
    def test_array_not_none(self):
        class CM(ComplexModel):
            i = Integer
            s = String

        class CCM(ComplexModel):
            c = Array(CM)

        val = CCM(c=[CM(i=i, s='b' * (i + 1)) for i in range(2)])

        d = SimpleDictDocument().object_to_simple_dict(CCM, val)
        print(d)

        assert d['c[0].i'] == 0
        assert d['c[0].s'] == 'b'
        assert d['c[1].i'] == 1
        assert d['c[1].s'] == 'bb'

        assert len(d) == 4
예제 #8
0
    def test_basic(self):
        class CM(ComplexModel):
            i = Integer
            s = String

        class CCM(ComplexModel):
            c = CM
            i = Integer
            s = String

        val = CCM(i=5, s='a', c=CM(i=7, s='b'))

        d = SimpleDictDocument().object_to_simple_dict(CCM, val)

        assert d['i'] == 5
        assert d['s'] == 'a'
        assert d['c.i'] == 7
        assert d['c.s'] == 'b'

        assert len(d) == 4
예제 #9
0
def get_object_as_simple_dict(o, cls=None, hier_delim='_'):
    if cls is None:
        cls = o.__class__

    return SimpleDictDocument(hier_delim=hier_delim) \
                                                  .object_to_simple_dict(cls, o)
예제 #10
0
def get_object_as_simple_dict(o, cls, hier_delim='_'):
    return SimpleDictDocument(hier_delim=hier_delim) \
                                                  .object_to_simple_dict(cls, o)
예제 #11
0
def soap_logger(func, *args, **kwargs):
    time_start = time.time()
    error = None
    try:
        return func(*args, **kwargs)
    except Exception as e:
        error = e
        raise e
    finally:
        # Продолжительность
        duration = time.time() - time_start

        simple_dict = SimpleDictDocument()

        header = simple_dict.object_to_simple_dict(type(args[0].in_header),
                                                   args[0].in_header)
        body = json.dumps(args[0].in_object.as_dict(),
                          default=json_value_converter)
        body = json.loads(body)

        tags = None
        headquater = None
        login = None

        if 'login' in header:
            login = header['login']
        elif '' in header and 'login' in header['']:
            login = header['']['login']

        if login:
            headquater = get_available_clients_by_user(
                username=login)[0]  #first()

        if 'employeeevent' in body and 'guid' in body['employeeevent']:
            try:
                event = EmployeeEvent.objects.get(
                    guid=body['employeeevent']['guid'])
                headquater = {
                    'id': event.headquater.id,
                    'name': event.headquater.name
                }
                tags = [
                    'organization#' + str(event.organization_id),
                    'employee#' + str(event.agency_employee_id)
                ]
            except EmployeeEvent.DoesNotExist:
                pass

        level = 'INFO'
        msg = 'Время выполнения: {0}\n'
        if error:
            level = 'ERROR'
            msg += 'Ошибка: {1}'
        if isinstance(args[0].in_protocol, JsonDocument):
            source = 'REST API'
        elif isinstance(args[0].in_protocol, Soap11):
            source = 'SOAP API'
        else:
            source = 'undefined API'

        message = msg.format(round(duration, 1), error)

        if tags:
            message += 'Теги: ' + ','.join(tags)

        extra = {
            'source': source,
            'method': func.__name__,
            'duration': duration,
            'headquater': headquater.get('name', '--'),
            'params': {
                'header': header,
                'body': body,
            }
        }
        if level == 'INFO':
            logger.info(message, extra=extra)
        elif level == 'ERROR':
            logger.error(message, extra=extra)