Skip to content

Commit 061a632

Browse files
committed
API updates
1 parent f654b4d commit 061a632

File tree

6 files changed

+41
-50
lines changed

6 files changed

+41
-50
lines changed

asaps/cli.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,20 @@
4646

4747

4848
@click.group()
49-
@click.option("--url", envvar="ARCHIVESSPACE_URL")
49+
@click.option("--url", envvar="AS_BASEURL")
5050
@click.option(
51-
"-u", "--username", prompt="Enter username", help="The username for authentication."
51+
"-u",
52+
"--username",
53+
prompt="Enter username",
54+
envvar="AS_USERNAME",
55+
help="The username for authentication.",
5256
)
5357
@click.option(
5458
"-p",
5559
"--password",
5660
prompt="Enter password",
5761
hide_input=True,
58-
envvar="DOCKER_PASS",
62+
envvar="AS_PASSWORD",
5963
help="The password for authentication.",
6064
)
6165
@click.pass_context
@@ -164,7 +168,7 @@ def find(ctx, dry_run, repo_id, rec_type, field, search, rpl_value):
164168
skipped_arch_objs = []
165169
if rec_type == "archival_object":
166170
for uri in skipped_resources:
167-
arch_obj_list = as_ops.get_arch_objs_for_resource(uri)
171+
arch_obj_list = as_ops.get_archival_objects_for_resource(uri)
168172
skipped_arch_objs.append(arch_obj_list)
169173
skipped_uris = skipped_resources + skipped_arch_objs
170174
for uri in as_ops.search(search, repo_id, rec_type, field):

asaps/models.py

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@ def get_all_records(self, endpoint):
2222
ids = self.client.get(f"{endpoint}?all_ids=true").json()
2323
return ids
2424

25-
def get_arch_objs_for_resource(self, uri):
25+
def get_archival_objects_for_resource(self, uri):
2626
"""Get archival objects associated with a resource."""
2727
logger.info(f"Retrieving AOs for {uri}")
28-
arch_obj_list = []
29-
output = self.client.get(f"{uri}/tree").json()
30-
for arch_obj_uri in find_key(output, "record_uri"):
31-
if "archival_objects" in arch_obj_uri:
32-
arch_obj_list.append(arch_obj_uri)
33-
return arch_obj_list
28+
ordered_records = self.client.get(f"{uri}/ordered_records").json()
29+
return [
30+
record["ref"] for record in ordered_records["uris"] if record["depth"] > 0
31+
]
3432

3533
def get_record(self, uri):
3634
"""Retrieve an individual record."""
@@ -213,16 +211,6 @@ def filter_note_type(rec_obj, note_type):
213211
return (n for n in rec_obj["notes"] if n.get("type") == note_type)
214212

215213

216-
def find_key(nest_dict, key):
217-
"""Find all instances of a key in a nested dictionary."""
218-
if key in nest_dict:
219-
yield nest_dict[key]
220-
children = nest_dict.get("children")
221-
if isinstance(children, list):
222-
for child in children:
223-
yield from find_key(child, key)
224-
225-
226214
def string_to_uri(agent_links, string, uri_dict, role, relator=""):
227215
"""Creates an agent link from a dict of URIs and labels."""
228216
uri_found = False

asaps/records.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ def link_dig_obj(arch_obj, dig_obj_uri):
169169
instance["instance_type"] = "digital_object"
170170
instance["jsonmodel_type"] = "instance"
171171
instance["digital_object"] = {"ref": dig_obj_uri}
172-
instance["is_representative"] = True
172+
instance["is_representative"] = False
173173
arch_obj["instances"].append(instance)
174174
return arch_obj
175175

@@ -202,7 +202,7 @@ def update_dig_obj_link(dig_obj, link):
202202
file_version = {}
203203
file_version["file_uri"] = link
204204
file_version["publish"] = True
205-
file_version["is_representative"] = True
205+
file_version["is_representative"] = False
206206
file_version["jsonmodel_type"] = "file_version"
207207
dig_obj["file_versions"] = [file_version]
208208
file_version["xlink_actuate_attribute"] = "onRequest"

