Example #1
0
def register(model, fields, restrict_to=None, manager=None):
    """Tell vinaigrette which fields on a Django model should be translated.
    
    Arguments:
    model -- The relevant model class
    fields -- A list or tuple of field names. e.g. ['name', 'nickname']
    restrict_to -- Optional. A django.db.models.Q object representing the subset
        of objects to collect translation strings from.
    manager -- Optional. A reference to a manager -- e.g. Person.objects -- to use
        when collecting translation strings.
        
    Note that both restrict_to and manager are only used when collecting translation
    strings. Gettext lookups will always be performed on relevant fields for all
    objects on registered models.
    """
    
    global _registry
    _registry[model] = {
        'fields': fields,
        'restrict_to': restrict_to,
        'manager': manager
    }
    for field in fields:
        setattr(model, field, VinaigretteDescriptor(field))
    model.untranslated = lambda self, fieldname: self.__dict__[fieldname]
    
    pre_save.connect(_vinaigrette_pre_save, sender=model)
    post_save.connect(_vinaigrette_post_save, sender=model)
Example #2
0
    def ready(self):
        super(MirroringApp, self).ready()

        Document = apps.get_model(app_label='documents', model_name='Document')
        IndexInstanceNode = apps.get_model(
            app_label='document_indexing', model_name='IndexInstanceNode'
        )

        pre_delete.connect(
            handler_document_cache_delete,
            dispatch_uid='mirroring_handler_document_cache_delete',
            sender=Document
        )
        pre_delete.connect(
            handler_node_cache_delete,
            dispatch_uid='mirroring_handler_node_cache_delete',
            sender=IndexInstanceNode
        )
        pre_save.connect(
            handler_document_cache_delete,
            dispatch_uid='mirroring_handler_document_cache_delete',
            sender=Document
        )
        pre_save.connect(
            handler_node_cache_delete,
            dispatch_uid='mirroring_handler_node_cache_delete',
            sender=IndexInstanceNode
        )
Example #3
0
def _run_listen():
    post_save.connect(run_watchers.post_run_saved, sender=TestRun)
    post_save.connect(run_watchers.post_case_run_saved, sender=TestCaseRun,
                      dispatch_uid='tcms.testruns.models.TestCaseRun')
    post_delete.connect(run_watchers.post_case_run_deleted, sender=TestCaseRun,
                        dispatch_uid='tcms.testruns.models.TestCaseRun')
    pre_save.connect(run_watchers.pre_save_clean, sender=TestRun)
def register(cls, admin_cls):
    cls.add_to_class("SLEEPING", 10)
    cls.add_to_class("QUEUED", 20)
    cls.add_to_class("SENT", 30)
    cls.add_to_class("UNKNOWN", 0)

    PINGING_CHOICES = (
        (cls.SLEEPING, _("sleeping")),
        (cls.QUEUED, _("queued")),
        (cls.SENT, _("sent")),
        (cls.UNKNOWN, _("unknown")),
    )

    cls.add_to_class(
        "pinging", models.SmallIntegerField(_("ping"), editable=False, default=cls.SLEEPING, choices=PINGING_CHOICES)
    )

    if admin_cls:
        if not hasattr(admin_cls, "actions"):
            setattr(admin_cls, "actions", [])
        admin_cls.actions.append(
            _entry_admin_update_fn(_("queued"), {"pinging": cls.QUEUED}, short_description=_("Ping Again"))
        )

    pre_save.connect(pre_save_handler, sender=cls)
def register_signal_handlers():
    Image = get_image_model()
    Rendition = Image.get_rendition_model()

    pre_save.connect(pre_save_image_feature_detection, sender=Image)
    post_delete.connect(post_delete_file_cleanup, sender=Image)
    post_delete.connect(post_delete_file_cleanup, sender=Rendition)
Example #6
0
def tag_model(cls, admin_cls=None, field_name='tags', sort_tags=False, select_field=False):
    """
    tag_model accepts a number of named parameters:

    admin_cls   If set to a subclass of ModelAdmin, will insert the tag
                field into the list_display and list_filter fields.
    field_name  Defaults to "tags", can be used to name your tag field
                differently.
    sort_tags   Boolean, defaults to False. If set to True, a pre_save
                handler will be inserted to sort the tag field alphabetically.
                This is useful in case you want a canonical representation
                for a tag collection, as when you're presenting a list of
                tag combinations (e.g. in an admin filter list).
    select_field If True, show a multi select instead of the standard
                CharField for tag entry.
    """
    from ..tagging.fields import TagField
    from ..tagging import register as tagging_register

    cls.add_to_class(field_name, (select_field and TagSelectField or TagField)(field_name.capitalize(), blank=True))
    # use another name for the tag descriptor
    # See http://code.google.com/p/django-tagging/issues/detail?id=95 for the reason why
    tagging_register(cls, tag_descriptor_attr='tagging_' + field_name)

    if admin_cls:
        admin_cls.list_display.append(field_name)
        admin_cls.list_filter.append(field_name)

    if sort_tags:
        pre_save.connect(pre_save_handler, sender=cls)
Example #7
0
 def test_model(self):
     pre_tsh = TestSignalHandler()
     pre_save.connect(pre_tsh)
     post_tsh = TestSignalHandler()
     post_save.connect(post_tsh)
     # Content unicode should be set automatically.
     trail = Trail.objects.create(
         **{
             "user": self.superuser,
             "user_unicode": unicode(self.superuser),
             "content_type": ContentType.objects.get_for_model(self.superuser),
             "object_id": self.superuser.pk,
             "action": "some other action",
         }
     )
     self.assertTrue(trail.content_unicode)
     self.assertTrue(pre_tsh)
     self.assertTrue(post_tsh)
     # Model should never save again after initially created.
     pre_tsh.reset()
     post_tsh.reset()
     self.assertFalse(pre_tsh)
     self.assertFalse(post_tsh)
     trail.save()
     self.assertFalse(pre_tsh)
     self.assertFalse(post_tsh)
