Ejemplo n.º 1
0
    def save(self, *args, **kwargs):
        if self.pk is None:
            self.salt = uuid.uuid4().hex
            self.created_at = datetime.datetime.now()

            # do this now instead of in AbstractVersionedEntity.save() so we can use it for image name
            if self.entity_id is None:
                self.entity_id = generate_entity_uri()

            if not self.image:
                badgeclass_name, ext = os.path.splitext(self.badgeclass.image.file.name)
                new_image = StringIO.StringIO()
                bake(image_file=self.cached_badgeclass.image.file,
                     assertion_json_string=json_dumps(self.get_json(obi_version=UNVERSIONED_BAKED_VERSION), indent=2),
                     output_file=new_image)
                self.image.save(name='assertion-{id}{ext}'.format(id=self.entity_id, ext=ext),
                                content=ContentFile(new_image.read()),
                                save=False)

            try:
                from badgeuser.models import CachedEmailAddress
                existing_email = CachedEmailAddress.cached.get(email=self.recipient_identifier)
                if self.recipient_identifier != existing_email.email and \
                        self.recipient_identifier not in [e.email for e in existing_email.cached_variants()]:
                    existing_email.add_variant(self.recipient_identifier)
            except CachedEmailAddress.DoesNotExist:
                pass

        if self.revoked is False:
            self.revocation_reason = None

        super(BadgeInstance, self).save(*args, **kwargs)
Ejemplo n.º 2
0
    def save(self, *args, **kwargs):
        if self.pk is None:
            self.salt = uuid.uuid4().hex
            self.created_at = datetime.datetime.now()

            # do this now instead of in AbstractVersionedEntity.save() so we can use it for image name
            if self.entity_id is None:
                self.entity_id = generate_entity_uri()

            if not self.image:
                badgeclass_name, ext = os.path.splitext(self.badgeclass.image.file.name)
                new_image = StringIO.StringIO()
                bake(image_file=self.cached_badgeclass.image.file,
                     assertion_json_string=json_dumps(self.get_json(obi_version=UNVERSIONED_BAKED_VERSION), indent=2),
                     output_file=new_image)
                self.image.save(name='assertion-{id}{ext}'.format(id=self.entity_id, ext=ext),
                                content=ContentFile(new_image.read()),
                                save=False)

            try:
                from badgeuser.models import CachedEmailAddress
                existing_email = CachedEmailAddress.cached.get(email=self.recipient_identifier)
                if self.recipient_identifier != existing_email.email and \
                        self.recipient_identifier not in [e.email for e in existing_email.cached_variants()]:
                    existing_email.add_variant(self.recipient_identifier)
            except CachedEmailAddress.DoesNotExist:
                pass

        if self.revoked is False:
            self.revocation_reason = None

        super(BadgeInstance, self).save(*args, **kwargs)
def create_group_identity_ranks(apps, schema_editor):
    # We can't import the Person model directly as it may be a newer
    # version than this migration expects. We use the historical version.
    Group = apps.get_model('auth', 'Group')
    GroupEntity = apps.get_model('badgeuser', 'GroupEntity')
    for group in Group.objects.all():
        group_entity = GroupEntity()
        group_entity.group = group
        group_entity.entity_id = generate_entity_uri()
        group_entity.save()
