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()
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 )
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)
def generate_entity_id(sender, instance, **kwargs): try: instance.entity_rank except ObjectDoesNotExist: GroupEntity.objects.create(group=instance, entity_id=generate_entity_uri())
def save(self, *args, **kwargs): if self.entity_id is None: self.entity_id = generate_entity_uri() return super(BaseEntity, self).save(*args, **kwargs)
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)