Skip to content

Commit

Permalink
#34 workaround
Browse files Browse the repository at this point in the history
  • Loading branch information
mrwunderbar666 committed Sep 4, 2023
1 parent e34dd95 commit 2dc660f
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 30 deletions.
5 changes: 2 additions & 3 deletions flaskinventory/api/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@

from flaskinventory.flaskdgraph import dql
from flaskinventory.flaskdgraph import build_query_string
from flaskinventory.flaskdgraph.utils import validate_uid, restore_sequence
from flaskinventory.flaskdgraph.utils import validate_uid, recursive_restore_sequence
from flaskinventory.view.dgraph import get_entry, get_rejected
from flaskinventory.view.utils import can_view

Expand Down Expand Up @@ -880,8 +880,7 @@ def query(_max_results: int = 25, _page: int = 1, _terms: str = None) -> t.List[
for item in result:
if 'Entry' in item['dgraph.type']:
item['dgraph.type'].remove('Entry')
# if any(t in item['dgraph.type'] for t in ['ScientificPublication', 'Tool', 'Corpus', 'Dataset']):
# restore_sequence(item)
recursive_restore_sequence(result)

return jsonify(result)
else:
Expand Down
3 changes: 3 additions & 0 deletions flaskinventory/edit/dgraph.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from flask import current_app
from flaskinventory.flaskdgraph import Schema
from flaskinventory.flaskdgraph.dgraph_types import UID, Variable, Scalar, make_nquad, dict_to_nquad
from flaskinventory.flaskdgraph.utils import recursive_restore_sequence

import logging

Expand Down Expand Up @@ -36,6 +37,8 @@ def get_entry(unique_name=None, uid=None):
except Exception as e:
logger.debug(f'Could not append authors: {e}')

recursive_restore_sequence(result['q'])

return result

def get_audience(uid):
Expand Down
2 changes: 0 additions & 2 deletions flaskinventory/edit/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from flask_login import current_user, login_required
from flaskinventory import dgraph
from flaskinventory.flaskdgraph import Schema
from flaskinventory.flaskdgraph.utils import restore_sequence, validate_uid

from flaskinventory.main.sanitizer import Sanitizer
from flaskinventory.add.external import fetch_wikidata
Expand Down Expand Up @@ -146,7 +145,6 @@ def entry(dgraph_type=None, unique_name=None, uid=None):

try:
entry = get_entry(uid=uid)
# restore_sequence(entry['q'][0])
except Exception as e:
current_app.logger.error(
f'Could not populate form for <{uid}>: {e}', stack_info=True)
Expand Down
32 changes: 18 additions & 14 deletions flaskinventory/flaskdgraph/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,21 @@ def validate_uid(uid: Any) -> Union[str, bool]:
else:
return False

def restore_sequence(d: dict, sequence_key='sequence'):
for predicate, val in d.items():
if isinstance(val, dict):
restore_sequence(val, sequence_key=sequence_key)
if isinstance(val, list):
if isinstance(val[0], dict) and predicate + "|" + sequence_key in val[0].keys():
ordered_sequence = {int(subval[predicate + "|" + sequence_key]): subval for subval in val}
d[predicate] = [ordered_sequence[i] for i in sorted(ordered_sequence.keys())]
for subval in val:
if isinstance(subval, dict):
restore_sequence(subval, sequence_key=sequence_key)
if predicate + "|" + sequence_key in d.keys():
ordered_sequence = {int(k): v for k, v in sorted(d[predicate + "|" + sequence_key].items(), key=lambda item: item[1])}
d[predicate] = [d[predicate][k] for k, _ in ordered_sequence.items()]
def restore_sequence(d: dict, sortkey = 'sequence') -> None:
sortable_keys = list(filter(lambda x: x.endswith('|' + sortkey), d.keys()))
print('found the following predicates', sortable_keys)
for facet in sortable_keys:
predicate = facet.replace('|' + sortkey, '')
if predicate not in d:
# skip over edge attributes
continue
print('restoring sequence for', predicate)
correct_sequence = [d[predicate][d[facet][k]] for k, v in d[facet].items()]
d[predicate] = correct_sequence

def recursive_restore_sequence(l: list, sortkey = 'sequence') -> None:
for item in l:
if type(item) == list:
recursive_restore_sequence(item, sortkey=sortkey)
if type(item) == dict:
restore_sequence(item, sortkey=sortkey)
14 changes: 6 additions & 8 deletions flaskinventory/view/dgraph.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from flaskinventory.main.model import *

import typing as t
from flaskinventory.flaskdgraph.utils import restore_sequence, validate_uid
from flaskinventory.flaskdgraph.utils import recursive_restore_sequence, validate_uid

import logging

Expand Down Expand Up @@ -44,7 +44,7 @@ def get_entry(unique_name: str = None, uid: str = None, dgraph_type: t.Union[str
'''

if dgraph_type == 'NewsSource':
query_fields += '''published_by: ~publishes @facets @filter(type("Organization")) (orderasc: _unique_name) { name _unique_name uid entry_review_status }
query_fields += '''published_by: ~publishes @facets(orderasc: _unique_name) { name _unique_name uid entry_review_status dgraph.type }
archives: ~sources_included @facets @filter(type("Archive")) (orderasc: _unique_name) { name _unique_name uid entry_review_status }
datasets: ~sources_included @facets @filter(type("Dataset")) (orderasc: _unique_name) (orderasc: _unique_name){ name _unique_name uid entry_review_status @facets(orderasc: sequence) { uid _unique_name name } _authors_fallback @facets(orderasc: sequence) }
papers: ~sources_included @facets @filter(type("ScientificPublication")) (orderasc: date_published) { uid name title date_published entry_review_status @facets(orderasc: sequence) { uid _unique_name name } _authors_fallback @facets(orderasc: sequence) }
Expand Down Expand Up @@ -120,9 +120,9 @@ def get_entry(unique_name: str = None, uid: str = None, dgraph_type: t.Union[str
if len(data['entry']) == 0:
return None

recursive_restore_sequence(data['entry'])
data = data['entry'][0]

# restore_sequence(data)
# Get authors again, in right order
if 'authors' in data:
authors_query = """query get_entry($value: string) {
Expand Down Expand Up @@ -157,8 +157,8 @@ def get_entry(unique_name: str = None, uid: str = None, dgraph_type: t.Union[str
data['num_orgs'] = num_orgs['country'][0]['count']

elif dgraph_type == 'Multinational':
num_sources = dgraph.query(NewsSource.country.count(uid, _reverse=True, entry_review_status="accepted"))
data['num_sources'] = num_sources['country'][0]['count']
num_sources = dgraph.query(NewsSource.countries.count(uid, _reverse=True, entry_review_status="accepted"))
data['num_sources'] = num_sources['countries'][0]['count']

elif dgraph_type == 'Subnational':
num_sources = dgraph.query(NewsSource.subnational_scope.count(uid, _reverse=True, entry_review_status="accepted"))
Expand Down Expand Up @@ -276,8 +276,6 @@ def list_by_type(typename, filt=None, fields=None, normalize=False):
return False

data = data['q']
# if typename in ['ScientificPublication', 'Tool', 'Corpus', 'Dataset']:
# for paper in data:
# restore_sequence(paper)
recursive_restore_sequence(data)

return data
6 changes: 3 additions & 3 deletions flaskinventory/view/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from flaskinventory.users.utils import requires_access_level
from flaskinventory.view.dgraph import (get_entry, get_rejected)
from flaskinventory.view.utils import can_view
from flaskinventory.flaskdgraph.utils import validate_uid, restore_sequence
from flaskinventory.flaskdgraph.utils import validate_uid, recursive_restore_sequence
from flaskinventory.review.utils import create_review_actions
from flaskinventory.misc.utils import validate_doi

Expand Down Expand Up @@ -204,8 +204,8 @@ def query():
for item in result:
if 'Entry' in item['dgraph.type']:
item['dgraph.type'].remove('Entry')
# if any(t in item['dgraph.type'] for t in ['ScientificPublication', 'Tool', 'Corpus', 'Dataset']):
# restore_sequence(item)

recursive_restore_sequence(result)

r_args = {k: v for k, v in request.args.to_dict(
flat=False).items() if v[0] != ''}
Expand Down

0 comments on commit 2dc660f

Please sign in to comment.