Esempio n. 1
0
def test_create_two_different_registers() -> None:
    Registry.clean()
    reg1 = Registry('reg1')
    reg1.set(RegisterTestClass)
    reg2 = Registry('reg2')
    reg2.set(RegisterTestClass)
    assert list(Registry.get_registers()) == ['reg1', 'reg2']
Esempio n. 2
0
 def notify(cls) -> None:
     """
     Notification comes when registry updated (new custom object added)
     """
     object_type = cls._meta.get_field('object_type')
     object_type.choices = [(key, key)
                            for key in Registry(cls.REGISTRY_NAME).keys]
Esempio n. 3
0
    def ready(self) -> None:
        if len(sys.argv) < 2 or sys.argv[1] in ('migrate', 'makemigrations'):
            return

        consumer_model = self.get_model('ConsumerModel')
        Registry(CONSUMER_REGISTRY_NAME).subscribe(consumer_model)
        consumer_model.CUSTOM_OBJECT_MODEL.upload_all_custom_objects_from_db_to_registry(
        )
Esempio n. 4
0
 def get_object_by_registry_name(
     self,
     registry_name: str,
 ) -> Union[MessageConsumer, MessageProducer]:
     registry = Registry(registry_name)
     class_ = registry.get(self.object_type)
     object_ = class_(**self.parameters)
     return object_
Esempio n. 5
0
 def upload_all_custom_objects_from_db_to_registry(cls) -> None:
     registry = Registry(cls.REGISTRY_NAME)
     for object_ in cls.objects.all():
         registry.set(
             object_,
             raise_if_exists=False,
             notify_listeners=False,
         )
     registry.notify_all()
Esempio n. 6
0
def test_class_decorator() -> None:
    @Registry.register('Test')
    class RegisterTestClassDecorated:
        pass

    registry = Registry('Test')

    assert registry.get(
        RegisterTestClassDecorated.__name__) is RegisterTestClassDecorated
Esempio n. 7
0
def test_save_object_add_it_to_registry(mocker: MockFixture, ) -> None:
    registry = Registry(ABCCustomObjectModel.REGISTRY_NAME)
    f_listeners = [mocker.MagicMock() for _ in range(2)]
    [registry.subscribe(listener) for listener in f_listeners]
    f_save = mocker.patch.object(Model, 'save')

    custom_object = ABCCustomObjectModel()
    custom_object.save()

    f_save.assert_called_once()
    assert str(custom_object) in registry.keys
    [listener.notify.assert_called_once() for listener in f_listeners]
Esempio n. 8
0
 def _check_params_before_save(self) -> None:
     class_ = Registry(self.REGISTRY_NAME).get(self.object_type)
     if issubclass(class_, Validatable):
         try:
             class_.validate_params(self.parameters)
         except Exception as e:
             # TODO: Specify exceptions
             # Now it masks exceptions of attributes of classes
             required_fields = '\t\n'.join([
                 f'{name}:{type_}'
                 for name, type_ in class_.__annotations__.items()
             ], )
             raise ValidationError(
                 f'Error: {e}\n'
                 f'Required fields for {self.object_type} is: \n'
                 f'\t{required_fields}', )
Esempio n. 9
0
def test_upload_all_custom_objects_from_db_to_registry(
    mocker: MockFixture, ) -> None:
    f_objects_manager = mocker.MagicMock()
    ABCCustomObjectModel.objects = f_objects_manager
    f_custom_objects = [
        ABCCustomObjectModel(name=f'custom_object_{i}') for i in range(2)
    ]
    f_objects_manager.all.return_value = f_custom_objects
    registry = Registry(ABCCustomObjectModel.REGISTRY_NAME)
    f_listeners = [mocker.MagicMock() for _ in range(2)]
    [registry.subscribe(listener) for listener in f_listeners]

    ABCCustomObjectModel.upload_all_custom_objects_from_db_to_registry()

    assert all(
        str(custom_object) in registry.keys
        for custom_object in f_custom_objects)
    [listener.notify.assert_called_once() for listener in f_listeners]
Esempio n. 10
0
 def _set_object(self, object_: 'ABCCustomObjectModel') -> None:
     registry = Registry(self.REGISTRY_NAME)
     registry.set(object_)
Esempio n. 11
0
def test_creating_same_registers_returns_same_register() -> None:
    reg = Registry('Registry')
    assert len(reg.keys) == 0
    reg.set(RegisterTestClass)
    reg1 = Registry('Registry')
    assert RegisterTestClass.__name__ in reg1.keys
Esempio n. 12
0
def f_registry() -> Registry:
    Registry.clean()
    return Registry('Test Registry')