Skip to content

Commit

Permalink
fixed network_visualisation issue with object locations
Browse files Browse the repository at this point in the history
  • Loading branch information
BernhardKoschicek committed Sep 13, 2024
1 parent 4c7e0c4 commit b9aeba5
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 27 deletions.
67 changes: 46 additions & 21 deletions openatlas/api/endpoints/special.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,39 +94,64 @@ class GetNetworkVisualisation(Resource):
def get() -> tuple[Resource, int] | Response | dict[str, Any]:
parser = Parser(network.parse_args())
system_classes = g.classes
if exclude := parser.exclude_system_classes:
system_classes = [s for s in system_classes if s not in exclude]
output: dict[str, Any] = defaultdict()
location_ids = []
location_classes = [
"administrative_unit",
"artifact",
"feature",
"human_remains",
"place",
"stratigraphic_unit"]
exclude_ = parser.exclude_system_classes or []
if exclude_:
if all(item in location_classes for item in exclude_):
exclude_ += ['object_location']
system_classes = [s for s in system_classes if s not in exclude_]
links = get_all_links_for_network(system_classes)

def overwrite_location_with_place() -> None:
locations = {}
for link_ in links:
if link_['property_code'] == 'P53':
locations[link_['range_id']] = {
'range_id': link_['domain_id'],
'range_name': link_['domain_name'],
'range_system_class': link_['domain_system_class']}

links_copy = links.copy()
for i, link_ in enumerate(links_copy):
if link_['range_id'] in locations:
links[i].update(
range_id=locations[link_['range_id']]['range_id'],
range_name=locations[link_['range_id']]['range_name'],
range_system_class=locations[
link_['range_id']]['range_system_class'])
if (link_['domain_id'] in locations
and "administrative_unit" not in exclude_):
links[i].update(
domain_id=locations[link_['domain_id']]['range_id'],
domain_name=locations[
link_['domain_id']]['range_name'],
domain_ystem_class=locations[
link_['domain_id']]['range_system_class'])


overwrite_location_with_place()
output: dict[str, Any] = defaultdict(set)
for item in links:
if output.get(item['domain_id']):
output[item['domain_id']]['relations'].append(item['range_id'])
output[item['domain_id']]['relations'].add(item['range_id'])
else:
output[item['domain_id']] = {
'label': item['domain_name'],
'systemClass': item['domain_system_class'],
'relations': [item['range_id']]}
'relations': {item['range_id']}}
if output.get(item['range_id']):
output[item['range_id']]['relations'].append(item['domain_id'])
output[item['range_id']]['relations'].add(item['domain_id'])
else:
output[item['range_id']] = {
'label': item['range_name'],
'systemClass': item['range_system_class'],
'relations': [item['domain_id']]}
if (item['property_code']
in ['P74', 'P7', 'P26', 'P27', 'OA8', 'OA9']):
location_ids.append(item['range_id'])

for link_ in links:
if (link_['property_code'] == 'P53'
and link_['range_id'] in location_ids):
output[link_['domain_id']] = {
'label': link_['domain_name'],
'systemClass': link_['domain_system_class'],
'relations':
output[link_['range_id']]['relations']
+ output[link_['domain_id']]['relations']}
'relations': {item['domain_id']}}

results: dict[str, Any] = {'results': []}
for id_, dict_ in output.items():
Expand Down
5 changes: 2 additions & 3 deletions openatlas/api/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"info": {
"title": "OpenAtlas API",
"description": "An API that allows user to access data from an OpenAtlas instance.",
"version": "0.4.4d",
"version": "0.4.4e",
"contact": {
"name": "OpenAtlas",
"url": "https://openatlas.eu",
Expand Down Expand Up @@ -2170,7 +2170,6 @@
"group",
"human_remains",
"move",
"object_location",
"person",
"place",
"production",
Expand All @@ -2179,7 +2178,7 @@
"source_translation",
"stratigraphic_unit",
"type",
"tools"
"type_tools"
]
}
}
Expand Down
27 changes: 26 additions & 1 deletion openatlas/api/resources/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,32 @@
type=str,
help="{error_msg}",
action='append',
location='args')
location='args',
choices=(
"acquisition",
"activity",
"administrative_unit",
"appellation",
"artifact",
"bibliography",
"creation",
"edition",
"event",
"external_reference",
"feature",
"file",
"group",
"human_remains",
"move",
"person",
"place",
"production",
"reference_system",
"source",
"source_translation",
"stratigraphic_unit",
"type",
"type_tools"))
network.add_argument(
'linked_to_ids',
type=int,
Expand Down
4 changes: 2 additions & 2 deletions tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ def test_api(self) -> None:
'api_04.network_visualisation',
exclude_system_classes='type'))
rv = rv.get_json()
assert bool(len(rv['results']) == 70)
assert bool(len(rv['results']) == 65)
rv = self.app.get(url_for(
'api_04.network_visualisation',
linked_to_ids=boundary_mark.id))
Expand All @@ -152,7 +152,7 @@ def test_api(self) -> None:
rv = self.app.get(
url_for('api_04.network_visualisation', download=True))
rv = rv.get_json()
assert bool(len(rv['results']) == 159)
assert bool(len(rv['results']) == 154)

for rv in [
self.app.get(url_for('api_04.geometric_entities')),
Expand Down

0 comments on commit b9aeba5

Please sign in to comment.