1. Python / Говнокод #17106

    −119

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    primitive_types = [
        str,
        int,
        float,
        bool,
        tuple,
        list,
        set,
        dict,
        complex
    ]
    
    
    def is_primitive(value):
        return value.__class__ in primitive_types
    
    
    def to_json(obj, deep_scan=False):
        json = dict()
        for name in dir(obj):
            # Skip private, protected and not serializable attributes
            not_serializable = (
                name.startswith('_') or
                not isinstance(getattr(type(obj), name, None), json_property)
            )
            if not_serializable:
                continue
            # Get value of current property
            value = getattr(obj, name)
            # It's primitive value or None
            if value is None or is_primitive(value):
                json[name] = value
            # It's date
            elif isinstance(value, (datetime, date)):
                if isinstance(value, date):
                    value = datetime.combine(value, datetime.min)
                json[name] = value.timestamp()
            # It's collection
            elif deep_scan and isinstance(value, List):
                json[name] = list()
                for item in value:
                    json_item = to_json(item)
                    if len(json_item):
                        json[name].append(json_item)
            # It's another object
            elif deep_scan:
                json[name] = to_json(value)
        return json

    Не в первый раз непонятные мысли автора. Но что он хотел сделать в строках 34-36 ко мне не дойдет. Может это просто опечатка

    Запостил: kissarat, 13 Ноября 2014

    Комментарии (5) RSS

    • А чем автору json.dumps не угодил?

      P.S. А, тьфу, тут же прям произвольные объекты сериализуют.
      Ответить
    • На сколько я понимаю, идея в том, чтобы все даты потом переводились во время-штампы, (очевидно, потом их в каком-нибудь ж.скрипте использовали бы как-то типа: new Date(ts * 1000)). Наверное просто .time() отвалился после min.
      Ответить
      • А, ну еще и я ничего не знаю про timestamp() метод. Скорее всего это strftime('%s').
        Ответить
        • Для начала посмотри что делает https://docs.python.org/2/library/datetime.html#datetime.datetime.combine и что он там проверят... Вот я не знаю)
          Ответить
          • А что? Я не вижу в чем проблема (помимо забытого time() и несуществующего timestamp()).
            Если бы это выглядело так:
            python -c "from datetime import (datetime, date); \
            print datetime.combine(date.today(), datetime.min.timetz()).strftime('%s')"
            date +"%s"

            Мы получили бы что-то вроде:
            1415829600 и 1415915899, что аналогично Thu Nov 13 2014 00:00:00 GMT+0200 (IST) и Thu Nov 13 2014 23:58:19 GMT+0200 (IST) в моем случае. Т.е. Логика кода выше в том, чтобы просто добавить нулей к дате, чтобы получить скомбинированую дату и время, очевидно для единообразия, но судя по всему этот код ни разу не запускался, поэтому его скорее всего можно просто выбросить :)
            Ответить

    Добавить комментарий