Ejemplo n.º 4
0
def migrate_localbadgeinstance_badgeinstance(apps, schema_editor):
    LocalBadgeInstance = apps.get_model('composition', 'LocalBadgeInstance')
    BadgeInstance = apps.get_model('issuer', 'BadgeInstance')
    CompositionCollection = apps.get_model('composition', 'Collection')
    BackpackCollection = apps.get_model('backpack', 'BackpackCollection')
    BackpackCollectionBadgeInstance = apps.get_model('backpack', 'BackpackCollectionBadgeInstance')
    BackpackBadgeShare = apps.get_model('backpack', 'BackpackBadgeShare')
    BackpackCollectionShare = apps.get_model('backpack', 'BackpackCollectionShare')

    # index composition.localbageinstance.pk -> new issuer.badgeinstance
    _localbadgeinstance_idx = {}

    # copy LocalBadgeInstances into BadgeInstance
    for localbadgeinstance in LocalBadgeInstance.objects.all():
        if not localbadgeinstance.issuer_badgeclass_id:
            continue

        assertion_source = 'composition.localbadgeinstance'
        assertion_original_url = localbadgeinstance.json.get('id')
        try:
            badgeinstance = BadgeInstance.objects.get(
                source=assertion_source,
                source_url=assertion_original_url,
            )
        except BadgeInstance.DoesNotExist:
            badgeinstance = BadgeInstance.objects.create(
                source=assertion_source,
                source_url=assertion_original_url,
                entity_id=generate_entity_uri(),
                created_at=localbadgeinstance.created_at,
                created_by=localbadgeinstance.created_by,
                badgeclass=localbadgeinstance.issuer_badgeclass,
                issuer=localbadgeinstance.issuer_badgeclass.issuer,
                recipient_identifier=localbadgeinstance.recipient_identifier,
                image=localbadgeinstance.image,
                slug=localbadgeinstance.slug,
                revoked=localbadgeinstance.revoked,
                revocation_reason=localbadgeinstance.revocation_reason
            )
        _localbadgeinstance_idx[localbadgeinstance.id] = badgeinstance

        # copy any badge shares over
        for localbadgeinstance_share in localbadgeinstance.localbadgeinstanceshare_set.all():
            backpack_badge_share, created = BackpackBadgeShare.objects.get_or_create(
                badgeinstance=badgeinstance,
                provider=localbadgeinstance_share.provider,
                created_at=localbadgeinstance_share.created_at,
                defaults=dict(
                    updated_at=localbadgeinstance_share.updated_at,
                )
            )

    # make new backpack collections
    for composition_collection in CompositionCollection.objects.all():
        backpack_collection, created = BackpackCollection.objects.get_or_create(
            created_by=composition_collection.owner,
            slug=composition_collection.slug,
            defaults=dict(
                entity_id=generate_entity_uri(),
                name=composition_collection.name,
                description=composition_collection.description,
                share_hash=composition_collection.share_hash,
            )
        )

        # copy any collection shares over
        for composition_collection_share in composition_collection.collectionshare_set.all():
            backpack_collection_share, created = BackpackCollectionShare.objects.get_or_create(
                collection=backpack_collection,
                provider=composition_collection_share.provider,
                created_at=composition_collection_share.created_at,
                defaults=dict(
                    updated_at=composition_collection_share.updated_at,
                )
            )

        # copy any badges in the collection over
        for composition_collect in composition_collection.badges.all():
            if composition_collect.issuer_instance:
                badgeinstance = composition_collect.issuer_instance
            else:
                badgeinstance = _localbadgeinstance_idx[composition_collect.instance_id]

            backpack_collect, created = BackpackCollectionBadgeInstance.objects.get_or_create(
                collection=backpack_collection,
                badgeinstance=badgeinstance
            )
Ejemplo n.º 5
0
 def generate_ids(self, apps, schema_editor):
     model_cls = apps.get_model(self.app_label, self.model_name)
     for obj in model_cls.objects.all():
         if obj.entity_id is None:
             obj.entity_id = generate_entity_uri()
             obj.save(force_update=True)
Ejemplo n.º 6
0
def generate_entity_id(sender, instance, **kwargs):
    try:
        instance.entity_rank
    except ObjectDoesNotExist:
        GroupEntity.objects.create(group=instance, entity_id=generate_entity_uri())
Ejemplo n.º 7
0
 def save(self, *args, **kwargs):
     if self.entity_id is None:
         self.entity_id = generate_entity_uri()
     return super(BaseEntity, self).save(*args, **kwargs)
Ejemplo n.º 8
0
    def save(self, *args, **kwargs):
        if self.entity_id is None:
            self.entity_id = generate_entity_uri()

        self.entity_version += 1
        return super(_AbstractVersionedEntity, self).save(*args, **kwargs)
Ejemplo n.º 9
0
 def generate_ids(self, apps, schema_editor):
     model_cls = apps.get_model(self.app_label, self.model_name)
     for obj in model_cls.objects.all():
         if obj.entity_id is None:
             obj.entity_id = generate_entity_uri()
             obj.save(force_update=True)
Ejemplo n.º 10
0
    def save(self, *args, **kwargs):
        if self.entity_id is None:
            self.entity_id = generate_entity_uri()

        self.entity_version += 1
        return super(_AbstractVersionedEntity, self).save(*args, **kwargs)