in gnm_deliverables/management/commands/import_master_migration_data.py [0:0]
def handle(self, *args, **options):
commissions_table = self.load_commissions_table(options["commissions"])
logger.info("Loaded {} project->commission relations from {}".format(len(commissions_table), options["commissions"]))
content = self.load_content(options["path"])
logger.info("Loaded {} items from {}".format(len(content), options["path"]))
for entry in content:
parent_project_id = entry["deliverable"]
del entry["deliverable"]
#remove blank entries from some fields - e.g. date-time and uuids, things that need parsing.
#go returns a blank when we actually want a null
for name in ["access_dt", "modified_dt", "changed_dt", "job_id", "ingest_complete_dt", "atom_id"]:
if name in entry and (entry[name]=="" or entry[name]=="None"):
del entry[name]
# project_id = models.CharField(null=True, blank=True, max_length=61)
# commission_id = models.BigIntegerField(null=False, blank=False, db_index=True)
# pluto_core_project_id = models.BigIntegerField(null=False, blank=False, db_index=True, unique=True)
# name = models.CharField(null=False, blank=False, unique=True, max_length=255)
# created = models.DateTimeField(null=False, blank=False, auto_now_add=True)
parent_deliverable_bundle, parent_bundle_created = self.get_parent_bundle(parent_project_id, commissions_table)
if parent_bundle_created:
logger.info("created new parent bundle for project id {}".format(parent_project_id))
parent_deliverable_bundle.save()
else:
logger.info("using existing bundle {}".format(parent_deliverable_bundle.id))
if "gnm_website_master" in entry and entry["gnm_website_master"] is not None:
if entry["gnm_website_master"].get("media_atom_id")=="" or entry["gnm_website_master"].get("media_atom_id")=="None":
del entry["gnm_website_master"]["media_atom_id"]
for name in ["publication_date", "etag"]:
if entry["gnm_website_master"].get(name) == "":
del entry["gnm_website_master"][name]
entry["gnm_website_master"] = GNMWebsite(**entry["gnm_website_master"])
entry["gnm_website_master"].save()
else:
entry["gnm_website_master"] = None
if "youtube_master" in entry and entry["youtube_master"] is not None:
for name in ["publication_date", "etag"]:
if entry["youtube_master"].get(name) == "":
del entry["youtube_master"][name]
if "youtube_categories" in entry["youtube_master"]:
entry["youtube_master"]["youtube_categories"] = Command.numbers_only_list(entry["youtube_master"]["youtube_categories"])
entry["youtube_master"] = Youtube(**entry["youtube_master"])
entry["youtube_master"].save()
else:
entry["youtube_master"] = None
if "mainstream_master" in entry and entry["mainstream_master"] is not None:
for name in ["publication_date", "etag"]:
if entry["mainstream_master"].get(name) == "":
del entry["mainstream_master"][name]
entry["mainstream_master"] = Mainstream(**entry["mainstream_master"])
entry["mainstream_master"].save()
else:
entry["mainstream_master"] = None
if "DailyMotion_master" in entry and entry["DailyMotion_master"] is not None:
for name in ["publication_date", "etag"]:
if entry["DailyMotion_master"].get(name) == "":
del entry["DailyMotion_master"][name]
entry["DailyMotion_master"] = DailyMotion(**entry["DailyMotion_master"])
entry["DailyMotion_master"].save()
else:
entry["DailyMotion_master"] = None
newrec = DeliverableAsset(**entry)
legacy_item_id = newrec.online_item_id
#check for existing items
existing_item_check = DeliverableAsset.objects.filter(absolute_path=newrec.absolute_path, size=newrec.size,filename=newrec.filename).count()
if existing_item_check>0:
logger.info("Legacy item {} already exists with {} copies, not duplicating".format(legacy_item_id, existing_item_check))
continue
newrec.online_item_id = None
newrec.deliverable = parent_deliverable_bundle
newrec.save()
logger.info("Legacy item {} imported to {}".format(legacy_item_id, newrec.pk))