def image_info(identifier): """ Return the info.json, with the correct HTTP status code, and decorated with the right auth services Handle CORS explicitly for clarity """ print("METHOD:", request.method) if request.method == 'OPTIONS': print('CORS preflight request for', identifier) return preflight() print('info.json request for', identifier) policy = AUTH_POLICY[identifier] uri = "%simg/%s" % (request.url_root, identifier) info = web.info(uri, resolve(identifier)) decorate_info(info, policy, identifier) if authorise_info_request(identifier): resp = make_acao_response(jsonify(info), 200) if not policy.get('open'): resp.headers[ 'Cache-Control'] = 'no-cache, no-store, must-revalidate' return resp print('The user is not authed for this resource') degraded_version = policy.get('degraded', None) if degraded_version: redirect_to = "%simg/%s/info.json" % (request.url_root, degraded_version) print('a degraded version is available at', redirect_to) return make_acao_response(redirect(redirect_to, code=302)) return make_acao_response(jsonify(info), 401)
def info(identifier): try: path, mediatype = ia_resolver(identifier) except ValueError: abort(404) try: domain = '%siiif/%s' % (request.url_root, identifier) info = web.info(domain, path) return ldjsonify(info) except: abort(400) # , "Invalid item, may actually be collection")
def view(identifier): domain = request.args.get('domain', request.url_root) uri = '%s%s' % (domain, identifier) try: path, mediatype = ia_resolver(identifier) except ValueError: abort(404) if mediatype == 'image' or '$' in identifier: return render_template('viewer.html', domain=domain, info=web.info(uri, path)) return render_template('reader.html', domain=request.base_url)
def info(identifier): try: path, mediatype = ia_resolver(identifier) except ValueError: abort(404) try: domain = '%s%s' % (purify_domain(request.url_root), identifier) info = web.info(domain, path) return ldjsonify(info) except: abort(400) # , "Invalid item, may actually be collection")
def view(identifier): domain = purify_domain(request.args.get('domain', request.url_root)) uri = '%s%s' % (domain, identifier) page = request.args.get('page', None) citation = request.args.get('citation', None) try: path, mediatype = ia_resolver(identifier) except ValueError: abort(404) if mediatype == 'image' or '$' in identifier: return render_template('viewer.html', domain=domain, info=web.info(uri, path)) return render_template('reader.html', domain=request.base_url, page=page, citation=citation)
def create_manifest(identifier, domain=None): manifest = { '@context': CONTEXT, '@id': '%s%s/manifest.json' % (domain, identifier), '@type': 'sc:Manifest', 'logo': 'http://tinyurl.com/ou7efql', 'sequences': [ { '@id': '%s%s/canvas/default' % (domain, identifier), '@type': 'sc:Sequence', '@context': CONTEXT, 'label': 'default', 'canvases': [] } ], 'viewingHint': 'paged', } path = os.path.join(media_root, identifier) metadata = requests.get('%s/metadata/%s' % (ARCHIVE, identifier)).json() mediatype = metadata['metadata']['mediatype'] manifest['label'] = metadata['metadata']['title'] if mediatype.lower() == 'image': path, mediatype = ia_resolver(identifier) info = web.info(domain, path) manifest['sequences'][0]['canvases'].append( manifest_page( identifier="%s%s" % (domain, identifier), label=metadata['metadata']['title'], width=info['width'], height=info['height'] ) ) elif mediatype.lower() == 'texts': subPrefix = metadata['dir'] server = metadata.get('server', ARCHIVE) r = requests.get(bookdata % server, params={ 'server': server, 'itemPath': subPrefix, 'itemId': identifier }) data = r.json() manifest.update({ 'label': data['title'], 'thumbnail': { '@id': data['previewImage'] }, }) for page in range(1, len(data.get('leafNums', []))): manifest['sequences'][0]['canvases'].append( manifest_page( identifier = "%s%s$%s" % (domain, identifier, page), label=data['pageNums'][page], width=data['pageWidths'][page], height=data['pageHeights'][page] ) ) return manifest
def create_manifest(identifier, domain=None): manifest = { '@context': CONTEXT, '@id': '%s%s/manifest.json' % (domain, identifier), '@type': 'sc:Manifest', 'logo': 'http://tinyurl.com/ou7efql', 'sequences': [ { '@id': '%s%s/canvas/default' % (domain, identifier), '@type': 'sc:Sequence', '@context': CONTEXT, 'label': 'default', 'canvases': [] } ], 'viewingHint': 'paged', 'attribution': "The Internet Archive", 'seeAlso': '%s/metadata/%s' % (ARCHIVE, identifier) } path = os.path.join(media_root, identifier) resp = requests.get('%s/metadata/%s' % (ARCHIVE, identifier)).json() metadata = resp.get("metadata", {}) mediatype = metadata.get("mediatype") if 'title' in metadata: manifest['label'] = metadata['title'] if 'identifier-access' in metadata: manifest['related'] = metadata['identifier-access'] if 'description' in metadata: manifest['description'] = coerce_list(metadata['description']) manifest['metadata'] = [{"label": field, "value": coerce_list(metadata[field])} for field in METADATA_FIELDS if metadata.get(field)] if mediatype.lower() == 'image': path, mediatype = ia_resolver(identifier) info = web.info(domain, path) manifest['sequences'][0]['canvases'].append( manifest_page( identifier="%s%s" % (domain, identifier), label=metadata['title'], width=info['width'], height=info['height'] ) ) elif mediatype.lower() == 'texts': subPrefix = resp['dir'] server = resp.get('server', ARCHIVE) r = requests.get(bookdata % server, params={ 'server': server, 'itemPath': subPrefix, 'itemId': identifier }) data = r.json() manifest.update({ 'label': data['title'], 'thumbnail': { '@id': data['previewImage'] }, }) for page in range(1, len(data.get('leafNums', []))): manifest['sequences'][0]['canvases'].append( manifest_page( identifier = "%s%s$%s" % (domain, identifier, page), label=data['pageNums'][page], width=data['pageWidths'][page], height=data['pageHeights'][page] ) ) return manifest
def create_manifest(identifier, domain=None): manifest = { "@context": CONTEXT, "@id": "%s%s/manifest.json" % (domain, identifier), "@type": "sc:Manifest", "logo": "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcReMN4l9cgu_qb1OwflFeyfHcjp8aUfVNSJ9ynk2IfuHwW1I4mDSw", "sequences": [ { "@id": "%s%s/canvas/default" % (domain, identifier), "@type": "sc:Sequence", "@context": CONTEXT, "label": "default", "canvases": [], } ], "viewingHint": "paged", "attribution": "The Internet Archive", "seeAlso": "%s/metadata/%s" % (ARCHIVE, identifier), } path = os.path.join(media_root, identifier) resp = requests.get("%s/metadata/%s" % (ARCHIVE, identifier)).json() metadata = resp.get("metadata", {}) mediatype = metadata.get("mediatype") if "title" in metadata: manifest["label"] = metadata["title"] if "identifier-access" in metadata: manifest["related"] = metadata["identifier-access"] if "description" in metadata: manifest["description"] = coerce_list(metadata["description"]) manifest["metadata"] = [ {"label": field, "value": coerce_list(metadata[field])} for field in METADATA_FIELDS if metadata.get(field) ] if mediatype.lower() == "image": path, mediatype = ia_resolver(identifier) info = web.info(domain, path) manifest["sequences"][0]["canvases"].append( manifest_page( identifier="%s%s" % (domain, identifier), label=metadata["title"], width=info["width"], height=info["height"], ) ) elif mediatype.lower() == "texts": subPrefix = resp["dir"] server = resp.get("server", ARCHIVE) # XXX Use https://api.archivelab.org/books/:id/metadata API r = requests.get(bookdata % server, params={"server": server, "itemPath": subPrefix, "itemId": identifier}) data = r.json() manifest.update({"label": data["title"], "thumbnail": {"@id": data["previewImage"]}}) for page in range(1, len(data.get("leafNums", []))): manifest["sequences"][0]["canvases"].append( manifest_page( identifier="%s%s$%s" % (domain, identifier, page), label=data["pageNums"][page], width=data["pageWidths"][page], height=data["pageHeights"][page], ) ) return manifest
def create_manifest(identifier, domain=None, page=None): path = os.path.join(media_root, identifier) resp = requests.get('%s/metadata/%s' % (ARCHIVE, identifier)).json() metadata = resp.get("metadata", {}) manifest = { '@context': PRZ_CTX, '@id': '%s%s/manifest.json' % (domain, identifier), '@type': 'sc:Manifest', 'description': metadata.get('description', ''), 'logo': 'https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcReMN4l9cgu_qb1OwflFeyfHcjp8aUfVNSJ9ynk2IfuHwW1I4mDSw', 'sequences': [{ '@id': '%s%s/canvas/default' % (domain, identifier), '@type': 'sc:Sequence', '@context': IMG_CTX, 'label': 'default', 'canvases': [] }], 'viewingHint': 'paged', 'attribution': "The Internet Archive", 'seeAlso': '%s/metadata/%s' % (ARCHIVE, identifier) } mediatype = metadata.get("mediatype") if 'title' in metadata: manifest['label'] = metadata['title'] if 'identifier-access' in metadata: manifest['related'] = metadata['identifier-access'] if 'description' in metadata: manifest['description'] = coerce_list(metadata['description']) manifest['metadata'] = [{ "label": field, "value": coerce_list(metadata[field]) } for field in METADATA_FIELDS if metadata.get(field)] if page and mediatype is None: mediatype = 'image' if "$" not in identifier: filepath = None else: identifier, filepath = identifier.split("$", 1) filepath = filepath.replace("$", os.sep) if mediatype.lower() == 'image' or (filepath and mediatype.lower() != 'texts'): path, mediatype = ia_resolver(identifier) info = web.info(domain, path) manifest['sequences'][0]['canvases'].append( manifest_page(identifier="%s%s" % (domain, identifier), label=metadata['title'], width=info['width'], height=info['height'], metadata=metadata)) elif mediatype.lower() == 'texts': subPrefix = resp['dir'] server = resp.get('server', ARCHIVE) # XXX Use https://api.archivelab.org/books/:id/metadata API r = requests.get(bookdata % server, params={ 'server': server, 'itemPath': subPrefix, 'itemId': identifier }) data = r.json() manifest.update({ 'label': data['title'], 'thumbnail': { '@id': data['previewImage'] }, }) if page: manifest['sequences'][0]['canvases'].append( manifest_page(identifier="%s%s$%s" % (domain, identifier, page), label=data['pageNums'][page], width=data['pageWidths'][page], height=data['pageHeights'][page])) return manifest for page in range(0, len(data.get('leafNums', []))): manifest['sequences'][0]['canvases'].append( manifest_page(identifier="%s%s$%s" % (domain, identifier, page), label=data['pageNums'][page], width=data['pageWidths'][page], height=data['pageHeights'][page])) return manifest
def view(identifier, quality="default", fmt="jpg"): uri = '%s%s' % (request.url_root, identifier) return render_template('viewer.html', info=web.info(uri, resolve(identifier)))
def image_info(identifier): try: uri = "%s%s" % (request.url_root, identifier) return jsonify(web.info(uri, resolve(identifier))) except: abort(400)
def info(identifier): """get info about the image and return a json blob. Need to drop URL root in""" return jsonify( web.info("%s%s" % (request.url_root, identifier), resolve(identifier)))
def info(identifier): return jsonify(web.info(request.url, resolve(identifier), identifier))