return edition_builder.get_dict() class importapi: def GET(self): return 'The Import API only supports POST requests.' def POST(self): web.header('Content-Type', 'application/json') if not can_write(): return json.dumps({'success': False, 'error': 'Permission Denied'}) data = web.data() edition = parse_data(data) #print edition #call Edward's code here with the edition dict if edition: reply = load(edition) return json.dumps(reply) else: return json.dumps({ 'success': False, 'error': 'Failed to parse Edition data' }) add_hook("import", importapi)
query = [query] web.ctx.site.save_many(query, comment=comment, action=action) except client.ClientException, e: raise BadRequest(str(e)) #graphite/statsd tracking of bot edits user = delegate.context.user and delegate.context.user.key if user.lower().endswith('bot'): botname = user.replace('/people/', '', 1) botname = botname.replace('.', '-') key = 'ol.edits.bots.'+botname openlibrary.core.stats.increment(key) return simplejson.dumps(keys) api and api.add_hook('new', new) @public def changequery(query=None, **kw): if query is None: query = web.input(_method='get', _unicode=False) for k, v in kw.iteritems(): if v is None: query.pop(k, None) else: query[k] = v query = dict((k, (map(web.safestr, v) if isinstance(v, list) else web.safestr(v))) for k, v in query.items()) out = web.ctx.get('readable_path', web.ctx.path) if query: out += '?' + urllib.urlencode(query, doseq=True)
if not isinstance(query, list): query = [query] web.ctx.site.save_many(query, comment=comment, action=action) except client.ClientException as e: raise BadRequest(str(e)) # graphite/statsd tracking of bot edits user = delegate.context.user and delegate.context.user.key if user.lower().endswith('bot'): botname = user.replace('/people/', '', 1) botname = botname.replace('.', '-') key = 'ol.edits.bots.'+botname openlibrary.core.stats.increment(key) return json.dumps(keys) api and api.add_hook('new', new) @public def changequery(query=None, **kw): if query is None: query = web.input(_method='get', _unicode=False) for k, v in kw.items(): if v is None: query.pop(k, None) else: query[k] = v query = dict( (k, (list(map(web.safestr, v)) if isinstance(v, list) else web.safestr(v))) for k, v in query.items()
self.error(i, "olid missing") key = '/books/' + i.olid book = web.ctx.site.get(key) if not book: raise self.error(i, "bad olid") try: auth_header = http_basic_auth() self.login(auth_header) except accounts.ClientException: raise self.auth_failed("Invalid credentials") from openlibrary.plugins.upstream import covers add_cover = covers.add_cover() data = add_cover.upload(key, i) coverid = data.get('id') if coverid: add_cover.save(book, coverid) raise self.success(i) else: raise self.error(i, "upload failed") add_hook("import", importapi) add_hook("ils_search", ils_search) add_hook("ils_cover_upload", ils_cover_upload) add_hook("import/ia", ia_importapi)
t2 = time.time() d['time_taken'] = t2-t1 return d class search_json(delegate.page): path = "/search" encoding = "json" @jsonapi def GET(self): i = web.input(q='', query=None, _unicode=False) # query can be either specified as json with parameter query or just query parameters query = i.pop('query') if query: query = simplejson.loads(i.query) else: query = i result = SearchProcessor().search(i) return simplejson.dumps(result) # add search API if api plugin is enabled. if 'api' in delegate.get_plugins(): from infogami.plugins.api import code as api api.add_hook('search', search_api) if __name__ == '__main__': import doctest doctest.testmod()
import re import urllib2 class books: def GET(self): i = web.input(bibkeys='', callback=None, details="false") web.ctx.headers = [] if i.get("format") == "json": web.header('Content-Type', 'application/json') else: web.header('Content-Type', 'text/javascript') return dynlinks.dynlinks(i.bibkeys.split(","), i) add_hook("books", books) class read_singleget(delegate.page): """Handle the single-lookup form of the Hathi-style API """ path = r"/api/volumes/(brief|full)/(oclc|lccn|issn|isbn|htid|olid|recordnumber)/(.+)" encoding = "json" @jsonapi def GET(self, brief_or_full, idtype, idval): i = web.input() web.ctx.headers = [] req = '%s:%s' % (idtype, idval) result = readlinks.readlinks(req, i) if req in result:
edition = read_edition(rec) edition_builder = import_edition_builder.import_edition_builder(init_dict=edition) parse_meta_headers(edition_builder) return edition_builder.get_dict() class importapi: def GET(self): return 'The Import API only supports POST requests.' def POST(self): web.header('Content-Type', 'application/json') if not can_write(): return json.dumps({'success':False, 'error':'Permission Denied'}) data = web.data() edition = parse_data(data) #print edition #call Edward's code here with the edition dict if edition: reply = load(edition) return json.dumps(reply) else: return json.dumps({'success':False, 'error':'Failed to parse Edition data'}) add_hook("import", importapi)
def setup(): from infogami.plugins.api import code as api api.add_hook('search', search_api)