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

    −115

    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
    now = timezone.now().astimezone(cur_tz)
    today = now.replace(hour=0, minute=0, second=0, microsecond=0)
    td1day = datetime.timedelta(days=1)
    td7days = datetime.timedelta(days=7)
    td14days = datetime.timedelta(days=14)
    td30days = datetime.timedelta(days=30)
    
    categories = None
    if user is not None:
        try:
            categories = self.categories.restrict_by_acl(
                self.acl.by_user(user, can_enter=True), throw_if_all=True)
        except CampaignProductCategory.NoAclRestriction:
            categories = None
    
    report3_url = reverse('report3', args=[self.pk])
    df = lambda d: d.strftime('%d.%m.%Y')
    
    stats = {'to': now}
    stats['in_1d'] = get_count(today, categories)
    stats['in_1d_from'] = today
    stats['in_1d_url'] = (
        report3_url +
        '#from_date=%s&to_date=%s' % (df(stats['in_1d_from']),
                                      df(stats['to'])))
    stats['in_7d'] = get_count(today-td7days+td1day, categories)
    stats['in_7d_from'] = today - td7days + td1day
    stats['in_7d_url'] = (
        report3_url +
        '#from_date=%s&to_date=%s' % (df(stats['in_7d_from']),
                                      df(stats['to'])))
    stats['in_14d'] = get_count(today-td14days+td1day, categories)
    stats['in_14d_from'] = today - td14days + td1day
    stats['in_14d_url'] = (
        report3_url +
        '#from_date=%s&to_date=%s' % (df(stats['in_14d_from']),
                                      df(stats['to'])))
    stats['in_30d'] = get_count(today-td30days+td1day, categories)
    stats['in_30d_from'] = today - td30days + td1day
    stats['in_30d_url'] = (
        report3_url +
        '#from_date=%s&to_date=%s' % (df(stats['in_30d_from']),
                                      df(stats['to'])))

    Пхп и даты, только питон

    Запостил: kyzi007, 18 Ноября 2014

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

    • а теперь не 1, 7. 14, 30, а 1..365, пожалуйста )
      Ответить
    • >lambda d: d.strftime('%d.%m.%Y')
      Вот как в питоне не хватает синтаксиса для получения замыкания из метода.
      Ответить
      • > Вот как в питоне не хватает синтаксиса для получения замыкания из метода.

        Представим, что он есть. Что бы от этого изменилось? Тут же ещё параметры в метод передавать надо.
        def invoke(method, *args, **kwargs):
            def _invoke(obj):
                m = getattr(obj, method)
                m(*args, **kwargs)
            return _invoke
        
        class Greeter(object):
            def doIt(self, name):
                print "Hello, ", name, "!"
        
        clojure = invoke('doIt', 'World')
        
        g = Greeter()
        clojure(g)
        Ответить
        • Передавать метод строкой не особо круто, можно так:
          def invoke(method, *args, **kwargs):
              def _invoke(obj):
                  method(obj, *args, **kwargs)
              return _invoke
          
          class Greeter(object):
              def doIt(self, name):
                  print "Hello, ", name, "!"
          
          clojure = invoke(Greeter.doIt, 'World')
          
          g = Greeter()
          clojure(g)
          Но тогда прощайте, полиморфизм и утиная типизация.
          Ответить
        • Зачем ты это высрал, лол? Имелось в виду где-то такое:

          d = ::strftime('%d.%m.%Y')
          Ответить
          • Кмк, разница не настолько критична, чтобы вводить дополнительный синтаксис. Кстати, в скалке такое есть:
            _.method(args)
            Ответить
            • Хех, я так и в пистоне могу сделать:
              from datetime import datetime
              
              class Underscore(object):
                  def __getattr__(self, name):
                      def packer(*args, **kwargs):
                          def invoker(obj):
                              method = getattr(obj, name)
                              return method(*args, **kwargs)
                          return invoker
                      return packer
              
              _ = Underscore()
              
              fmt = _.strftime('%d.%m.%Y')
              
              print fmt(datetime.now())
              Ответить
              • На _ в фитоне много что висит, включая прыщелокализацию
                Ответить
            • В руби ввели, мне понравилось.
              Ответить

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