Skip to content

Commit

Permalink
fix: differences between model_class and model_class_name
Browse files Browse the repository at this point in the history
  • Loading branch information
philtweir committed May 30, 2024
1 parent acd3ebf commit f019248
Showing 1 changed file with 18 additions and 17 deletions.
35 changes: 18 additions & 17 deletions arches_orm/graphql/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@ def __init__(self):
self.semantic_nodes = {}
self.related_nodes = {}

async def demap(self, model, field, value, info=None):
async def demap(self, model_class_name, field, value, info=None):
if is_unset(value):
return None
if (closure := self.demapped.get((model, field), None)):
if (closure := self.demapped.get((model_class_name, field), None)):
res = closure(value)
if iscoroutinefunction(res):
res = await res
Expand All @@ -87,8 +87,8 @@ async def demap(self, model, field, value, info=None):
return res
return value

async def remap(self, model, field, value):
if (closure := self.remapped.get((model, field), None)):
async def remap(self, model_class_name, field, value):
if (closure := self.remapped.get((model_class_name, field), None)):
value = closure(value)
if iscoroutine(value):
value = await value
Expand Down Expand Up @@ -153,23 +153,24 @@ def init(self):

def _process_field(self, model_name, field, info, model, top_level=False):
typ = info["type"]
model_class_name = model.__name__
if typ == DataTypeNames.SEMANTIC:
for subfield, subinfo in info.get("children", {}).items():
self._build_semantic(field, subfield, subinfo, model_name, model.__name__)
self._process_field(model_name, subfield, subinfo, model)
if top_level:
self.definitions[model_name]["fields"][subfield] = subinfo

async def _map_semantic(model_name, field, v):
async def _map_semantic(model_class_name, field, v):
if isinstance(v, Sequence):
return [await _map_semantic(model_name, field, v_) for v_ in v]
return [await _map_semantic(model_class_name, field, v_) for v_ in v]
return {
key: await data_types.remap(model_name, key, val) for key, val in v.items()
key: await data_types.remap(model_class_name, key, val) for key, val in v.items()
}

self.remapped[(model_name, field)] = partial(
self.remapped[(model_class_name, field)] = partial(
_map_semantic,
model_name,
model_class_name,
field
)
elif typ in (DataTypeNames.RESOURCE_INSTANCE, DataTypeNames.RESOURCE_INSTANCE_LIST):
Expand All @@ -194,11 +195,11 @@ async def _construct_resource(vs, nodeid, field, model_name, datatype_instance,
resources = [await _build_resource(model, **v) for v in vs]
return resources

self.demapped[(model_name, field)] = partial(
self.demapped[(model_class_name, field)] = partial(
lambda vs, nodeid: vs,
nodeid=nodeid
)
self.remapped[(model_name, field)] = partial(
self.remapped[(model_class_name, field)] = partial(
lambda vs, nodeid: _construct_resource(vs, nodeid, field, model_name, None),
nodeid=nodeid
)
Expand All @@ -221,20 +222,20 @@ async def _construct_resource(vs, nodeid, field, model_name, datatype_instance,
"back": {label.value: label.value.enum for label in collection}
}
if typ == DataTypeNames.CONCEPT_LIST:
self.remapped[(model_name, field)] = partial(
lambda vs, nodeid: print(self.collections[nodeid]["forward"], map(str, vs), list(map(self.collections[nodeid]["forward"].get, map(str, vs)))) or list(map(self.collections[nodeid]["forward"].get, map(str, vs))),
self.remapped[(model_class_name, field)] = partial(
lambda vs, nodeid: list(map(self.collections[nodeid]["forward"].get, map(str, vs))),
nodeid=nodeid
)
self.demapped[(model_name, field)] = partial(
self.demapped[(model_class_name, field)] = partial(
lambda vs, nodeid: list(map(self.collections[nodeid]["back"].get, vs)),
nodeid=nodeid
)
else:
self.remapped[(model_name, field)] = partial(
self.remapped[(model_class_name, field)] = partial(
lambda v, nodeid: self.collections[nodeid]["forward"][str(v)],
nodeid=nodeid
)
self.demapped[(model_name, field)] = partial(
self.demapped[(model_class_name, field)] = partial(
lambda v, nodeid: self.collections[nodeid]["back"][v],
nodeid=nodeid
)
Expand Down Expand Up @@ -443,7 +444,7 @@ def _make_union(graphs):

_resource_model_mappers = {
wkrm.model_class_name: {
field: partial(data_types.demap, wkrm.model_name, field)
field: partial(data_types.demap, wkrm.model_class_name, field)
for field, info in data_types.definitions[wkrm.model_name]["fields"].items()
}
for wkrm in WELL_KNOWN_RESOURCE_MODELS
Expand Down

0 comments on commit f019248

Please sign in to comment.