Обезьяна исправляет приложение Django в другом приложении

У нас есть сторонняя библиотека, которую мы используем в нашем приложении Django 1.9. Мы хотели бы дополнить это приложение некоторыми функциональными возможностями, которых нет в исходном приложении (нацелено на MongoDB). В настоящее время мы делаем это через наш собственный форк исходной библиотеки, но хотели бы сделать изменения немного более ортогональными, чтобы они могли в конечном итоге быть перенесены вверх по течению.

Мы пробовали вносить исправления во время приложения config ready(), но импорт моделей обрабатывается до этого вызова в django.apps.registry.populate(), а выполнение его в \__init__ страдает от apps_ready == False. Какова лучшая часть жизненного цикла, чтобы выполнить это?

class MongoConfig(AppConfig):
    def __init__(self, app_name, app_module):
        super(MongoConfig, self).__init__(app_name, app_module)

        for p in patches:
            patch(*p)

def patch(old, new):
    old_module, old_item = split_mod(old)
    new_module, new_item = split_mod(new)

    print('patching {0} with {1}'.format(old, new))

    old_module = import_module(old_module)
    new_module = import_module(new_module)
    setattr(old_module, old_item, getattr(new_module, new_item))
10
задан Peter David Carter 12 May 2016 в 00:17
поделиться