Example #8
0
 def _attach_signals(self):
     '''
     Attach all signals for eav
     '''
     post_init.connect(Registry.attach_eav_attr, sender=self.model_cls)
     pre_save.connect(Entity.pre_save_handler, sender=self.model_cls)
     post_save.connect(Entity.post_save_handler, sender=self.model_cls)
Example #9
0
def add_signal_listeners():
    for table, properties in holonet_settings.MAPPING_MODELS.items():
        model = get_model(*table.split('.'))
        post_save.connect(mapping_change, model)
        post_delete.connect(mapping_delete, model)
        pre_save.connect(pre_save_mapping_check, model)

        # Add signal på many to many relations
        relation_list = properties.get('recipient_relations', [])
        if not isinstance(relation_list, list):
            raise HolonetConfigurationError('recipient_relations needs to be a list of strings.')

        for relation in relation_list:
            if not isinstance(relation, str):
                raise HolonetConfigurationError('Each item in recipient_relations need to be a '
                                                'string.')

            relation_field = getattr(model, relation, None)
            if relation_field is None:
                raise HolonetConfigurationError('Could not find the relation_field on the model.')

            if not isinstance(relation_field, ReverseManyDescriptor):
                raise HolonetConfigurationError('The relation field needs to be of type '
                                                'models.ManyToManyField')

            m2m_changed.connect(mapping_recipient_list_change, relation_field.through)
    def __new__(cls, name, bases, attrs):
        result = super(WorkflowModelMetaclass, cls).__new__(cls, name, bases, attrs)

        pre_save.connect(_pre_save, result, False)
        post_save.connect(_post_save, result, False)

        return result
Example #11
0
def register(cls, admin_cls):
    cls.add_to_class('creation_date',     models.DateTimeField(_('creation date'),     editable=False))
    cls.add_to_class('modification_date', models.DateTimeField(_('modification date'), editable=False))

    cls.cache_key_components.append(lambda page: page.modification_date and page.modification_date.strftime('%s'))

    pre_save.connect(pre_save_handler, sender=cls)
Example #12
0
	def ready(self):
		pre_save.connect(self.update_count_pre_save)
		pre_delete.connect(self.update_count_pre_save)
		post_save.connect(self.update_count_post_save)
		user_logged_out.connect(self.remove_auth_token)
		self.set_registration_active()
		self.clear_last_objects_cache()
 def register(self, model):
     post_save.connect(add_obj_to_autocompleter, sender=model,
         dispatch_uid='autocompleter.%s.add' % (model))
     pre_save.connect(remove_old_obj_from_autocompleter, sender=model,
         dispatch_uid='autocompleter.%s.remoe_old' % (model))
     post_delete.connect(remove_obj_from_autocompleter,
         sender=model, dispatch_uid='autocompleter.%s.remove' % (model))
Example #14
0
    def finalize(self, model):

        inline_settings = self._inline_settings
        self._inline_settings = {}
        for setting, (related_model, one,
                      admin) in six.iteritems(inline_settings):
            field = models.OneToOneField if one else models.ForeignKey
            related_model = type(
                related_model.__name__,
                (related_model, ),
                {
                    'Meta': type(
                        'Meta', (related_model.Meta, object), {
                            'app_label': 'settings'
                        }
                    ),
                    '__module__': related_model.__module__,
                    'settings': field(
                        model,
                        related_name=setting
                    )
                }
            )

            admin = type(
                related_model.__name__, (admin, ), {
                    'model': related_model
                }
            )

            self._inline_settings[setting] = (related_model, one, admin)

        self._model = model
        pre_save.connect(self._on_model_changed, sender=model)
        pre_delete.connect(self._on_model_changed, sender=model)
Example #15
0
    def handle(self, *args, **options):
        try:
            shapefile = args[0]
            name_field = args[1]
            boundary_field = args[2]
        except IndexError:
            raise CommandError(_("You must provide a shapefile, name "
                                 "field  and boundary field argument"))

        mapping = {'name': name_field,
                   'boundary': boundary_field
                  }
        if options['geolevel']:
            geolevel = GeoLevel.objects.get(slug=options['geolevel'])
            def _set_geolevel(sender, instance, **kwargs):
                """
                Signal callback to set the geolevel for a
                place                 
                """
                instance.geolevel = geolevel

            pre_save.connect(_set_geolevel, sender=Place)

        lm = LayerMapping(Place, shapefile, mapping)
        lm.save(verbose=True)
Example #16
0
	def register_poster(self, model, stream_field, *actions):
		field = getattr(model, stream_field).field
		stream = field.rel.to
		
		if isinstance(stream, str):
			stream = get_model(*stream.split('.'))
		
		if not stream in self._registry:
			raise NotRegistered('Model %s not registered.' % stream)
		
		self._models[model] = stream_field
		
		if isinstance(field, ForeignKey):
			self.logger.debug(
				'Registered poster model %s for stream model %s' % (
					model._meta.verbose_name.capitalize(),
					stream._meta.verbose_name.capitalize()
				)
			)
		elif isinstance(field, ManyToManyField):
			m2m_changed.connect(receivers.m2m_changed)
			
			self.logger.debug(
				'Registered poster model %s for many-to-many stream model %s' % (
					model._meta.verbose_name.capitalize(),
					stream._meta.verbose_name.capitalize()
				)
			)
		else:
			raise ImproperlyConfigured('Connecting field must be a ForeignKey or ManyToMany field')
		
		pre_save.connect(receivers.pre_save, sender = model)
		pre_delete.connect(receivers.pre_delete, sender = model)
		post_save.connect(receivers.post_save, sender = model)
