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)
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
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'
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
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
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
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
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
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)
def get_object_as_simple_dict(o, cls, hier_delim='_'): return SimpleDictDocument(hier_delim=hier_delim) \ .object_to_simple_dict(cls, o)
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)