Ejemplo n.º 1
0
    def db_add_manifest(manifest_url, doc_id):
        """
        Fill the image & image_url tables with every image in the given manifest
        """
        manifest_data = urlopen(manifest_url).read()
        data = json_loads(manifest_data)

        if data['@context'] == "http://iiif.io/api/presentation/3/context.json":
            print('IIIF Presentation v3 detected')

            with app.app_context():
                from app import db

                for canvas_idx, canvas in enumerate(data["items"]):
                    for img_idx, anno_page in enumerate(canvas["items"]):
                        image_url = anno_page["items"][0]["body"]["id"]

                        new_image = Image(manifest_url=manifest_url,
                                          canvas_idx=canvas_idx,
                                          img_idx=img_idx,
                                          doc_id=doc_id)
                        new_image_url = ImageUrl(manifest_url=manifest_url,
                                                 canvas_idx=canvas_idx,
                                                 img_idx=img_idx,
                                                 img_url=image_url)

                        db.session.add(new_image)
                        db.session.add(new_image_url)
                        db.session.flush()
                        print('Adding new image:', new_image.serialize())
                        print('Adding new image_url:',
                              new_image_url.serialize())

                db.session.commit()

        elif data[
                '@context'] == "http://iiif.io/api/presentation/2/context.json":
            print('IIIF Presentation v2 detected')
            with app.app_context():
                from app import db

                for canvas_idx, canvas in enumerate(
                        data["sequences"][0]["canvases"]):
                    for img_idx, image in enumerate(canvas["images"]):
                        image_url = image["resource"]["@id"]

                        new_image = Image(manifest_url=manifest_url,
                                          canvas_idx=canvas_idx,
                                          img_idx=img_idx,
                                          doc_id=doc_id)
                        new_image_url = ImageUrl(manifest_url=manifest_url,
                                                 canvas_idx=canvas_idx,
                                                 img_idx=img_idx,
                                                 img_url=image_url)

                        db.session.add(new_image)
                        db.session.add(new_image_url)
                        db.session.flush()
                        print('Adding new image:')
                        pprint.pprint(new_image.serialize())
                        print('Adding new image_url:')
                        pprint.pprint(new_image_url.serialize())

                db.session.commit()
        else:
            print('@context not supported:', data['@context'])
            return