Example #17
0
def connect_cleanup_files_signals():
    connections = ConnectionHandler()
    backend = connections[DEFAULT_DB_ALIAS]

    for model in _find_models_with_filefield():
        pre_save.connect(remove_files_on_change, sender=model)
        post_delete.connect(remove_files_on_delete, sender=model)
Example #18
0
def register(cls, admin_cls):
    cls.add_to_class('_ct_inventory', JSONField(_('content types'), editable=False, blank=True, null=True))
    cls.content_proxy_class = TrackerContentProxy

    pre_save.connect(single_pre_save_handler, sender=cls)
    if hasattr(cls, 'get_descendants'):
        post_save.connect(tree_post_save_handler, sender=cls)
Example #19
0
    def run(self):
        if self.overwrite:
            self.print('Removing existing neighborhoods...', end='')
            if self.real_run:
                Neighborhood.objects.all().delete()
            self.print('Done')

        # Disconnect this temporarily so that the ``unique='name'`` option
        # passed to LayerMapping will work correctly (it collects all
        # records from the RLIS neighborhoods shapefile with the same name
        # into a single database record; if we normalize the names on save,
        # this feature won't work).
        pre_save.disconnect(normalize_name, sender=Neighborhood)

        self.print('Adding neighborhoods...', end='')
        if self.real_run:
            mapping = LayerMapping(
                Neighborhood, self.path, Neighborhood.layer_mapping, source_srs=self.from_srid,
                unique='name')
            mapping.save(strict=True)
        self.print('Done')

        self.print('Normalizing neighborhood names...', end='')
        neighborhoods = Neighborhood.objects.all()
        if self.real_run:
            with transaction.atomic():
                for neighborhood in neighborhoods:
                    neighborhood.name = Neighborhood.normalize_name(neighborhood.name)
                    neighborhood.save()
        self.print('Done')

        pre_save.connect(normalize_name, sender=Neighborhood)
Example #20
0
    def __new__(cls, name, bases, attrs):
        
        if name == 'SlugBase':
            return super(SlugMeta, cls).__new__(cls, name, bases, attrs)
        
        pre_name = attrs.get('_slug_prepopulate_from')
        if not pre_name:
            raise TypeError("No valid '_slug_prepopulate_from' class attribute found")
        del attrs['_slug_prepopulate_from']
        
        pre_field = attrs.get(pre_name)
        if not pre_field:
            raise TypeError("No '%s' field found" % pre_name)
        if not isinstance(pre_field, models.CharField):
            raise TypeError("Wrong type for '%s' field" % pre_name)
        if 'slug' in attrs:
            raise TypeError("A 'slug' field already exists")

        if '_slug_field_args' in attrs:
            kw = attrs['_slug_field_args']
            del attrs['_slug_field_args']
        else:
            kw = {}
            
        attrs['slug'] = models.CharField(max_length=pre_field.max_length, **kw)
        attrs['_slug_pre'] = property(lambda s: getattr(s, pre_name))
        
        new_class = super(SlugMeta, cls).__new__(cls, name, bases, attrs)
        
        pre_save.connect(new_class._slug_pre_save, sender=new_class)
        
        return new_class
Example #21
0
	def ready(self):
		Attachment = self.get_model('Attachment')

		pre_delete.connect(self.delete_file, sender=Attachment)
		pre_delete.connect(self.delete_attachmentimage, sender=Attachment)
		pre_save.connect(self.delete_attachmentimage, sender=Attachment)
		post_save.connect(self.create_attachmentimage, sender=Attachment)
Example #22
0
def _listen():
    """ signals listen """

    # case save/delete listen for email notify
    post_save.connect(case_watchers.on_case_save, TestCase)
    post_delete.connect(case_watchers.on_case_delete, TestCase)
    pre_save.connect(case_watchers.pre_save_clean, TestCase)
Example #23
0
    def ready(self):
        from .models import clear_usersettings_cache
        from .shortcuts import get_usersettings_model

        usersettings_model = get_usersettings_model()
        pre_save.connect(clear_usersettings_cache, sender=usersettings_model)
        pre_delete.connect(clear_usersettings_cache, sender=usersettings_model)
def cache_purge_hook(model, func=None):
    pre_save.connect(
        partial(__pre_save_hook, model, func),
        dispatch_uid="cache_purge_hook",
        sender=model,
        weak=False,
    )
    post_save.connect(
        partial(__post_save_hook, model, func),
        dispatch_uid="cache_purge_hook",
        sender=model,
        weak=False,
    )
    pre_delete.connect(
        partial(__pre_delete_hook, model, func),
        dispatch_uid="cache_purge_hook",
        sender=model,
        weak=False,
    )
    post_delete.connect(
        partial(__post_delete_hook, model, func),
        dispatch_uid="cache_purge_hook",
        sender=model,
        weak=False,
    )
Example #25
0
def register(cls, admin_cls):
    cls.add_to_class('SLEEPING', 10)
    cls.add_to_class('QUEUED', 20)
    cls.add_to_class('SENT', 30)
    cls.add_to_class('UNKNOWN', 0)

    PINGING_CHOICES = (
        (cls.SLEEPING, _('sleeping')),
        (cls.QUEUED, _('queued')),
        (cls.SENT, _('sent')),
        (cls.UNKNOWN, _('unknown')),
    )

    cls.add_to_class(
        'pinging',
        models.SmallIntegerField(
            _('ping'),
            editable=False,
            default=cls.SLEEPING,
            choices=PINGING_CHOICES,
        )
    )

    if admin_cls:
        if not hasattr(admin_cls, 'actions'):
            setattr(admin_cls, 'actions', [])
        admin_cls.actions.append(
            entry_admin_update_fn(_('queued'), {'pinging': cls.QUEUED},
            short_description=_('Ping Again')))

    pre_save.connect(pre_save_handler, sender=cls)
