Spaces:
Build error
Build error
Merge pull request #96 from abinaze/fix/source-type-stub-nodes
Browse filesfix: wire source_type into the Party/Ministry/Scheme stub-node helpers
- graph/loader.py +24 -9
graph/loader.py
CHANGED
|
@@ -209,7 +209,8 @@ class GraphLoader:
|
|
| 209 |
party_id = make_id(party_name)
|
| 210 |
query = """
|
| 211 |
MERGE (party:Party {id: $party_id})
|
| 212 |
-
SET party.name = $party_name
|
|
|
|
| 213 |
WITH party
|
| 214 |
MATCH (p:Politician {id: $pol_id})
|
| 215 |
MERGE (p)-[:MEMBER_OF]->(party)
|
|
@@ -218,6 +219,11 @@ class GraphLoader:
|
|
| 218 |
"party_id": party_id,
|
| 219 |
"party_name": party_name,
|
| 220 |
"pol_id": politician_id,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 221 |
})
|
| 222 |
|
| 223 |
def load_companies(self, records: list) -> int:
|
|
@@ -323,11 +329,13 @@ class GraphLoader:
|
|
| 323 |
ministry_id = make_id(ministry_name)
|
| 324 |
self._run("""
|
| 325 |
MERGE (m:Ministry {id: $m_id})
|
| 326 |
-
SET m.name = $m_name
|
|
|
|
| 327 |
WITH m
|
| 328 |
MATCH (c:Contract {id: $contract_id})
|
| 329 |
MERGE (c)-[:AWARDED_BY]->(m)
|
| 330 |
-
""", {"m_id": ministry_id, "m_name": ministry_name, "contract_id": contract_id
|
|
|
|
| 331 |
self.stats["rels_created"] += 1
|
| 332 |
|
| 333 |
def load_audit_reports(self, records: list) -> int:
|
|
@@ -373,12 +381,14 @@ class GraphLoader:
|
|
| 373 |
scheme_id = make_id(scheme_name)
|
| 374 |
self._run("""
|
| 375 |
MERGE (s:Scheme {id: $s_id})
|
| 376 |
-
SET s.name = $s_name
|
|
|
|
| 377 |
WITH s
|
| 378 |
MATCH (a:AuditReport {id: $audit_id})
|
| 379 |
MERGE (a)-[r:FLAGS]->(s)
|
| 380 |
SET r.amount_crore = $amount
|
| 381 |
-
""", {"s_id": scheme_id, "s_name": scheme_name, "audit_id": audit_id, "amount": amount
|
|
|
|
| 382 |
self.stats["rels_created"] += 1
|
| 383 |
|
| 384 |
def load_press_releases(self, records: list) -> int:
|
|
@@ -639,15 +649,18 @@ class GraphLoader:
|
|
| 639 |
if purchaser and redeemer:
|
| 640 |
self._run("""
|
| 641 |
MERGE (c:Company {id:$co_id})
|
| 642 |
-
ON CREATE SET c.name=$purchaser, c.source='electoral_bond'
|
|
|
|
| 643 |
MERGE (p:Party {id:$pt_id})
|
| 644 |
-
ON CREATE SET p.name=$redeemer, p.source='electoral_bond'
|
|
|
|
| 645 |
MATCH (b:ElectoralBond {id:$b_id})
|
| 646 |
MERGE (c)-[:DONATED_VIA]->(b)-[:REDEEMED_BY]->(p)
|
| 647 |
""", {
|
| 648 |
"co_id": make_id(purchaser), "purchaser": purchaser,
|
| 649 |
"pt_id": make_id(redeemer), "redeemer": redeemer,
|
| 650 |
"b_id": node_id,
|
|
|
|
| 651 |
})
|
| 652 |
except Exception as e:
|
| 653 |
logger.warning(f"[Loader] ElectoralBond failed: {e}")
|
|
@@ -767,10 +780,12 @@ class GraphLoader:
|
|
| 767 |
if ministry:
|
| 768 |
self._run("""
|
| 769 |
MERGE (m:Ministry {id:$m_id})
|
| 770 |
-
ON CREATE SET m.name=$ministry, m.source='cppp'
|
|
|
|
| 771 |
MATCH (t:Tender {id:$t_id})
|
| 772 |
MERGE (m)-[:ISSUED_TENDER]->(t)
|
| 773 |
-
""", {"m_id": make_id(ministry), "ministry": ministry, "t_id": node_id
|
|
|
|
| 774 |
if r.get("single_bid"):
|
| 775 |
self._run("MATCH (t:Tender {id:$id}) SET t.risk_flag='SINGLE_BID'",
|
| 776 |
{"id": node_id})
|
|
|
|
| 209 |
party_id = make_id(party_name)
|
| 210 |
query = """
|
| 211 |
MERGE (party:Party {id: $party_id})
|
| 212 |
+
SET party.name = $party_name,
|
| 213 |
+
party.source_type = $source_type
|
| 214 |
WITH party
|
| 215 |
MATCH (p:Politician {id: $pol_id})
|
| 216 |
MERGE (p)-[:MEMBER_OF]->(party)
|
|
|
|
| 219 |
"party_id": party_id,
|
| 220 |
"party_name": party_name,
|
| 221 |
"pol_id": politician_id,
|
| 222 |
+
# P-1/D8 fix, see load_politicians. Party is documented in
|
| 223 |
+
# NODE_SCHEMAS with the same "default OFFICIAL" source_type;
|
| 224 |
+
# this stub is created directly from a scraper-sourced
|
| 225 |
+
# Politician record, same provenance class as everything else.
|
| 226 |
+
"source_type":"OFFICIAL",
|
| 227 |
})
|
| 228 |
|
| 229 |
def load_companies(self, records: list) -> int:
|
|
|
|
| 329 |
ministry_id = make_id(ministry_name)
|
| 330 |
self._run("""
|
| 331 |
MERGE (m:Ministry {id: $m_id})
|
| 332 |
+
SET m.name = $m_name,
|
| 333 |
+
m.source_type = $source_type
|
| 334 |
WITH m
|
| 335 |
MATCH (c:Contract {id: $contract_id})
|
| 336 |
MERGE (c)-[:AWARDED_BY]->(m)
|
| 337 |
+
""", {"m_id": ministry_id, "m_name": ministry_name, "contract_id": contract_id,
|
| 338 |
+
"source_type": "OFFICIAL"}) # P-1/D8 fix, see load_politicians
|
| 339 |
self.stats["rels_created"] += 1
|
| 340 |
|
| 341 |
def load_audit_reports(self, records: list) -> int:
|
|
|
|
| 381 |
scheme_id = make_id(scheme_name)
|
| 382 |
self._run("""
|
| 383 |
MERGE (s:Scheme {id: $s_id})
|
| 384 |
+
SET s.name = $s_name,
|
| 385 |
+
s.source_type = $source_type
|
| 386 |
WITH s
|
| 387 |
MATCH (a:AuditReport {id: $audit_id})
|
| 388 |
MERGE (a)-[r:FLAGS]->(s)
|
| 389 |
SET r.amount_crore = $amount
|
| 390 |
+
""", {"s_id": scheme_id, "s_name": scheme_name, "audit_id": audit_id, "amount": amount,
|
| 391 |
+
"source_type": "OFFICIAL"}) # P-1/D8 fix, see load_politicians
|
| 392 |
self.stats["rels_created"] += 1
|
| 393 |
|
| 394 |
def load_press_releases(self, records: list) -> int:
|
|
|
|
| 649 |
if purchaser and redeemer:
|
| 650 |
self._run("""
|
| 651 |
MERGE (c:Company {id:$co_id})
|
| 652 |
+
ON CREATE SET c.name=$purchaser, c.source='electoral_bond',
|
| 653 |
+
c.source_type=$source_type
|
| 654 |
MERGE (p:Party {id:$pt_id})
|
| 655 |
+
ON CREATE SET p.name=$redeemer, p.source='electoral_bond',
|
| 656 |
+
p.source_type=$source_type
|
| 657 |
MATCH (b:ElectoralBond {id:$b_id})
|
| 658 |
MERGE (c)-[:DONATED_VIA]->(b)-[:REDEEMED_BY]->(p)
|
| 659 |
""", {
|
| 660 |
"co_id": make_id(purchaser), "purchaser": purchaser,
|
| 661 |
"pt_id": make_id(redeemer), "redeemer": redeemer,
|
| 662 |
"b_id": node_id,
|
| 663 |
+
"source_type": "OFFICIAL", # P-1/D8 fix, see load_politicians
|
| 664 |
})
|
| 665 |
except Exception as e:
|
| 666 |
logger.warning(f"[Loader] ElectoralBond failed: {e}")
|
|
|
|
| 780 |
if ministry:
|
| 781 |
self._run("""
|
| 782 |
MERGE (m:Ministry {id:$m_id})
|
| 783 |
+
ON CREATE SET m.name=$ministry, m.source='cppp',
|
| 784 |
+
m.source_type=$source_type
|
| 785 |
MATCH (t:Tender {id:$t_id})
|
| 786 |
MERGE (m)-[:ISSUED_TENDER]->(t)
|
| 787 |
+
""", {"m_id": make_id(ministry), "ministry": ministry, "t_id": node_id,
|
| 788 |
+
"source_type": "OFFICIAL"}) # P-1/D8 fix, see load_politicians
|
| 789 |
if r.get("single_bid"):
|
| 790 |
self._run("MATCH (t:Tender {id:$id}) SET t.risk_flag='SINGLE_BID'",
|
| 791 |
{"id": node_id})
|