def create(self, validated_data): validated_data_copy = dict(validated_data) del validated_data_copy['creators'] del validated_data_copy['subjects'] del validated_data_copy['keywords'] content = Content(**validated_data_copy) content = self.__create_update(content, None) content.creators.set(validated_data['creators']) content.subjects.set(validated_data['subjects']) content.keywords.set(validated_data['keywords']) content.active = validated_data['active'] return content
def upload_sheet_contents(self, sheet_contents): """ This method adds bulk content data from the Excel sheet uploaded :param sheet_contents: :return: success status """ unsuccessful_uploads = [] successful_uploads_count = 0 try: content_data = json.loads(sheet_contents.get("sheet_data")) main_path = sheet_contents.get("content_path") for each_content in content_data: # if the actual file is not uploaded, don't upload its metadata file_path = os.path.join(main_path, each_content.get("File Name")) if os.path.exists(file_path) is not True: unsuccessful_uploads.append({ 'file_name': each_content.get("File Name"), 'error': 'file does not exist' }) continue else: try: content = Content() content.title = each_content.get("Title") content.description = each_content.get("Description") content.copyright_notes = each_content.get( "Copyright Notes") content.reviewed_on = datetime.datetime.now() content.rights_statement = each_content.get( "Rights Statement") if each_content.get("Year Published"): try: content.published_date = datetime.date( each_content.get("Year Published"), 1, 1) except ValueError: content.published_date = None content.modified_on = timezone.now() content.additional_notes = each_content.get( "Additional Notes") content.active = True content.filesize = os.stat(file_path).st_size try: content.save() except Exception as e: raise Exception(str(e)) try: self.upload_content_file(file_path, content) except (Exception, ValidationError) as e: content.delete() raise e try: metadata = self.get_associated_meta(each_content) for metadata_item in metadata: obj, created = Metadata.objects.get_or_create( defaults={'name': metadata_item.name}, name__iexact=metadata_item.name, type_id=metadata_item.type.id) content.metadata.add(obj) content.save() successful_uploads_count = successful_uploads_count + 1 except Exception as e: content.delete() raise e except (Exception, ValidationError) as e: unsuccessful_uploads.append({ 'file_name': each_content.get("File Name"), 'error': str(e) }) continue data = { 'success_count': successful_uploads_count, 'unsuccessful_uploads': unsuccessful_uploads, } return data except Exception as e: data = { 'success': False, 'error': str(e), 'status': status.HTTP_500_INTERNAL_SERVER_ERROR } return data