From d6fd9094a48fdf4847705497607b506408c122cd Mon Sep 17 00:00:00 2001 From: Jeffrey04 Date: Sun, 29 Aug 2021 16:41:33 +0800 Subject: [PATCH 1/3] feature #45 moving sinar's mock schema to a module --- src/popit_relationship/common.py | 6 +++++ src/popit_relationship/schema/base.py | 9 ++++++++ src/popit_relationship/schema/sinar.py | 32 ++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 src/popit_relationship/schema/base.py create mode 100644 src/popit_relationship/schema/sinar.py diff --git a/src/popit_relationship/common.py b/src/popit_relationship/common.py index 2ae1a54..6ba65d5 100644 --- a/src/popit_relationship/common.py +++ b/src/popit_relationship/common.py @@ -5,6 +5,8 @@ import networkx as nx from networkx.exception import NetworkXError +from popit_relationship.schema.base import Namespace, Schema + CACHE_PATH_DEFAULT = "./primport-cache.gpickle" KEY_TYPE = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" KEY_RELATIONSHIP = "http://purl.org/vocab/relationship/Relationship" @@ -51,3 +53,7 @@ def node_get_type(graph, node): return [j for i, j, k in graph.edges if i == node and k == KEY_TYPE][0] except IndexError: return False + + +def schema_generate_uri(namespace: Namespace, schema: Schema): + return f"{namespace.__class__.BASE.value}{namespace.value}#{schema.value}" diff --git a/src/popit_relationship/schema/base.py b/src/popit_relationship/schema/base.py new file mode 100644 index 0000000..5795864 --- /dev/null +++ b/src/popit_relationship/schema/base.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class Namespace(Enum): + pass + + +class Schema(Enum): + pass diff --git a/src/popit_relationship/schema/sinar.py b/src/popit_relationship/schema/sinar.py new file mode 100644 index 0000000..d9363af --- /dev/null +++ b/src/popit_relationship/schema/sinar.py @@ -0,0 +1,32 @@ +from popit_relationship.schema.base import Namespace, Schema + + +class Ownership(Schema): + OWNERSHIP_OR_CONTROL_STATEMENT = "ownershipOrControlStatement" + + +class OCDS(Schema): + """ + Types + """ + + EXTRACTIVE_CONCESSION = "extractiveConcession" + ORGANIZATION = "organization" + + """ + Relationships + """ + BUYER = "buyer" + PROCURING_ENTITY = "procuringEntity" + ADMINISTRATIVE_ENTITY = "administrativeEntity" + TENDERER = "tenderer" + SUPPLIER = "supplier" + FUNDER = "funder" + REVIEW_BODY = "reviewBody" + INTERESTED_PARTY = "interestedParty" + + +class Sinar(Namespace): + BASE = "https://sinarproject.org/ns/" + + OWNERSHIP = "ownership" From d089664a322a8a4f90da2253ba0d4884191a36fb Mon Sep 17 00:00:00 2001 From: Jeffrey04 Date: Sun, 29 Aug 2021 16:46:18 +0800 Subject: [PATCH 2/3] feature #45 add ocds namespace --- src/popit_relationship/schema/sinar.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/popit_relationship/schema/sinar.py b/src/popit_relationship/schema/sinar.py index d9363af..1236ea9 100644 --- a/src/popit_relationship/schema/sinar.py +++ b/src/popit_relationship/schema/sinar.py @@ -30,3 +30,4 @@ class Sinar(Namespace): BASE = "https://sinarproject.org/ns/" OWNERSHIP = "ownership" + OCDS = "ocds" From c17ce38e0d3274cb7d1f5455573b4d2e9fc1dbcb Mon Sep 17 00:00:00 2001 From: Jeffrey04 Date: Sun, 29 Aug 2021 16:47:10 +0800 Subject: [PATCH 3/3] feature #45 further softcode the ownership schema --- src/popit_relationship/sync.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/popit_relationship/sync.py b/src/popit_relationship/sync.py index b2b0dbd..0f1e999 100644 --- a/src/popit_relationship/sync.py +++ b/src/popit_relationship/sync.py @@ -9,7 +9,14 @@ from loguru import logger from toolz.dicttoolz import get_in, valfilter -from popit_relationship.common import coro, graph_init, graph_prune, graph_save +from popit_relationship.common import ( + coro, + graph_init, + graph_prune, + graph_save, + schema_generate_uri, +) +from popit_relationship.schema.sinar import Ownership, Sinar TYPE_PERSON = "https://www.w3.org/ns/person#Person" TYPE_POST = "http://www.w3.org/ns/org#Post" @@ -17,8 +24,6 @@ TYPE_MEMBERSHIP = "http://www.w3.org/ns/org#Membership" TYPE_RELATIONSHIP = "http://purl.org/vocab/relationship/Relationship" -SINAR_NS_MOCK = "https://sinarproject.org/ns/ownership#" - @click.group() def sync(): @@ -35,7 +40,7 @@ async def all_sync(_ctx): await tree_import(TYPE_POST, "Post", post_build_node) await tree_import(TYPE_MEMBERSHIP, "Membership", membership_build_node) await tree_import( - f"{SINAR_NS_MOCK}ownershipOrControlStatement", + schema_generate_uri(Sinar.OWNERSHIP, Ownership.OWNERSHIP_OR_CONTROL_STATEMENT), "Ownership Control Statement", ownership_build_node, ) @@ -103,7 +108,7 @@ def membership_build_node(membership): @coro async def ownership(): await tree_import( - f"{SINAR_NS_MOCK}ownershipOrControlStatement", + schema_generate_uri(Sinar.OWNERSHIP, Ownership.OWNERSHIP_OR_CONTROL_STATEMENT), "Ownership Control Statement", ownership_build_node, ) @@ -117,7 +122,9 @@ def ownership_build_node(ownership): { "subject": get_in(["interestedParty", "@id"], ownership, None), "predicate": { - "key": f"{SINAR_NS_MOCK}ownershipOrControlStatement", + "key": schema_generate_uri( + Sinar.OWNERSHIP, Ownership.OWNERSHIP_OR_CONTROL_STATEMENT + ), "attributes": predicate_attribute_filter_empty( { "interest_level": get_in(