From 952c8f55ed2ea106bd6b39d21d46771b83d4c236 Mon Sep 17 00:00:00 2001 From: uruwhy <58484522+uruwhy@users.noreply.github.com> Date: Wed, 28 Jan 2026 03:23:51 +0000 Subject: [PATCH 1/2] create placeholder facts if they're None when creating relationships --- app/objects/secondclass/c_link.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/objects/secondclass/c_link.py b/app/objects/secondclass/c_link.py index 7afd4dc7e..6f23a75e0 100644 --- a/app/objects/secondclass/c_link.py +++ b/app/objects/secondclass/c_link.py @@ -262,6 +262,10 @@ async def _load_module(module_type, module_info): async def create_relationships(self, relationships, operation): for relationship in relationships: relationship.origin = operation.id if operation else self.id + if not relationship.source: + relationship.source = Fact('', None) + if not relationship.target: + relationship.target = Fact('', None) await self.save_fact(operation, relationship.source, relationship.score, relationship.shorthand) await self.save_fact(operation, relationship.target, relationship.score, relationship.shorthand) if all((relationship.source.trait, relationship.edge)): @@ -274,7 +278,7 @@ async def save_fact(self, operation, fact, score, relationship): all_facts = await operation.all_facts() if operation else self.facts source = operation.id if operation else self.id rl = [relationship] if relationship else [] - if all([fact.trait, fact.value]): + if fact and all([fact.trait, fact.value]): if operation and operation.source: if any([(fact.trait, fact.value) == (x.trait, x.value) for x in await knowledge_svc_handle.get_facts(criteria=dict(source=operation.source.id))]): From b13d300f820023f65fd9f275885a857e409b3438 Mon Sep 17 00:00:00 2001 From: uruwhy <58484522+uruwhy@users.noreply.github.com> Date: Wed, 28 Jan 2026 04:27:05 +0000 Subject: [PATCH 2/2] use relationship constructor to set default facts --- app/objects/secondclass/c_link.py | 6 +----- app/objects/secondclass/c_relationship.py | 6 +++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/app/objects/secondclass/c_link.py b/app/objects/secondclass/c_link.py index 6f23a75e0..7afd4dc7e 100644 --- a/app/objects/secondclass/c_link.py +++ b/app/objects/secondclass/c_link.py @@ -262,10 +262,6 @@ async def _load_module(module_type, module_info): async def create_relationships(self, relationships, operation): for relationship in relationships: relationship.origin = operation.id if operation else self.id - if not relationship.source: - relationship.source = Fact('', None) - if not relationship.target: - relationship.target = Fact('', None) await self.save_fact(operation, relationship.source, relationship.score, relationship.shorthand) await self.save_fact(operation, relationship.target, relationship.score, relationship.shorthand) if all((relationship.source.trait, relationship.edge)): @@ -278,7 +274,7 @@ async def save_fact(self, operation, fact, score, relationship): all_facts = await operation.all_facts() if operation else self.facts source = operation.id if operation else self.id rl = [relationship] if relationship else [] - if fact and all([fact.trait, fact.value]): + if all([fact.trait, fact.value]): if operation and operation.source: if any([(fact.trait, fact.value) == (x.trait, x.value) for x in await knowledge_svc_handle.get_facts(criteria=dict(source=operation.source.id))]): diff --git a/app/objects/secondclass/c_relationship.py b/app/objects/secondclass/c_relationship.py index 6a1f96570..1f6911854 100644 --- a/app/objects/secondclass/c_relationship.py +++ b/app/objects/secondclass/c_relationship.py @@ -1,7 +1,7 @@ import marshmallow as ma from app.utility.base_object import BaseObject -from app.objects.secondclass.c_fact import FactSchema +from app.objects.secondclass.c_fact import Fact, FactSchema class RelationshipSchema(ma.Schema): @@ -68,8 +68,8 @@ def shorthand(self): def __init__(self, source, edge=None, target=None, score=1, origin=None): super().__init__() - self.source = source + self.source = source or Fact('', None) self.edge = edge - self.target = target + self.target = target or Fact('', None) self.score = score self.origin = origin