Ejemplo n.º 1
0
    def presave(self, username, password, email, confirm):
        self.clean_memcache()
        # Check username
        # Rewrite username
        username = username.lower()

        # if exist self.user no modify username
        if not self.user and not username:
            raise ValidationError(
                "This person doesn't have a user assigned, can not change password or email without an user"
            )

        # Check passwords
        if password and confirm and password != confirm:
            raise ValidationError("Passwords do not match")
        if password and (len(password) < settings.PASSWORD_MIN_SIZE):
            raise ValidationError(
                "Password can not be smaller than {0} characters".format(
                    settings.PASSWORD_MIN_SIZE))

        # Check email
        if email:
            validate_email(email)
        else:
            raise ValidationError(
                "Missing email when saving a new person without a preassigned user"
            )

        # Create user and save it to the database
        if self.user:
            # Check if the user requested to change the username
            if username != self.user.username:
                # Check if the username already exists in the database and it is not me
                already = User.objects.filter(username=username).exclude(
                    pk=self.user.pk).first()
                if already:
                    # Username already in use
                    raise ValidationError(
                        "Username already exists in the database")
                else:
                    # Set new username
                    self.user.username = username

            # Update password if any
            if password:
                self.user.set_password(password)
            # Update email address
            self.user.email = email
        else:
            # Create new user
            self.user = User.objects.create_user(username=username,
                                                 email=email,
                                                 password=password)
            # user creator of the user
            self.creator = get_current_user()

        # Save changes
        self.user.save()
Ejemplo n.º 2
0
    def save(self, *args, **kwards):
        # If we are creating
        if not self.pk:
            # Set a new CID dynamically
            self.cid = str(random.randint(0, 999999999))
            # Try to get the user
            user = get_current_user()
            # Set the owner to the current user
            if user:
                self.owner = user

        # Get rate on realtime (to avoid user decision delay)
        self.rate = self.sell_currency.rate(self.buy_currency)
        # Recalculate amount
        self.buy_amount = self.rate * self.sell_amount

        # Keep going like usually
        return super(Exchange, self).save(*args, **kwards)
Ejemplo n.º 3
0
    def codenerixmodel_delete_post(sender, instance, **kwargs):
        if not hasattr(instance, "name_models_list") and issubclass(sender, GenLog):
            user = get_current_user()
            if user:
                user_id = user.pk
            else:
                user_id = None
            action = DELETION
            
            attrs = {}
            attrs_txt = {}

            # ._meta.get_fields() return all fields include related name
            # ._meta.fields return all fields of models
            
            # list_fields = [x.name for x in instance._meta.get_fields()]
            for ffield in instance._meta.get_fields():
                key = ffield.name
                # exclude manytomany
                if instance._meta.model._meta.local_many_to_many and key in [x.name for x in instance._meta.model._meta.local_many_to_many]:
                    field = None
                # elif self._meta.get_all_related_many_to_many_objects() and key in [x.name for x in self._meta.get_all_related_many_to_many_objects()]:
                elif instance._meta.get_fields(include_hidden=True) and key in [x.name for x in instance._meta.get_fields(include_hidden=True) if x.many_to_many and x.auto_created]:
                    field = None
                else:
                    field = getattr(instance, key, None)

                value = getattr(instance, ffield.name)
                if isinstance(value, CodenerixModel):
                    attrs[ffield.name] = value.pk
                else:
                    try:
                        json.dump(value, default=json_util.default)
                        attrs[ffield.name] = value
                    except TypeError:
                        # If related, we don't do anything
                        if getattr(value, 'all', None) is None:
                            # value = str(value)
                            value = smart_text(value)
                            attrs[ffield.name] = value

                if hasattr(ffield, "verbose_name"):
                    try:
                        string_checks = [unicode, str]
                    except NameError:
                        string_checks = [str]

                    if type(ffield.verbose_name) in string_checks:
                        ffield_verbose_name = ffield.verbose_name
                    else:
                        ffield_verbose_name = str(ffield.verbose_name)

                    attrs_txt[ffield_verbose_name] = force_text(field, errors='replace')
            
            log = Log()
            log.user_id = user_id
            log.content_type_id = ContentType.objects.get_for_model(instance).pk
            log.object_id = instance.pk
            log.object_repr = force_text(instance)
            log.change_json = json.dumps(attrs, default=json_util.default)
            log.change_txt = json.dumps(attrs_txt, default=json_util.default)
            log.action_flag = action
            log.save()
