ФорумПрограммированиеPython → Манкипатчинг на питоне

Манкипатчинг на питоне

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 27 марта 2012 г. 18:58, спустя 21 день 4 часа 25 минут

    Привет, как вы все знаете у python'а все очень хорошо с интроспекцией. Мне частенько требуется в Django использовать манкипатчинг, для этого у меня есть свое решение (реализовывал больше всего для повышения скилов, но не суть), которое я чуть-позже опубликую на гитхабе. Юзается примерно так:

    # project/__init__.py
    from common.replacer import replace_call
    from django.db.backends.mysql.client import DatabaseClient

    @replace_call(DatabaseClient.runshell)
    def runshell(func, self):
       # Подменяет стандартный джанговски runshell, например можно добавить для mysqlclient опцию –no-auto-rehash, при частых соединениях и больших БД помогает сократить время до минимума
       from common.runshell import runshell
       result = runshell(self)
       return result



    from django.conf import settings
    from common.replacer import replace_call

    if settings.SQL_STACKTRACE:
       # Добавляет к SQL комментарий со стектрейсом из питона, для последующего анализа
       from django.db.backends import BaseDatabaseWrapper
       from common.stacktracecursor import StacktraceCursorWrapper
       @replace_call(BaseDatabaseWrapper.cursor)
       def cursor(func, self):
           result = func(self)
           return StacktraceCursorWrapper(result, self)


    А сейчас я хотел бы поспрашивать о библиотеках готовых. Кто и что подскажет?

    Вот что я нашел:
    http://pypi.python.org/pypi/monkey
    http://pypi.python.org/pypi/monkeypatch https://github.com/iki/monkeypatch
    https://github.com/adammck/django-monkey-patching
    https://github.com/aino/django-primate

    UPD:
    http://pypi.python.org/pypi/pyjack/

    Также можно реализацию манкипатчинга выковырить из django-debug-toolbar
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 4 марта 2012 г. 22:43, спустя 3 часа 44 минуты 45 секунд

    Прелестно. Люблю питон :-)
    Спустя 14 сек.
    хотя манкипатчинг и считается злом :-)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 4 марта 2012 г. 22:47, спустя 4 минуты 8 секунд

    любая магия считается злом, но иногда бывает зло ради добра :)
    Спустя 34 сек.
    вообщем юзается когда это необходимо и других вариантов нет :)
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 4 марта 2012 г. 22:50, спустя 3 минуты 5 секунд

    adw0rd, да я сам юзаю бывает, но стараюсь не злоупотреблять)

    https://gist.github.com/1430298

    о! меня даже форкнули :-))
    Сапожник без сапог
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 4 марта 2012 г. 23:11, спустя 20 минут 39 секунд

    да весь ваш питон сплошная магия)
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 4 марта 2012 г. 23:46, спустя 34 минуты 49 секунд

    https://gist.github.com/1430298

    о! меня даже форкнули :-)

    а чео гист, а не нормальное репо?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 4 марта 2012 г. 23:59, спустя 13 минут 18 секунд


    https://gist.github.com/1430298

    о! меня даже форкнули :-)

    а чео гист, а не нормальное репо?
    функицонал не вырос "до компонента" имхо :-)

    ну на самом деле это был мой первый опыт на питоне - боялся засрут, а даже похвалили)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 5 марта 2012 г. 6:51, спустя 6 часов 51 минуту 34 секунды

    я тупой. ничо нипонел
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 5 марта 2012 г. 9:30, спустя 2 часа 39 минут 48 секунд

    можно я попутно повышу свой скилл? гугль подсказывает: манкипатчинг это изменение поведения класса "на лету".
    я в питоне не очень. если другими словами, это декорирование или это что-то более жестокое и специфичное для питона?
    ιιlllιlllι унц-унц
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 5 марта 2012 г. 11:31, спустя 2 часа 29 секунд

    Это чтобы код самой джанги не править, а вынести заплатки в отдельное место.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 5 марта 2012 г. 12:41, спустя 1 час 10 минут 15 секунд


    можно я попутно повышу свой скилл? гугль подсказывает: манкипатчинг это изменение поведения класса "на лету".
    я в питоне не очень. если другими словами, это декорирование или это что-то более жестокое и специфичное для питона?
    питон в этом плане похож на яваскрипт, можно взять функцию у класса, и присвоить ей другую в любом месте :-)

    например в свою обернуть.
    Сапожник без сапог
  • Flare

    Сообщения: 284 Репутация: N Группа: Кто попало

    Spritz 5 марта 2012 г. 13:33, спустя 51 минуту 42 секунды

    я так понял это типа traits в php?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 5 марта 2012 г. 13:37, спустя 3 минуты 58 секунд


    я так понял это типа traits в php?
    нет, трайтс в пхп очередное гавно как и все пхп.

    это более на модель яваскрипта похоже, когда любая переменная, ее любое поле (будь то функция или атрибут) являются самозакончеными обектами опредленного типа, и из этих "кубиков" можно строить классы, библиотеки, их можно выдергивать когда угодно и менять в уже работающем доме прямо налету.
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 5 марта 2012 г. 14:23, спустя 46 минут 22 секунды

    лютый язык
    ιιlllιlllι унц-унц
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 5 марта 2012 г. 14:33, спустя 10 минут

    А не возникало идей, как пропатчить джанговский шаблон на лету, не переопределяя его явно в админке?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!