Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Final ApiDoc created, nplo jsonld & mock_portfolio_generator refactored #24

Merged
Merged
4,604 changes: 4,283 additions & 321 deletions creditrisk_poc/api_doc/ApiDoc.jsonld

Large diffs are not rendered by default.

28 changes: 17 additions & 11 deletions creditrisk_poc/api_doc/api_docwriter.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,22 @@
hydra_classes = parser.create_hydra_classes(classes)
classes = {class_.title: class_ for class_ in hydra_classes}

loan_foriegnkey_uri = classes['GeneralCounterparty'].id_
loan_foriegnkey_title = "CounterpartyId"
CounterpartyId_prop = HydraClassProp(loan_foriegnkey_uri, loan_foriegnkey_title,
required=True, read=True, write=True)
classes['Loan'].add_supported_prop(CounterpartyId_prop)

Loan_operations = parser.add_operations_to_class(hydra_classes, "Loan", ["GET", "PUT", "POST", "DELETE"])
Counterparty_operations = parser.add_operations_to_class(hydra_classes, "Counterparty",
Borrower_operations = parser.add_operations_to_class(hydra_classes, "Borrower",
["GET", "PUT", "POST", "DELETE"])
PrivateBorrower_operations = parser.add_operations_to_class(hydra_classes, "PrivateBorrower",
["GET", "PUT", "POST", "DELETE"])
Collateral_operations = parser.add_operations_to_class(hydra_classes, "Collateral", ["GET", "PUT", "POST", "DELETE"])
PropertyCollateral_operations = parser.add_operations_to_class(hydra_classes, "PropertyCollateral",
["GET", "PUT", "POST", "DELETE"])
ResidentialMortgage_operations = parser.add_operations_to_class(hydra_classes, "ResidentialMortgage",
["GET", "PUT", "POST", "DELETE"])
Forbearance_operations = parser.add_operations_to_class(hydra_classes, "Forbearance",
["GET", "PUT", "POST", "DELETE"])
ExternalCollection_operations = parser.add_operations_to_class(hydra_classes, "ExternalCollection",
["GET", "PUT", "POST", "DELETE"])
Enforcement_operations = parser.add_operations_to_class(hydra_classes, "Enforcement",
["GET", "PUT", "POST", "DELETE"])


for class_ in hydra_classes:
class_name = class_.title
Expand All @@ -59,12 +65,12 @@


# Creating Borrower Collection
counterparty_collection_name = "CounterParty_collection"
counterparty_collection_title = "CounterParty class collection"
counterparty_collection_name = "Borrower_collection"
counterparty_collection_title = "Borrower class collection"
counterparty_collection_description = "Collection for Borrower class"
counterparty_collection_managed_by = {
"property": "rdf:type",
"object": parser.get_class_id("GeneralCounterparty", hydra_classes),
"object": parser.get_class_id("Borrower", hydra_classes),
}
counterparty_collection = HydraCollection(collection_name=counterparty_collection_name,
collection_description=counterparty_collection_description,
Expand Down
32 changes: 19 additions & 13 deletions creditrisk_poc/api_doc/nplvocab_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

def get_npl_vocab() -> dict:
cwd_path = Path(dirname(dirname(abspath(__file__))))
vocab_file_path = cwd_path / "npl_vocab" / "NonPerformingLoan.jsonld"
vocab_file_path = cwd_path / "npl_vocab" / "nplo.jsonld"
npl_vocab_file = open(vocab_file_path)
npl_vocab = json.load(npl_vocab_file)
return npl_vocab
Expand All @@ -30,11 +30,12 @@ def create_hydra_classes(vocab_classes: list) -> list:
"""
hydra_classes = list()
for class_ in vocab_classes:
class_name = (class_['rdfs:comment'].split('Class')[0]).replace(" ", "")
if "class" in class_name:
class_name = (class_['rdfs:comment'].split('class')[0]).replace(" ", "")
hydra_class = HydraClass(class_name, class_['rdfs:comment'], endpoint=True)
hydra_classes.append(hydra_class)
if 'nplo:' in class_.get('@id'):
class_name = (class_['@id'].split(':')[1]).replace(" ", "")
if "class" in class_name:
class_name = (class_name.split('class')[0]).replace(" ", "")
hydra_class = HydraClass(class_name, class_['rdfs:comment'], endpoint=True)
hydra_classes.append(hydra_class)
return hydra_classes


Expand All @@ -45,25 +46,30 @@ def get_class_properties(class_name: str, vocab: dict) -> list:
properties = list()
defines = vocab['@graph']
for obj in defines:
if obj.get('propertyOf'):
propertyof = obj['propertyOf'].split('#')[1]
if propertyof == class_name or obj['@type'] == 'owl:DataProperty' and obj['@type'] == 'owl:ObjectProperty':
if obj.get('rdfs:domain'):
propertyof = obj.get('rdfs:domain').get('@id').split(':')[1]
if propertyof == class_name or obj['@type'] == 'owl:DatatypeProperty' and obj['@type'] == 'owl:ObjectProperty':
properties.append(obj)
return properties


def create_hydra_properties(property_: dict, hydra_classes: dict) -> HydraClassProp:
if property_['@type'] == 'owl:DatatypeProperty':
try:
prop_range = "xsd:" + property_['propertyOn'].split('#')[1]
prop_range = property_.get('rdfs:range').get('@id')
except Exception:
prop_range = "xsd:" + property_['propertyOn']
prop_range = "xsd:" + property_.get('rdfs:range').get('@id').split(':')[1]
if 'xsd:' not in prop_range:
prop_range = 'xsd:' + prop_range.split(':')[1]
hydra_property = HydraClassProp(property_['@id'], property_['rdfs:label'], range=prop_range,
required=True, read=True, write=True)
elif 'owl:ObjectProperty' in property_['@type']:
property_on_class = property_.get("propertyOn").split('#')[1]
try:
property_on_class = property_.get("rdfs:range").get('@id').split(':')[1]
except Exception:
property_on_class = property_.get("rdfs:range")[0].get('@id').split(':')[1]
property_uri = hydra_classes[property_on_class].id_
property_name = property_['@id'].split('#')[1]
property_name = property_['@id'].split(':')[1]
hydra_property = HydraClassProp(property_uri, property_name,
required=True, read=True, write=True)

Expand Down
Loading