abinazebinoy commited on
Commit
77c4516
·
unverified ·
2 Parent(s): 02be021df73861

Merge pull request #96 from abinaze/fix/source-type-stub-nodes

Browse files

fix: wire source_type into the Party/Ministry/Scheme stub-node helpers

Files changed (1) hide show
  1. 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})