Exemplo n.º 1
0
 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
Exemplo n.º 2
0
    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