예제 #1
0
    def pre_save(self, instance, add):

        # get currently entered slug
        value = self.value_from_object(instance)

        # autopopulate
        if self.always_update or (self.populate_from and not value):
            value = utils.get_prepopulated_value(self, instance)

            if __debug__ and not value:
                print 'Failed to populate slug %s.%s from %s' % \
                    (instance._meta.object_name, self.name, self.populate_from)

        slug = self.slugify(value)

        if not slug:
            # no incoming value,  use model name
            slug = instance._meta.module_name

        assert slug, 'slug is defined before trying to ensure uniqueness'

        slug = utils.crop_slug(self, slug)

        # ensure the slug is unique (if required)
        if self.unique or self.unique_with:
            slug = utils.generate_unique_slug(self, instance, slug)

        assert slug, 'value is filled before saving'

        # make the updated slug available as instance attribute
        setattr(instance, self.name, slug)

        return slug
예제 #2
0
    def pre_save(self, instance, add):

        # get currently entered slug
        value = self.value_from_object(instance)

        manager = self.manager

        # autopopulate
        if self.always_update or (self.populate_from and not value):
            value = utils.get_prepopulated_value(self, instance)

            if __debug__ and not value:
                print 'Failed to populate slug %s.%s from %s' % \
                    (instance._meta.object_name, self.name, self.populate_from)

        slug = self.slugify(value)

        if not slug:
            # no incoming value,  use model name
            slug = instance._meta.module_name

        assert slug, 'slug is defined before trying to ensure uniqueness'

        slug = utils.crop_slug(self, slug)

        # ensure the slug is unique (if required)
        if self.unique or self.unique_with:
            slug = utils.generate_unique_slug(self, instance, slug, manager)

        assert slug, 'value is filled before saving'

        # make the updated slug available as instance attribute
        setattr(instance, self.name, slug)

        return slug
예제 #3
0
    def create_from_row(self, row):
        try:
            try:
                case = Case.objects.get(caseid=row['caseid'])
            except Exception as e:
                logger.warn("Exception caught creating Case from row %s %s" %
                            (e, row['caseid']))
                slug = generate_unique_slug(Case, row['name_abbreviation'])
                case = Case(caseid=row['caseid'], slug=slug)
                pass

            # if just created, write fields
            # if already created, check timestamp
            if case.date_added:
                utc = pytz.utc
                naive_timestamp = get_date_added(row['timestamp'])
                if naive_timestamp:
                    new_timestamp = utc.localize(naive_timestamp)
                    # overwrite case only if:
                    # date_added (old timestamp) did not exist and new_timestamp exists
                    # timestamp is greater than previous date_added timestamp
                    if (new_timestamp and not case.date_added) or (
                            new_timestamp >= case.date_added):
                        case.write_case_fields(row)
                else:
                    # case has already been created and we are iterating
                    # over the same row again (without date_added)
                    pass
예제 #4
0
    def pre_save(self, instance, add):

        # get currently entered slug
        value = self.value_from_object(instance)

        manager = self.manager

        # autopopulate
        if self.always_update or (self.populate_from and not value):
            value = utils.get_prepopulated_value(self, instance)

            if __debug__ and not value:
                print 'Failed to populate slug %s.%s from %s' % \
                    (instance._meta.object_name, self.name, self.populate_from)

        slug = self.slugify(value)

        if not slug:
            # no incoming value,  use model name
            slug = instance._meta.module_name

        assert slug, 'slug is defined before trying to ensure uniqueness'

        slug = utils.crop_slug(self, slug)

        # ensure the slug is unique (if required)
        if self.unique or self.unique_with:
            slug = utils.generate_unique_slug(self, instance, slug, manager)

        assert slug, 'value is filled before saving'

        # check if redirect tracking is on and if so prepare
        if not add and self.redirect_tracking:

            # Can we import the needed django.contrib.redirects app
            try:
                from django.contrib.redirects.models import Redirect
                from django.contrib.sites.models import Site

            except ImportError:
                raise Exception("You are using redirect_tracking. Please be sure to add django contrib apps Redirect and Site to your INSTALLED_APPS.")

            # does model instance have get_absolute_url defined
            try:
                # capture current get_absolute_url
                pre_update_absolute_url = instance.get_absolute_url()

            except AttributeError:
                raise Exception("You are using redirect_tracking on a field whose model does not have get_absolute_url defined. You must define this method on your model.")

        # make the updated slug available as instance attribute
        setattr(instance, self.name, slug)

        if not add and self.redirect_tracking:
            # check if the slug update caused a change in get_absolute_url
            # if so and redirect_tracking = True, record in the django contrib redirect app.
            post_update_absolute_url = instance.get_absolute_url()

            if pre_update_absolute_url != post_update_absolute_url:
                # current site
                site = Site.objects.get_current()

                # add a redirect
                redirect = Redirect(
                    site=site,
                    old_path=pre_update_absolute_url,
                    new_path=post_update_absolute_url
                )
                redirect.save()

        return slug
예제 #5
0
        case = self(caseid=caseid, **kwargs)
        case.slug = generate_unique_slug(Case, case.name_abbreviation)
        reporter = Reporter.get_or_create_unique(
            name=kwargs.get('reporter'),
            jurisdiction=kwargs.get('jurisdiction'))

        case.reporter = reporter
        case.save()
        return case

    @classmethod
    def create_from_row(self, row):
        try:
            case = Case.objects.get(caseid=row['caseid'])
        except Case.DoesNotExist:
            slug = generate_unique_slug(Case, row['name_abbreviation'])
            case = Case(caseid=row['caseid'], slug=slug)

        # if just created, write fields
        # if already created, check timestamp
        if case.date_added:
            utc = pytz.utc
            naive_timestamp = get_date_added(row['timestamp'])
            if naive_timestamp:
                new_timestamp = utc.localize(naive_timestamp)
                # overwrite case only if:
                # date_added (old timestamp) did not exist and new_timestamp exists
                # timestamp is greater than previous date_added timestamp
                if (new_timestamp and not case.date_added) or (
                        new_timestamp >= case.date_added):
                    case.write_case_fields(row)