aboutsummaryrefslogtreecommitdiffstats
path: root/python/fatcat/api_client.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/fatcat/api_client.py')
-rw-r--r--python/fatcat/api_client.py88
1 files changed, 51 insertions, 37 deletions
diff --git a/python/fatcat/api_client.py b/python/fatcat/api_client.py
index f2fd6a1d..6497e977 100644
--- a/python/fatcat/api_client.py
+++ b/python/fatcat/api_client.py
@@ -12,19 +12,28 @@ class FatCatApiClient:
self._issn_map = dict()
def get(self, path, data=None):
- headers = {"content-type": "application/json"}
- return self.session.get(self.host_url + path, json=data,
+ headers = {"Content-Type": "application/json"}
+ rv = self.session.get(self.host_url + path, params=data,
headers=headers)
+ #if rv.status_code not in [200, 201]:
+ # print(rv)
+ # print(rv.content)
+ return rv
def post(self, path, data=None):
- headers = {"content-type": "application/json"}
- return self.session.post(self.host_url + path, json=data,
+ headers = {"Content-Type": "application/json"}
+ rv = self.session.post(self.host_url + path, json=data,
headers=headers)
+ if rv.status_code not in [200, 201]:
+ #print(rv)
+ #print(rv.content)
+ pass
+ return rv
def new_editgroup(self):
rv = self.post('/v0/editgroup', data=dict(
- editor=1))
- assert rv.status_code == 200
+ editor_id=1))
+ assert rv.status_code in [200, 201]
editgroup_id = rv.json()['id']
return editgroup_id
@@ -39,8 +48,8 @@ class FatCatApiClient:
return self._issn_map[issn]
rv = self.get('/v0/container/lookup', data=dict(issn=issn))
container_id = None
- if rv.status_code == 200:
- container_id = rv.json()['id']
+ if rv.status_code in [200, 201]:
+ container_id = rv.json().get('ident', rv.json().get('id'))
else:
# only other valid response is a 404; otherwise we had an error
assert rv.status_code == 404
@@ -50,24 +59,28 @@ class FatCatApiClient:
def import_crossref_file(self, json_file, create_containers=False, batchsize=100):
eg = self.new_editgroup()
i = 0
- with open(json_file, 'r') as file:
- for line in file:
- if i % batchsize == 0:
- sys.stdout.write('\n{}: '.format(i))
- if (i+1) % 20 == 0:
- sys.stdout.write('.')
- i = i + 1
- obj = json.loads(line)
- if not ("author" in obj and "title" in obj):
- continue
- try:
- self.import_crossref_dict(obj, editgroup=eg,
- create_containers=create_containers)
- except Exception as e:
- print("ERROR: {}".format(e))
- if i % batchsize == 0:
- self.accept_editgroup(eg)
- eg = self.new_editgroup()
+ if json_file == "-":
+ stream = sys.stdin
+ else:
+ stream = open(json_file, 'r')
+ for line in stream:
+ if i % batchsize == 0:
+ sys.stdout.write('\n{}: '.format(i))
+ if (i+1) % 20 == 0:
+ sys.stdout.write('.')
+ i = i + 1
+ obj = json.loads(line)
+ if not ("author" in obj and "title" in obj):
+ continue
+ try:
+ self.import_crossref_dict(obj, editgroup=eg,
+ create_containers=create_containers)
+ except Exception as e:
+ print("CROSSREF IMPORT ERROR: {}".format(e))
+ #raise e
+ if i % batchsize == 0:
+ self.accept_editgroup(eg)
+ eg = self.new_editgroup()
if i % batchsize != 0:
self.accept_editgroup(eg)
print("done!")
@@ -89,7 +102,7 @@ class FatCatApiClient:
container = dict(
issn=issn,
name=meta['container-title'][0],
- container=container_id,
+ container_id=container_id,
#sortname=meta['short-container-title'][0])
publisher=meta['publisher'])
@@ -97,10 +110,10 @@ class FatCatApiClient:
rv = self.post('/v0/container', data=dict(
issn=container['issn'],
publisher=container['publisher']))
- assert rv.status_code == 200
- container_id = rv.json()['id']
+ assert rv.status_code in [200, 201]
+ container_id = rv.json().get('ident', rv.json().get('id'))
print("created container: {}".format(issn))
- container['id'] = container_id
+ container['ident'] = container_id
self._issn_map[issn] = container_id
# references
@@ -116,9 +129,10 @@ class FatCatApiClient:
# work and release
title = meta['title'][0]
rv = self.post('/v0/work',
- data=dict(title=title, editgroup=editgroup)) #work_type="book"
- assert rv.status_code == 200
- work_id = rv.json()['id']
+ data=dict(title=title, editgroup_id=editgroup)) #work_type="book"
+ assert rv.status_code in [200, 201]
+ #print(rv.json())
+ work_id = rv.json().get('ident', rv.json().get('id'))
extra = dict(crossref={
'links': meta.get('link', []),
@@ -128,7 +142,7 @@ class FatCatApiClient:
rv = self.post('/v0/release', data=dict(
title=title,
- work=work_id,
+ work_id=work_id,
# XXX: creators=creators,
# XXX: refs=refs,
# XXX: container=container_id,
@@ -139,10 +153,10 @@ class FatCatApiClient:
issue=meta.get('issue', None),
volume=meta.get('volume', None),
pages=meta.get('page', None),
- editgroup=editgroup,
+ editgroup_id=editgroup,
extra=extra))
- assert rv.status_code == 200
- release_id = rv.json()['id']
+ assert rv.status_code in [200, 201]
+ release_id = rv.json().get('ident', rv.json().get('id'))
def import_issn_file(self, json_file, create_containers=False, batchsize=100):
eg = self.new_editgroup()