Example #26
0
def spy_on_model(model, agents):
    if not issubclass(model, models.Model):
        raise WatchException("'%s' is not a subclass of django.db.models.Model" % (model.__name__, ))
    model_fields = [field.name for field in model._meta.fields]
    pre_save_agents = []
    post_save_agents = []
    for agent in agents:
        field_name = agent.field_name
        is_pre_save = agent.pre_save
        if not field_name in model_fields:
            raise WatchException("'%s' is not a field of '%s'" % (field_name, model.__name__))
        if is_pre_save:
            pre_save_agents.append(agent)
        else:
            post_save_agents.append(agent)


    # Add an attribute for each agent (a 'bug') to keep track of the field values
    def bug_instance(instance):
        for agent in agents:
            field_name = agent.field_name
            agent_name = _watch_name(field_name)
            current_value = getattr(instance, field_name)
            setattr(instance, agent_name, current_value)

    dispatch_uid = 'spy_post_init_%s' % model.__name__
    @receiver(post_init, sender=model, dispatch_uid=dispatch_uid)
    def init_bugs(sender, instance, **kwargs):
        bug_instance(instance)

    def get_detect_change(pre_save=True):
        if pre_save:
            event_agents = pre_save_agents
        else:
            event_agents = post_save_agents
        def detect_change_and_reset_bugs(sender, instance, **kwargs):
            for agent in event_agents:
                field_name = agent.field_name
                agent_name = _watch_name(field_name)
                old_value = getattr(instance, agent_name)
                new_value = getattr(instance, field_name)
                # If the value has changed, call the on_change method of the agent
                if old_value != new_value:
                    agent.on_change(instance, old_value, new_value)
            # Reset the bugs for this instance
            bug_instance(instance)
        return detect_change_and_reset_bugs

    detect_changes_pre_save = get_detect_change(True)
    detect_changes_post_save = get_detect_change(False)

    if pre_save_agents:
        dispatch_uid = 'spy_pre_save_%s' % model.__name__
        pre_save.connect(detect_changes_pre_save, sender=model, dispatch_uid=dispatch_uid)
    if post_save_agents:
        dispatch_uid = 'spy_post_save_%s' % model.__name__
        post_save.connect(detect_changes_post_save, sender=model, dispatch_uid=dispatch_uid)

    return model
Example #27
0
    def handle_model(self):
        self.model.add_to_class('_ct_inventory', JSONField(
            _('content types'), editable=False, blank=True, null=True))
        self.model.content_proxy_class = TrackerContentProxy

        pre_save.connect(single_pre_save_handler, sender=self.model)
        if hasattr(self.model, 'get_descendants'):
            post_save.connect(tree_post_save_handler, sender=self.model)
Example #28
0
def register(cls, admin_cls):
    cls.add_to_class('_ct_inventory', models.CharField(_('content types'), max_length=500, editable=False))
    cls.add_to_class('count_content_types', page_count_content_types)

    cls.orig_get_content_types_for_region = cls._get_content_types_for_region
    cls._get_content_types_for_region = page_get_content_types_for_region

    pre_save.connect(pre_save_handler, sender=cls)
Example #29
0
def register():
    if settings.AUTHOR_MODELS:
        for model in settings.AUTHOR_MODELS:
            app_label, model = model.split('.', 1)
            ct = ContentType.objects.get_by_natural_key(app_label, model)
            pre_save.connect(pre_save_callback, sender=ct.model_class())
    else:
        pre_save.connect(pre_save_callback)
Example #30
0
 def __init__(self, obj, attr, callback):
     super(ValueWatcher, self).__init__(obj, attr, callback)
     model = self._obj.__class__
     # Add recivers
     pre_save.connect(self._pre_save_reciver, sender=model, weak=False)
     post_save.connect(self._post_save_reciver, sender=model, weak=False)
     # Initialize variable
     self._previous_value = None
