Esempio n. 1
0
 def new(self, model_class, shelve=False, named_shelve=None, persist_dependencies=True, **kwargs):
     """
     Create an instance filled with data without persist it.
     1) validate all kwargs match Model.fields.
     2) validate model is a model.Model class.
     3) Iterate model fields: for each field, fill it with data.
     @shelve: the current configuration will be stored in the DDF library. It can be True or a string (named shelve).
     @named_shelve: restore configuration saved in DDF library with a name.
     @persist_dependencies: tell if internal dependencies will be saved in the database or not.
     """
     if self.debug_mode:
         LOGGER.debug('>>> [%s] Generating instance.' % get_unique_model_name(model_class))
     configuration = self._configure_params(model_class, shelve, named_shelve, **kwargs)
     instance = model_class()
     if not is_model_class(instance):
         raise InvalidModelError(get_unique_model_name(model_class)), None, sys.exc_info()[2]
     for field in get_fields_from_model(model_class):
         if is_key_field(field) and 'id' not in configuration: continue
         if field.name in self.ignore_fields: continue
         self.set_data_for_a_field(model_class, instance, field, persist_dependencies=persist_dependencies, **configuration)
     number_of_pending_fields = len(self.pending_fields)
     # For Copier fixtures: dealing with pending fields that need to receive values of another fields.
     i = 0
     while self.pending_fields != []:
         field_name = self.pending_fields.pop(0)
         field = get_field_by_name_or_raise(model_class, field_name)
         self.set_data_for_a_field(model_class, instance, field, persist_dependencies=persist_dependencies, **configuration)
         i += 1
         if i > 2 * number_of_pending_fields: # dealing with infinite loop too.
             raise InvalidConfigurationError(get_unique_field_name(field), u'Cyclic dependency of Copiers.'), None, sys.exc_info()[2]
     if self.debug_mode:
         LOGGER.debug('<<< [%s] Instance created.' % get_unique_model_name(model_class))
     return instance
Esempio n. 2
0
    def new(self, model_class, shelve=False, named_shelve=None, persist_dependencies=True, **kwargs):
        """
        Create an instance filled with data without persist it.
        1) validate all kwargs match Model.fields.
        2) validate model is a model.Model class.
        3) Iterate model fields: for each field, fill it with data.

        :shelve: the current configuration will be stored in the DDF library. It can be True or a string (named shelve).
        :named_shelve: restore configuration saved in DDF library with a name.
        :persist_dependencies: tell if internal dependencies will be saved in the database or not.
        """
        if self.debug_mode:
            LOGGER.debug('>>> [%s] Generating instance.' % get_unique_model_name(model_class))
        configuration = self._configure_params(model_class, shelve, named_shelve, **kwargs)
        instance = model_class()
        if not is_model_class(instance):
            raise InvalidModelError(get_unique_model_name(model_class))
        for field in get_fields_from_model(model_class):
            if is_key_field(field) and 'id' not in configuration: continue
            if field.name not in self.kwargs and self._is_ignored_field(field.name): continue
            self.set_data_for_a_field(model_class, instance, field, persist_dependencies=persist_dependencies, **configuration)
        number_of_pending_fields = len(self.pending_fields)
        # For Copier fixtures: dealing with pending fields that need to receive values of another fields.
        i = 0
        while self.pending_fields != []:
            field_name = self.pending_fields.pop(0)
            field = get_field_by_name_or_raise(model_class, field_name)
            self.set_data_for_a_field(model_class, instance, field, persist_dependencies=persist_dependencies, **configuration)
            i += 1
            if i > 2 * number_of_pending_fields: # dealing with infinite loop too.
                raise InvalidConfigurationError(get_unique_field_name(field), 'Cyclic dependency of Copiers.')
        if self.debug_mode:
            LOGGER.debug('<<< [%s] Instance created.' % get_unique_model_name(model_class))
        return instance
Esempio n. 3
0
def set_post_save_receiver(model_class, callback_function):
    """
    @model_class: a model_class can have only one receiver. Do not complicate yourself.
    @callback_function must be a function that receive the instance as unique parameter.
    """
    if not is_model_class(model_class) or not inspect.isfunction(callback_function) or len(inspect.getargspec(callback_function).args) != 1:
        raise InvalidReceiverError(model_class), None, sys.exc_info()[2]
    _POST_SAVE[model_class] = callback_function
Esempio n. 4
0
def set_post_save_receiver(model_class, callback_function):
    """
    :model_class: a model_class can have only one receiver. Do not complicate yourself.
    :callback_function must be a function that receive the instance as unique parameter.
    """
    if not is_model_class(model_class) or not inspect.isfunction(callback_function) or len(inspect.getargspec(callback_function).args) != 1:
        raise(InvalidReceiverError(model_class))
    _POST_SAVE[model_class] = callback_function
Esempio n. 5
0
def _validate_model(model_class):
    if not is_model_class(model_class):
        raise InvalidReceiverError(model_class, 'Invalid model')
Esempio n. 6
0
    def new(self,
            model_class,
            ddf_lesson=None,
            persist_dependencies=True,
            **kwargs):
        '''
        Create an instance filled with data without persist it.
        1) validate all kwargs match Model.fields.
        2) validate model is a model.Model class.
        3) Iterate model fields: for each field, fill it with data.

        :ddf_lesson: the lesson that will be used to create the model instance, if exists.
        :persist_dependencies: tell if internal dependencies will be saved in the database or not.
        '''
        if self.debug_mode:
            LOGGER.debug('>>> [%s] Generating instance.' %
                         get_unique_model_name(model_class))
        configuration = self._configure_params(model_class, ddf_lesson,
                                               **kwargs)
        instance = model_class()
        if not is_model_class(instance):
            raise InvalidModelError(get_unique_model_name(model_class))

        try:
            # https://github.com/paulocheque/django-dynamic-fixture/pull/112
            from polymorphic import PolymorphicModel
            is_polymorphic = isinstance(instance, PolymorphicModel)
        except ImportError:
            # Django-polymorphic is not installed so the model can't be polymorphic.
            is_polymorphic = False
        for field in get_fields_from_model(model_class):
            if is_key_field(field) and field.name not in configuration:
                continue
            if field.name not in self.kwargs and self._is_ignored_field(
                    field.name):
                continue
            if is_polymorphic and (field.name == 'polymorphic_ctype'
                                   or field.primary_key):
                continue
            self.set_data_for_a_field(
                model_class,
                instance,
                field,
                persist_dependencies=persist_dependencies,
                **configuration)
        number_of_pending_fields = len(self.pending_fields)
        # For Copier fixtures: dealing with pending fields that need to receive values of another fields.
        i = 0
        while self.pending_fields != []:
            field_name = self.pending_fields.pop(0)
            field = get_field_by_name_or_raise(model_class, field_name)
            self.set_data_for_a_field(
                model_class,
                instance,
                field,
                persist_dependencies=persist_dependencies,
                **configuration)
            i += 1
            if i > 2 * number_of_pending_fields:  # dealing with infinite loop too.
                raise InvalidConfigurationError(
                    get_unique_field_name(field),
                    'Cyclic dependency of Copiers.')
        if self.debug_mode:
            LOGGER.debug('<<< [%s] Instance created.' %
                         get_unique_model_name(model_class))
        return instance