asaps/workflows.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,21 @@
66
def export_metadata(client, resource, file_identifier, repo_id):
77
"""Export ArchivesSpace metadata as dicts for each archival object."""
88
resource_uri = f"/repositories/{repo_id}/resources/{resource}"
9-
arch_obj_list = client.get_arch_objs_for_resource(resource_uri)
10-
for uri in arch_obj_list:
11-
rec_obj = client.get_record(uri)
9+
archival_object_list = client.get_archival_objects_for_resource(resource_uri)
10+
for uri in archival_object_list:
11+
record_object = client.get_record(uri)
12+
if file_identifier == "uri":
13+
repo_id = record_object["uri"].replace("/repositories/", "")
14+
repo_id = repo_id[: repo_id.index("/archival_objects/")]
15+
rec_id_split = record_object["uri"].rindex("/archival_objects/")
16+
rec_id = record_object["uri"][rec_id_split + 18 :]
17+
file_identifier_value = f"{repo_id.zfill(2)}-{rec_id.zfill(9)}"
18+
else:
19+
file_identifier_value = record_object.get(file_identifier)
1220
report_dict = {
13-
"uri": rec_obj["uri"],
14-
"title": rec_obj["display_string"],
15-
"file_identifier": rec_obj.get(file_identifier),
21+
"uri": record_object["uri"],
22+
"title": record_object["display_string"],
23+
"file_identifier": file_identifier_value,
1624
}
1725
yield report_dict
1826

tests/conftest.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,19 @@ def as_mock():
3333
m.get("/repositories/0/resources/756", json=res_json_2)
3434
upd_json = {"post": "Success"}
3535
m.post("/repositories/0/resources/423", json=upd_json)
36-
tree_json = {
37-
"record_uri": "/repositories/0/archival_objects/1234",
38-
"children": [{"record_uri": "/repositories/0/archival_objects/5678"}],
36+
ordered_records_json = {
37+
"uris": [
38+
{"ref": "/repositories/0/resources/423", "depth": 0},
39+
{"ref": "/repositories/0/archival_objects/1234", "depth": 1},
40+
]
3941
}
40-
m.get("/repositories/2/resources/423/tree", json=tree_json)
42+
m.get(
43+
"/repositories/0/resources/423/ordered_records", json=ordered_records_json
44+
)
4145
crtd_json = {"status": "Created"}
4246
m.post("/repositories/0/resources", json=crtd_json)
4347
search_json = [{"uri": "/repositories/0/archival_objects/1234"}]
4448
m.get("/repositories/0/search?", json=search_json)
45-
tree_json = {"record_uri": "/repositories/0/archival_objects/1234"}
46-
m.get("/repositories/0/resources/423/tree", json=tree_json)
4749
ao_json = {
4850
"uri": "/repositories/0/archival_objects/1234",
4951
"ref_id": "a2b2c2",

tests/test_models.py

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,10 @@ def test_get_all_records(as_ops):
2525
assert ids == [423, 756]
2626

2727

28-
def test_get_arch_objs_for_resource(as_ops):
29-
"""Test get_arch_objs_for_resource method."""
30-
resource = "/repositories/2/resources/423"
31-
arch_obj_list = as_ops.get_arch_objs_for_resource(resource)
32-
assert "/repositories/0/archival_objects/5678" in arch_obj_list
28+
def test_get_archival_objects_for_resource(as_ops):
29+
"""Test get_archival_objects_for_resource method."""
30+
resource = "/repositories/0/resources/423"
31+
arch_obj_list = as_ops.get_archival_objects_for_resource(resource)
3332
assert "/repositories/0/archival_objects/1234" in arch_obj_list
3433

3534

@@ -196,16 +195,6 @@ def test_filter_note_type():
196195
assert note["note_type"] == "acqinfo"
197196

198197

199-
def test_find_key():
200-
"""Test find_key function."""
201-
nest_dict = {"children": [{"publish": True, "children": [{"publish": True}]}]}
202-
keys = models.find_key(nest_dict, "children")
203-
key_count = 0
204-
for key in keys:
205-
key_count += 1
206-
assert key_count == 2
207-
208-
209198
def test_string_to_uri():
210199
agent_links = []
211200
string = "Smith, N."

0 commit comments

Comments
 (0)