Example #31
0
    content = models.TextField(max_length=5000, null=True, blank=True)
    slug = models.SlugField(unique=True, null=True, blank=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("info", args=[str(self.slug)])


def info_pre_save_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = unique_slug_generator(instance)


pre_save.connect(info_pre_save_receiver, sender=Info)


class InfoImage(models.Model):
    image = models.ForeignKey("audiovisual.Image", on_delete=models.CASCADE)
    general = models.ForeignKey(Info, on_delete=models.CASCADE)
    uploaded_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.image.title


class NewsList(models.Model):
    """
    TODO: I want to automatize this with a job that takes the next 3 events, with workshops
    as preferences and sets it every week?
Example #32
0
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    slug = models.SlugField(unique = True, null=True, blank=True)

    def __str__(self):
        return self.name

  
    
    def get_absolute_url(self):
        return reverse("Alt:shirts", kwargs={"slug": self.slug})

def slug_generator(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug='SLUG'

pre_save.connect(slug_generator, sender=Shirt)    
    



class NonProfit(models.Model):
    name= models.CharField(max_length=50, blank=False, null=False)
    logo =  models.TextField()
    description =models.TextField()
    year_started = models.IntegerField()
    mission_statement=models.TextField()
    vision_statement=models.TextField()
    website_url= models.URLField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    slug = models.SlugField(unique = True)
Example #33
0
    updated = models.DateTimeField(auto_now=True)
    #my_date_field 	= models.DateField(auto_now = False, auto_now_add=False)
    slug = models.SlugField(null=True, blank=True)

    def __str__(self):
        return self.name

    @property
    def title(self):
        return self.name


def rl_pre_save_receiver(sender, instance, *args, **kwargs):
    #print('saving..')
    #print(instance.timestamp)

    if not instance.slug:
        instance.slug = unique_slug_generator(instance)


# def rl_post_save_receiver(sender, instance, *args, **kwargs):
# 	print('saved..')
# 	print(instance.timestamp)

# 	if not instance.slug:
# 		instance.slug = unique_slug_generator(instance)
# 		instance.save()

pre_save.connect(rl_pre_save_receiver, sender=RestaurantLocation)

#post_save.connect(rl_post_save_receiver, sender = RestaurantLocation)
Example #34
0
    def get_markdown(self):
        content = self.content
        markdown_text = markdown(content)
        return mark_safe(markdown_text)


def create_slug(instance, new_slug=None):
    slug = slugify(instance.title)
    if new_slug is not None:
        slug = new_slug
    qs = Post.objects.filter(slug=slug).order_by("-id")
    exists = qs.exists()
    if exists:
        new_slug = "%s-%s" % (slug, qs.first().id)
        return create_slug(instance, new_slug=new_slug)
    return slug


def pre_save_post_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = create_slug(instance)

    if instance.content:
        html_string = instance.get_markdown()
        read_time_var = get_read_time(html_string)
        instance.read_time = read_time_var


pre_save.connect(pre_save_post_receiver, sender=Post)
Example #35
0
            except:
                return "Unknown"
            if difference <= timedelta(minutes=1):
                return 'just now'
            return '{time} ago'.format(
                time=timesince(publish_time).split(', ')[0])
        return "Not published"


def blog_post_model_pre_save_receiver(sender, instance, *args, **kwargs):
    print("before save")
    if not instance.slug and instance.title:
        instance.slug = slugify(instance.title)


pre_save.connect(blog_post_model_pre_save_receiver, sender=PostModel)


def blog_post_model_post_save_receiver(sender, instance, created, *args,
                                       **kwargs):
    print("after save")
    print(created)
    if created:
        if not instance.slug and instance.title:
            instance.slug = slugify(instance.title)
            instance.save()


post_save.connect(blog_post_model_post_save_receiver, sender=PostModel)
'''
python manage.py makemigrations #every time you change models.py
Example #36
0
def rl_pre_save_reciever(sender, instance, *args, **kwargs):
    print('saving..')
    print(instance.timestamp)
    if not instance.slug:
        instance.slug = unique_slug_generator(instance)

    if not instance.location:
        instance.location = grab_location(instance)


def rl_post_save_reciever(sender, instance, created, *args, **kwargs):
    print('saved')
    print(instance.timestamp)


pre_save.connect(rl_pre_save_reciever, sender=Post)
post_save.connect(rl_post_save_reciever, sender=Post)


class movies(models.Model):
    movie_id = models.IntegerField(default=0)
    imdb_id = models.IntegerField(default=0)
    movie_name = models.CharField(max_length=200)
    genre = models.CharField(max_length=200)
    vectors = models.CharField(max_length=200)


class links(models.Model):
    movie_id = models.IntegerField(default=0)
    url = models.CharField(max_length=300)
Example #37
0
class VoterDetails(ModelBase):
    user = models.ForeignKey('users.UserProfile', related_name='voter_details')
    taxonomy = models.ManyToManyField(VoterTaxonomy)


class Judge(ModelBase):
    challenge = models.ForeignKey(Challenge)
    user = models.ForeignKey('users.UserProfile', related_name='judges')

    class Meta:
        unique_together = (('challenge', 'user'), )


admin.site.register(Judge)

### Signals


def submission_markdown_handler(sender, **kwargs):
    submission = kwargs.get('instance', None)
    if not isinstance(submission, Submission):
        return
    if submission.description:
        submission.description_html = bleach.clean(
            markdown(submission.description),
            tags=TAGS,
            attributes=ALLOWED_ATTRIBUTES)


pre_save.connect(submission_markdown_handler, sender=Submission)
Example #38
0
    timestamp = models.DateTimeField(auto_now_add=True)
    update = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['-timestamp']


def blog_category_pre_save_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = blog_unique_slug_generator(instance)


pre_save.connect(blog_category_pre_save_receiver, sender=BlogCategory)


class BlogSubCategory(models.Model):
    title = models.CharField(max_length=120)
    slug = models.SlugField(null=True, blank=True, max_length=50)
    timestamp = models.DateTimeField(auto_now_add=True)
    update = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['-timestamp']

Example #39
0
        return cards_qs.filter(active=True).count()


def billing_profile_created_receiver(sender, instance, *args, **kwargs):
    if not instance.stripe_cust_id and instance.email:
        print(
            "ACTUAL API REQUEST Send to Stripe or some other payment processor"
        )
        # call Stripe API to return Stripe customer id based on CRV19 email
        customer = stripe.Customer.create(email=instance.email)
        print(customer)
        # customer.id or customer.stripe_id ??
        instance.stripe_cust_id = customer.id


pre_save.connect(billing_profile_created_receiver, sender=BillingProfile)


# when user is Created, use the signal below to create the billing profile automatically
def user_created_receiver(sender, instance, created, *args, **kwargs):
    if created and instance.email:
        BillingProfile.objects.get_or_create(user=instance,
                                             email=instance.email)


post_save.connect(user_created_receiver, sender=User)


class CardManager(models.Manager):
    # Overide to include only active = True.  Don't pull in inactive cards
    def all(self, *args, **kwargs):
Example #40
0
from .utils import unique_slug_generator
from django.db.models.signals import pre_save, post_save

class Category(models.Model):
    name=models.CharField(max_length=100,null=True,blank=True,unique=True)
    slug= models.SlugField(max_length=250, null=True, blank=True)

    def __str__(self):
        return str(self.name)


def rl_pre_save_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = unique_slug_generator(instance)
        
pre_save.connect(rl_pre_save_receiver, sender=Category)



class portfolio(models.Model):
    category = models.ForeignKey(Category,on_delete=models.SET_NULL,null=True,blank=True)
    image= models.ImageField(null=True,blank=True)
    link=models.CharField(max_length=100,null=True,blank=True)
    title=models.CharField(max_length=100,null=True,blank=True)
    icon=models.CharField(max_length=100,null=True,blank=True)

    def __str__(self):
        return str(self.title)

    @property
    def imageURL(self):
Example #41
0
class TagManager(models.Manager):
    def get_queryset(self):
        return TagQuerySet(self.model, using=self._db)

    def all(self, *args, **kwargs):
        return super(TagManager, self).all(*args, **kwargs).active()


class Tag(models.Model):
    title = models.CharField(max_length=120, unique=True)
    slug = models.SlugField(unique=True)
    products = models.ManyToManyField(Product, blank=True)
    active = models.BooleanField(default=True)

    objects = TagManager()

    def __str__(self):
        return str(self.title)

    def get_absolute_url(self):
        view_name = "tags:detail"
        return reverse(view_name, kwargs={"slug": self.slug})


def tag_pre_save_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = slugify(instance.title)


pre_save.connect(tag_pre_save_receiver, sender=Tag)
Example #42
0
                    from_email=settings.DEFAULT_FROM_EMAIL,
                    recipient_list=[self.email],
                    html_message=html_,
                    fail_silently=False,
                )
                return sent_mail
        return False


def pre_save_email_activation(sender, instance, *args, **kwargs):
    if not instance.activated and not instance.forced_expired:
        if not instance.key:
            instance.key = unique_key_generator(instance)


pre_save.connect(pre_save_email_activation, sender=EmailActivation)


def post_save_user_create_receiver(sender, instance, created, *args, **kwargs):
    if created:
        obj = EmailActivation.objects.create(user=instance,
                                             email=instance.email)
        obj.send_activation_email()


post_save.connect(post_save_user_create_receiver, sender=User)


class GuestEmail(models.Model):
    email = models.EmailField(max_length=254)
    uddate = models.DateField(auto_now=True)
Example #43
0
            actors_by_type[actor.type].append(actor)

        resolved_actors = {}
        for type, actors in actors_by_type.items():
            resolved_actors[type] = {
                actor.id: actor
                for actor in type.objects.filter(id__in=[a.id for a in actors])
            }

        return {
            key: resolved_actors[value.type][value.id]
            for key, value in actor_dict.items()
        }


def handle_actor_pre_save(instance, **kwargs):
    # we want to create an actor if we don't have one
    if not instance.actor_id:
        instance.actor_id = Actor.objects.create(
            type=ACTOR_TYPES[type(instance).__name__.lower()]).id


pre_save.connect(handle_actor_pre_save,
                 sender="sentry.Team",
                 dispatch_uid="handle_actor_pre_save",
                 weak=False)
pre_save.connect(handle_actor_pre_save,
                 sender="sentry.User",
                 dispatch_uid="handle_actor_pre_save",
                 weak=False)
Example #44
0
#     price_6_months      = models.FloatField(_("6 months price"),
#                           blank=True, null=True)
#     price_12_months     = models.FloatField(_("12 months price"),
#                           blank=True, null=True)
#     price_24_months     = models.FloatField(_("24 months price"),
#                           blank=True, null=True)
#     price_36_months     = models.FloatField(_("36 months price"),
#                           blank=True, null=True)
#     price_40_months     = models.FloatField(_("40 months price"),
#                           blank=True, null=True)
#     slug                = models.SlugField(_("slug"))

#     class Meta:
#         verbose_name = _("Mobile Price")
#         verbose_name_plural = _("Mobile Prices")

#     def __str__(self):
#         return str(self.price)

#     def get_absolute_url(self):
#         return reverse("mobile_price", kwargs={"pk": self.pk})


def pre_save_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = unique_slug_generator(instance=instance)


# pre_save.connect(pre_save_receiver, sender=Mobile)
pre_save.connect(pre_save_receiver, sender=TelecomCompany)
Example #45
0
                    recipient_list,
                    html_message=html_,  # If content_type is text/html
                    fail_silently=
                    False  # If false, then an email will be sent if error occurs while sending the email
                )
                return sent_mail
        return False


def pre_save_email_activation_receiver(sender, instance, *args, **kwargs):
    if not instance.activated and not instance.forced_expire:
        if not instance.key:
            instance.key = unique_key_generator(instance)


pre_save.connect(pre_save_email_activation_receiver, sender=EmailActivation)


def post_save_user_create_receiver(sender, instance, created, *args, **kwargs):
    if created:
        email_obj = EmailActivation.objects.create(user=instance,
                                                   email=instance.email)
        email_obj.send_activation()


post_save.connect(post_save_user_create_receiver, sender=User)


class GuestModel(models.Model):
    email = models.EmailField()
    active = models.BooleanField(default=True)
Example #46
0

class Product(models.Model):
    title = models.CharField(max_length=50)
    description = models.TextField()
    price = models.DecimalField(max_digits=8, decimal_places=2, default=0.0)
    slug = models.SlugField(null=False, blank=False, unique=True)
    image = models.ImageField(upload_to='products/', null=False, blank=False)
    created_at = models.DateField(auto_now=True)

    # def save(self, *args, **kwargs):
    #     self.slug = slugify(self.title)
    #     super(Product,self).save(*args, **kwargs)

    def __str__(self):
        return self.title


def set_slug(sender, instance, *args, **kwargs):  #callback
    if instance.title and not instance.slug:
        slug = slugify(instance.title)

        while Product.objects.filter(slug=slug).exists():
            slug = slugify('{}-{}'.format(instance.title,
                                          str(uuid.uuid4())[:8]))

        instance.slug = slug


pre_save.connect(set_slug, sender=Product)
Example #47
0
    timestamp = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    objects = CartManager()

    def __str__(self):
        return str(self.id)


def m2m_changed_cart_receiver(sender, instance, action, *args, **kwargs):
    if action == 'post_add' or action == 'post_remove' or action == 'post_clear':
        products = instance.products.all()
        total = 0
        for x in products:
            total += x.price
        instance.subtotal = total
        instance.save()


m2m_changed.connect(m2m_changed_cart_receiver, sender=Cart.products.through)


def pre_save_cart_receiver(sender, instance, *args, **kwargs):
    if instance.subtotal > 0:
        instance.total = float(instance.subtotal) * float(1.08)
    else:
        instance.total = 0


pre_save.connect(pre_save_cart_receiver, sender=Cart)
Example #48
0
        return self.like.count()

    def total_like_after_dislike(self):
        if self.like:
            self.like -= 1
            return self.like.count()
        else:
            return self.like.count()


def pre_save_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = unique_slug_generator(instance)


pre_save.connect(pre_save_receiver, sender=Blogpost)


class Categories(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('home')


class UserProfile(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    bio = models.TextField(max_length=400)
Example #49
0
    owner = models.ForeignKey(
        User
    )  # class_instance.model_set.all() # Django Models Unleashed JOINCFE.com
    name = models.CharField(max_length=120)
    timestamp = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    slug = models.SlugField(null=True, blank=True)
    #my_date_field   = models.DateField(auto_now=False, auto_now_add=False)

    objects = TodoManager()

    def __str__(self):
        return self.name

    def get_absolute_url(self):  #get_absolute_url
        #return f"/restaurants/{self.slug}"
        return reverse('detailt', kwargs={'slug': self.slug})

    @property
    def title(self):
        return self.name


def todo_pre_save_receiver(sender, instance, *args, **kwargs):

    if not instance.slug:
        instance.slug = unique_slug_generator(instance)


pre_save.connect(todo_pre_save_receiver, sender=Todo)
Example #50
0

class Coupon(models.Model):
    code = models.CharField(max_length=150, unique=True, blank=True)
    discount = models.IntegerField(
        validators=[MinValueValidator(0),
                    MaxValueValidator(100)])
    starts = models.DateTimeField()
    ends = models.DateTimeField()
    active = models.BooleanField(default=True)

    def __str__(self):
        return self.code

    def is_valid(self):
        if Coupon.objects.filter(self__starts__lte=timezone.now(),
                                 self__ends__gte=timezone.now()).exists():
            self.active = True
        else:
            self.active = False


def save_code(sender, **kwargs):
    c = Coupon.objects.filter(id=kwargs['instance'].id)
    if not c.exists():
        code = unique_code(kwargs['instance'])
        kwargs['instance'].code = code


pre_save.connect(save_code, sender=Coupon)
Example #51
0
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name', 'last_name',]

    objects = MyAccountManager()

    def __str__(self):
        return self.email

    # For checking permissions. to keep it simple all admin have ALL permissons
    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True


@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
    if created:
        Token.objects.create(user=instance)

def get_username(sender, instance, *args, **kwargs):
	if not instance.username:
		instance.username = str(instance.first_name.replace(" ", "-").lower() + "-" +instance.last_name.replace(" ", "-").lower())
pre_save.connect(get_username, sender=Account)

Example #52
0
        db_table = 'django_site'
        verbose_name = _('site')
        verbose_name_plural = _('sites')
        ordering = ('domain',)

    def __str__(self):
        return self.domain

    def natural_key(self):
        return (self.domain,)


def clear_site_cache(sender, **kwargs):
    """
    Clear the cache (if primed) each time a site is saved or deleted.
    """
    instance = kwargs['instance']
    using = kwargs['using']
    try:
        del SITE_CACHE[instance.pk]
    except KeyError:
        pass
    try:
        del SITE_CACHE[Site.objects.using(using).get(pk=instance.pk).domain]
    except (KeyError, Site.DoesNotExist):
        pass


pre_save.connect(clear_site_cache, sender=Site)
pre_delete.connect(clear_site_cache, sender=Site)
Example #53
0
        slug = new_slug
    qs = Project.objects.filter(slug=slug).order_by("-id")
    exists = qs.exists()
    if exists:
        new_slug = '{}-{}'.format(slug, qs.first().id)
        #recursive function in a case if slug already exists
        return create_slug(instance, new_slug=new_slug)
    return slug


def pre_save_project_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = create_slug(instance)


pre_save.connect(pre_save_project_receiver, sender=Project)


class Membership(models.Model):
    user = models.ForeignKey(User,
                             null=True,
                             blank=True,
                             default=None,
                             related_name="memberships",
                             on_delete=models.CASCADE)
    project = models.ForeignKey(Project,
                                null=False,
                                blank=False,
                                related_name="memberships",
                                on_delete=models.CASCADE)
    date_joined = models.DateTimeField(null=False,
Example #54
0
	price		= models.DecimalField(decimal_places=2,max_digits=8,default=99)
	image		= models.ImageField(upload_to=upload_image_path,null=True,blank=True)
	#null = True you can use FileField to provide file max100MB -->kirr.co/e1133t
	description = models.TextField()
	featured	= models.BooleanField(default=False)
	active		= models.BooleanField(default=True)
	timestamp	= models.DateTimeField(auto_now_add=True)

	objects=ProductManager()


	def get_absolute_url(self):
		# return "/products/{slug}".format(slug=self.slug)
		return reverse("products:detail",kwargs={'slug':self.slug})

	def __str__(self):
		return self.title #changes title name

	@property
	def name(self):
		return self.title

# signals

def product_pre_save_receiver(sender,instance,*args,**kwargs):
	if not instance.slug:
		instance.slug = unique_slug_generator(instance)


pre_save.connect(product_pre_save_receiver,sender=Product)
Example #55
0
            decimal.Decimal(self.get_descuento() / 100) *
            self.carrito.total).quantize(TWOPLACES)
        print("Descuento: ", descuento)
        return self.carrito.total + self.shipping_total - descuento

    @property
    def descripcion(self):
        return 'Compra por ({}) productos '.format(
            self.carrito.productos.count())

    def update_total(self):
        self.total = self.get_total()
        self.save()

    def get_descuento(self):
        if self.codigo_promocion:
            return self.codigo_promocion.descuento
        return 0


def set_orden_id(sender, instance, *args, **kwargs):
    if not instance.orden_id:
        instance.orden_id = str(uuid.uuid4())


def set_total(sender, instance, *args, **kwargs):
    instance.total = instance.get_total()


pre_save.connect(set_orden_id, sender=Orden)
pre_save.connect(set_total, sender=Orden)
Example #56
0
    def update_total(self):
        cart_total = self.cart.total
        shipping_total = self.shipping_total
        new_total = math.fsum([cart_total, shipping_total])
        formatted_total = format(new_total, '.2f')
        self.total = formatted_total
        self.save()
        return new_total


def pre_save_create_order_id(sender, instance, *args, **kwargs):
    if not instance.order_id:
        instance.order_id = unique_order_id_generator(instance)


pre_save.connect(pre_save_create_order_id, sender=Order)


def post_save_cart_total(sender, instance, created, *args, **kwargs):
    if not created:
        cart_obj = instance
        cart_total = cart_obj.total
        cart_id = cart_obj.id
        qs = Order.objects.filter(cart__id=cart_id)
        if qs.count() == 1:
            order_obj = qs.first()
            order_obj.update_total()


post_save.connect(post_save_cart_total, sender=Cart)
Example #57
0
from django.db import models
from django.utils.timezone import now
from .utils import unique_slug_generator
from django.db.models.signals import pre_save


class Genre(models.Model):
    name = models.CharField('Name', max_length=100)
    description = models.TextField('Description')
    slug = models.SlugField(max_length=100, unique=True, blank=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Genre'
        verbose_name_plural = 'Genres'


def genre_pre_save_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = unique_slug_generator(instance)


pre_save.connect(genre_pre_save_receiver, sender=Genre)
Example #58
0
    if (instance.health != instance._old_health) or (instance.state != instance._old_state):
        # Update the states as some objects are save many times.
        # Even if an object is saved many time, we will send messages only when
        # the state change.
        instance._old_health = instance.health
        instance._old_state = instance.state

        # Create the message
        data = {
            "hostname": instance.hostname,
            "health": instance.get_health_display(),
            "state": instance.get_state_display(),
        }

        # Send the event
        send_event(".worker", "lavaserver", data)


pre_delete.connect(testjob_pre_delete_handler, sender=TestJob, weak=False, dispatch_uid="testjob_pre_delete_handler")
# This handler is used for the notification and the events
post_init.connect(testjob_init_handler, sender=TestJob, weak=False, dispatch_uid="testjob_init_handler")
pre_save.connect(testjob_notifications, sender=TestJob, weak=False, dispatch_uid="testjob_notifications")

# Only activate theses signals when EVENT_NOTIFICATION is in use
if settings.EVENT_NOTIFICATION:
    post_init.connect(device_init_handler, sender=Device, weak=False, dispatch_uid="device_init_handler")
    post_save.connect(device_post_handler, sender=Device, weak=False, dispatch_uid="device_post_handler")
    post_save.connect(testjob_post_handler, sender=TestJob, weak=False, dispatch_uid="testjob_post_handler")
    post_init.connect(worker_init_handler, sender=Worker, weak=False, dispatch_uid="worker_init_handler")
    post_save.connect(worker_post_handler, sender=Worker, weak=False, dispatch_uid="worker_post_handler")
Example #59
0
from django.db import models
from django.conf import settings
from django.utils.text import slugify
from django.db.models.signals import pre_save, post_delete
from django.dispatch import receiver


class Tweet(models.Model):
    body = models.TextField(max_length=240, null=False, blank=False)
    date_published = models.DateTimeField(auto_now_add=True,
                                          verbose_name="date published")
    date_updated = models.DateTimeField(auto_now=True,
                                        verbose_name="date updated")
    author = models.ForeignKey(settings.AUTH_USER_MODEL,
                               on_delete=models.CASCADE)
    slug = models.SlugField(blank=True, unique=True)

    def __str__(self):
        return self.body


def pre_save_tweet_receiver(sender, instance, **kwargs):
    if not instance.slug:
        instance.slug = slugify(instance.author.username + "-" + instance.body)


pre_save.connect(pre_save_tweet_receiver, sender=Tweet)
Example #60
0
    if new_slug is not None:
        slug = new_slug
    qs = Category.objects.filter(slug=slug).order_by('-id')
    exists = qs.exists()
    if exists:
        new_slug = "%s-%s" % (slug, qs.first().id)
        return create_slug(instance, new_slug=new_slug)
    return slug


def pre_save_reciever(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = create_slug(instance)


pre_save.connect(pre_save_reciever, sender=Category)

pre_save.connect(pre_save_reciever, sender=SubCategory)

pre_save.connect(pre_save_reciever, sender=Product)

# def create_subcat_slug(instance, new_slug=None):
#     slug = slugify(instance.subcat_name)
#     if new_slug is not None:
#         slug = new_slug
#     qs = Category.objects.filter(subcat_slug=slug).order_by('-id')
#     exists = qs.exists()
#     if exists:
#         new_slug = "%s-%s" %(slug, qs.first().id)
#         return create_subcat_slug(instance, new_slug=new_slug)
#     return slug