示例#1
0
    def import_course_data(self, json_file, course):
        raw_data = open(json_file)
        json_data = json.load(raw_data)

        for asset_data in json_data['asset_set']:
            # Create asset
            author = User.objects.get(
                username=asset_data["author"]["username"])
            asset = Asset(author=author,
                          title=asset_data["title"],
                          course=course)

            asset.metadata_blob = asset_data["metadata_blob"]
            asset.save()

            # Add sources
            for key, value in asset_data["sources"].items():
                source_data = asset_data["sources"][key]
                source = Source(asset=asset,
                                label=source_data["label"],
                                url=source_data["url"],
                                primary=source_data["primary"],
                                media_type=source_data["media_type"],
                                size=source_data["size"],
                                height=source_data["height"],
                                width=source_data["width"])
                source.save()

            # Recreate annotations
            for ann_data in asset_data["annotations"]:
                ann_author = User.objects.get(
                    username=ann_data["author"]["username"])
                if ann_data["is_global_annotation"]:
                    ann = asset.global_annotation(ann_author, True)
                else:
                    ann = SherdNote(asset=asset,
                                    author=ann_author)

                ann.range1 = ann_data["range1"]
                ann.range2 = ann_data["range2"]
                ann.annotation_data = ann_data["annotation_data"]
                ann.title = ann_data["title"]

                tags = ""
                for tag in ann_data["metadata"]["tags"]:
                    tags = tags + "," + tag["name"]
                ann.tags = tags
                ann.body = ann_data["metadata"]["body"]
                ann.save()