D Ф m i И i q ц e L Ф y e r commited on
Commit
4016d03
·
1 Parent(s): ccc6b51

Add sources table sync to Supabase

Browse files
Files changed (2) hide show
  1. syscred/backend_app.py +26 -2
  2. syscred/database.py +44 -0
syscred/backend_app.py CHANGED
@@ -424,12 +424,23 @@ def verify_endpoint():
424
 
425
  # [NEW] Persist to Database (SQLite + Supabase REST)
426
  try:
 
 
 
 
 
 
 
 
 
 
 
427
  # Save to SQLite
428
  new_analysis = AnalysisResult(
429
  url=input_data[:500],
430
  credibility_score=result.get('scoreCredibilite', 0.5),
431
  summary=result.get('resumeAnalyse', ''),
432
- source_reputation=result.get('detailsScore', {}).get('factors', [{}])[0].get('value')
433
  )
434
  db.session.add(new_analysis)
435
  db.session.commit()
@@ -444,9 +455,22 @@ def verify_endpoint():
444
  'url': input_data[:500],
445
  'credibility_score': result.get('scoreCredibilite', 0.5),
446
  'summary': result.get('resumeAnalyse', ''),
447
- 'source_reputation': result.get('detailsScore', {}).get('factors', [{}])[0].get('value')
448
  })
449
  print(f"[SysCRED-DB] Result synced to Supabase")
 
 
 
 
 
 
 
 
 
 
 
 
 
450
  except Exception as supabase_err:
451
  print(f"[SysCRED-DB] Supabase sync failed: {supabase_err}")
452
 
 
424
 
425
  # [NEW] Persist to Database (SQLite + Supabase REST)
426
  try:
427
+ # Extract domain for sources table
428
+ domain = None
429
+ if credibility_system and credibility_system.is_url(input_data):
430
+ try:
431
+ from urllib.parse import urlparse
432
+ domain = urlparse(input_data).netloc
433
+ except:
434
+ pass
435
+
436
+ source_reputation = result.get('detailsScore', {}).get('factors', [{}])[0].get('value')
437
+
438
  # Save to SQLite
439
  new_analysis = AnalysisResult(
440
  url=input_data[:500],
441
  credibility_score=result.get('scoreCredibilite', 0.5),
442
  summary=result.get('resumeAnalyse', ''),
443
+ source_reputation=source_reputation
444
  )
445
  db.session.add(new_analysis)
446
  db.session.commit()
 
455
  'url': input_data[:500],
456
  'credibility_score': result.get('scoreCredibilite', 0.5),
457
  'summary': result.get('resumeAnalyse', ''),
458
+ 'source_reputation': source_reputation
459
  })
460
  print(f"[SysCRED-DB] Result synced to Supabase")
461
+
462
+ # Sync source (domain)
463
+ if domain and source_reputation:
464
+ # Convert reputation to numeric score
465
+ rep_score = 0.5
466
+ if source_reputation in ['High', 'high', '5 found']:
467
+ rep_score = 0.8
468
+ elif source_reputation in ['Medium', 'medium']:
469
+ rep_score = 0.5
470
+ elif source_reputation in ['Low', 'low', 'Unknown']:
471
+ rep_score = 0.2
472
+
473
+ supabase.upsert_source(domain, rep_score)
474
  except Exception as supabase_err:
475
  print(f"[SysCRED-DB] Supabase sync failed: {supabase_err}")
476
 
syscred/database.py CHANGED
@@ -78,6 +78,50 @@ class SupabaseClient:
78
  except Exception as e:
79
  print(f"[Supabase REST] Count error: {e}")
80
  return 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
 
82
 
83
  # Global Supabase client
 
78
  except Exception as e:
79
  print(f"[Supabase REST] Count error: {e}")
80
  return 0
81
+
82
+ def upsert_source(self, domain, reputation_score, analysis_count=1):
83
+ """Insert or update a source (domain) in sources table."""
84
+ try:
85
+ # First check if source exists
86
+ existing = self.select('sources', {'domain': f'eq.{domain}'})
87
+
88
+ if existing:
89
+ # Update existing source
90
+ current = existing[0]
91
+ new_count = current.get('analysis_count', 0) + analysis_count
92
+
93
+ # Use PATCH to update
94
+ response = requests.patch(
95
+ f"{self.url}/rest/v1/sources?domain=eq.{domain}",
96
+ json={
97
+ 'reputation_score': reputation_score,
98
+ 'analysis_count': new_count
99
+ },
100
+ headers=self.headers
101
+ )
102
+ if response.status_code in [200, 204]:
103
+ print(f"[Supabase] Updated source: {domain} (count: {new_count})")
104
+ return True
105
+ else:
106
+ # Insert new source
107
+ response = requests.post(
108
+ f"{self.url}/rest/v1/sources",
109
+ json={
110
+ 'domain': domain,
111
+ 'reputation_score': reputation_score,
112
+ 'analysis_count': analysis_count
113
+ },
114
+ headers=self.headers
115
+ )
116
+ if response.status_code in [200, 201]:
117
+ print(f"[Supabase] Inserted new source: {domain}")
118
+ return True
119
+
120
+ print(f"[Supabase] Source upsert failed: {response.status_code} - {response.text[:100]}")
121
+ return False
122
+ except Exception as e:
123
+ print(f"[Supabase REST] Upsert source error: {e}")
124
+ return False
125
 
126
 
127
  # Global Supabase client