Ejemplo n.º 4
0
        def save(self, **kwargs):
            user = get_current_user()
            if user:
                user_id = user.pk
            else:
                user_id = None
                
            model = apps.get_model(self._meta.app_label, self.__class__.__name__)
            isnew = True
            if self.pk is not None:
                list_obj = model.objects.filter(pk=self.pk)
                isnew = list_obj.count() == 0
                # raise IOError,self.__dict__
            # only attributes changes
            attrs = {}
            attrs_txt = {}
            # attributes from database
            attrs_bd = {}
            if isnew:
                action = ADDITION
                pk = None
            else:
                action = CHANGE
                pk = self.pk
                # Instance object
                # obj = model.objects.get(pk=self.pk)
                obj = list_obj.get()
                for key in obj._meta.get_fields():
                    key = key.name
                    # exclude manytomany
                    if obj._meta.model._meta.local_many_to_many and key in [x.name for x in obj._meta.model._meta.local_many_to_many]:
                        value = None
                    elif obj._meta.get_fields(include_hidden=True) and key in [x.name for x in obj._meta.get_fields(include_hidden=True) if x.many_to_many and x.auto_created]:
                        value = None
                    else:
                        value = getattr(obj, key, None)
                    attrs_bd[key] = value
            
            # comparison attributes
            # for key in self._meta.get_fields():
            aux = None
            list_fields = [x.name for x in self._meta.get_fields()]
            for ffield in self._meta.get_fields():
                key = ffield.name
                # exclude manytomany
                if self._meta.model._meta.local_many_to_many and key in [x.name for x in self._meta.model._meta.local_many_to_many]:
                    field = None
                # elif self._meta.get_all_related_many_to_many_objects() and key in [x.name for x in self._meta.get_all_related_many_to_many_objects()]:
                elif self._meta.get_fields(include_hidden=True) and key in [x.name for x in self._meta.get_fields(include_hidden=True) if x.many_to_many and x.auto_created]:
                    field = None
                else:
                    field = getattr(self, key, None)
                
                if key in list_fields and field:
                    # if (not attrs_bd.has_key(key)) or (field != attrs_bd[key]):
                    if (key not in attrs_bd) or (field != attrs_bd[key]):
                        
                        if field is not None:
                            aux = ffield
                            field_txt = field
                            if isinstance(field, CodenerixModel):
                                field = field.pk
                                      
                            try:
                                json.dumps(field, default=json_util.default)
                                if key not in attrs_bd or not self.CodenerixMeta.log_full:
                                    attrs[key] = field
                                else:
                                    if isinstance(attrs_bd[key], CodenerixModel):
                                        attrs[key] = (attrs_bd[key].pk, field, )
                                    else:
                                        attrs[key] = (attrs_bd[key], field, )
                            except:
                                # If related, we don't do anything
                                if getattr(field, 'all', None) is None:
                                    field = str(field)
                                    if key not in attrs_bd or not self.CodenerixMeta.log_full:
                                        attrs[key] = field
                                    else:
                                        attrs[key] = (attrs_bd[key], field, )
                            
                            if hasattr(ffield, "verbose_name"):
                                try:
                                    string_checks = [unicode, str]
                                except NameError:
                                    string_checks = [str]

                                if type(ffield.verbose_name) in string_checks:
                                    ffield_verbose_name = ffield.verbose_name
                                else:
                                    ffield_verbose_name = str(ffield.verbose_name)

                                if key not in attrs_bd or not self.CodenerixMeta.log_full:
                                    attrs_txt[ffield_verbose_name] = force_text(field_txt, errors='replace')
                                else:
                                    attrs_txt[key] = (
                                        ffield_verbose_name,
                                        u"{}{}{}".format(
                                            force_text(attrs_bd[key], errors='replace'),
                                            SEPARATOR,
                                            force_text(field_txt, errors='replace')
                                        )
                                    )
                        
            log = Log()
            log.user_id = user_id
            log.content_type_id = ContentType.objects.get_for_model(self).pk
            log.object_id = pk
            log.object_repr = force_text(self, errors="replace")
            try:
                log.change_json = json.dumps(attrs, default=json_util.default)
            except UnicodeDecodeError:
                log.change_json = json.dumps({'error': '*JSON_ENCODE_ERROR*'}, default=json_util.default)
            try:
                log.change_txt = json.dumps(attrs_txt, default=json_util.default)
            except UnicodeDecodeError:
                log.change_txt = json.dumps({'error': '*JSON_ENCODE_ERROR*'}, default=json_util.default)
            log.action_flag = action
            
            aux = super(GenLog, self).save(**kwargs)
            if pk is None:
                # if new element, get pk
                log.object_id = self.pk
            log.save()
            return aux
    def form_valid(self, form):
        user = get_current_user()
        form.instance.user = user
        self.request.user = user

        return super(CashMovementCreate, self).form_valid(form)