Add partial cache support to inject-links-pid #6
1 changed files with 20 additions and 0 deletions
|
|
@ -28,6 +28,7 @@ from query_rse_group import (
|
||||||
@click.option('--api-url', **stdargs['--api-url'])
|
@click.option('--api-url', **stdargs['--api-url'])
|
||||||
@click.option('--token', **stdargs['--token'])
|
@click.option('--token', **stdargs['--token'])
|
||||||
@click.option('--record-cache', **stdargs['--record-cache'])
|
@click.option('--record-cache', **stdargs['--record-cache'])
|
||||||
|
@click.option('--only-from-cache', is_flag=True, help='Use only cached records, make no API requests.')
|
||||||
@click.option(
|
@click.option(
|
||||||
'-c', '--collection',
|
'-c', '--collection',
|
||||||
multiple=True,
|
multiple=True,
|
||||||
|
|
@ -42,6 +43,7 @@ def cli(
|
||||||
api_url: str,
|
api_url: str,
|
||||||
token: str,
|
token: str,
|
||||||
record_cache: dict,
|
record_cache: dict,
|
||||||
|
only_from_cache: bool,
|
||||||
collection=('public',),
|
collection=('public',),
|
||||||
):
|
):
|
||||||
"""Inject records that link an object via a given property
|
"""Inject records that link an object via a given property
|
||||||
|
|
@ -57,6 +59,7 @@ def cli(
|
||||||
col,
|
col,
|
||||||
rec['pid'],
|
rec['pid'],
|
||||||
token=token,
|
token=token,
|
||||||
|
cache=record_cache if only_from_cache else None
|
||||||
))
|
))
|
||||||
target = rec.get(inject)
|
target = rec.get(inject)
|
||||||
if target is None:
|
if target is None:
|
||||||
|
|
@ -79,12 +82,20 @@ def get_any_thing_that_links_pid_via_x(
|
||||||
collection: str,
|
collection: str,
|
||||||
pid: str,
|
pid: str,
|
||||||
token: str | None = None,
|
token: str | None = None,
|
||||||
|
cache: dict | None = None,
|
||||||
):
|
):
|
||||||
def _pid_match(val: str | dict, pid: str, via: str):
|
def _pid_match(val: str | dict, pid: str, via: str):
|
||||||
if isinstance(val, dict):
|
if isinstance(val, dict):
|
||||||
val = val['object']
|
val = val['object']
|
||||||
return pid == val
|
return pid == val
|
||||||
|
|
||||||
|
def _cn_match(record: dict, cn: str | None):
|
||||||
|
if cn is None:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
record_cn = record.get('schema_type', '').rsplit(':', maxsplit=1)[-1]
|
||||||
|
return record_cn == cn
|
||||||
|
|
||||||
def _does_link(
|
def _does_link(
|
||||||
rec: dict,
|
rec: dict,
|
||||||
target_pid: str,
|
target_pid: str,
|
||||||
|
|
@ -103,6 +114,15 @@ def get_any_thing_that_links_pid_via_x(
|
||||||
for val in prop
|
for val in prop
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if cache is not None:
|
||||||
|
return [
|
||||||
|
record
|
||||||
|
for record in cache.values()
|
||||||
|
if record is not None
|
||||||
|
and _cn_match(record, class_name)
|
||||||
|
and any(_does_link(record, pid, prop_id) for prop_id in link)
|
||||||
|
]
|
||||||
|
|
||||||
return [
|
return [
|
||||||
res[0]
|
res[0]
|
||||||
for res in collection_read_records_of_class(
|
for res in collection_read_records_of_class(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue