Spaces:
Running
Running
Commit ·
acfb2c9
1
Parent(s): a4f5b36
fixed article image breaking issue
Browse files- app/services/appwrite_db.py +27 -10
- graphify-out/.graphify_labels.json +7 -1
- graphify-out/2026-08-24/.graphify_labels.json +0 -5
- graphify-out/2026-08-24/GRAPH_REPORT.md +80 -110
- graphify-out/2026-08-24/graph.json +0 -0
- graphify-out/2026-08-24/manifest.json +39 -9
- graphify-out/GRAPH_REPORT.md +95 -75
- graphify-out/cache/ast/v0.9.5/1c3f57689ce70e2b13e423b55681cdaaed4d952d420c978f01327190664f0e67.json +1 -0
- graphify-out/cache/ast/v0.9.5/4015dd2120abc1b10e107930ad2e461104dc0f8d4b92099117657b7401ead048.json +1 -0
- graphify-out/cache/ast/v0.9.5/5b8213932acd73feafcf8cc6da4a06622d078b983b20eec92bf30d59ab2c9c3e.json +1 -0
- graphify-out/cache/ast/v0.9.5/783347828a08021007c473737ad3efc13cc87a66f06f3fd9b43c629af0098924.json +1 -0
- graphify-out/cache/ast/v0.9.5/de78637e85bfbabca7e0e6f845d1dc532f78b61ea1bc259c11d6a107013f34ff.json +1 -0
- graphify-out/cache/stat-index.json +1 -1
- graphify-out/graph.html +0 -0
- graphify-out/graph.json +0 -0
- graphify-out/manifest.json +18 -18
app/services/appwrite_db.py
CHANGED
|
@@ -321,12 +321,17 @@ class AppwriteDatabase:
|
|
| 321 |
if not url and _safe_get(doc, 'pdf_url'):
|
| 322 |
url = _safe_get(doc, 'pdf_url')
|
| 323 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 324 |
article = {
|
| 325 |
'$id': _safe_get(doc, '$id'), # Ensure $id is passed!
|
| 326 |
'title': _safe_get(doc, 'title'),
|
| 327 |
'description': description,
|
| 328 |
'url': url,
|
| 329 |
-
'image_url':
|
| 330 |
'publishedAt': _safe_get(doc, 'published_at'),
|
| 331 |
'published_at': _safe_get(doc, 'published_at'), # Standard schema field
|
| 332 |
'source': _safe_get(doc, 'source', ''),
|
|
@@ -403,12 +408,17 @@ class AppwriteDatabase:
|
|
| 403 |
articles = []
|
| 404 |
for doc in _safe_get(response, 'rows', []):
|
| 405 |
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 406 |
article = {
|
| 407 |
'$id': _safe_get(doc, '$id'),
|
| 408 |
'title': _safe_get(doc, 'title'),
|
| 409 |
'description': _safe_get(doc, 'description') or _safe_get(doc, 'summary', ''),
|
| 410 |
'url': _safe_get(doc, 'url'),
|
| 411 |
-
'image_url':
|
| 412 |
'publishedAt': _safe_get(doc, 'published_at'),
|
| 413 |
'published_at': _safe_get(doc, 'published_at'),
|
| 414 |
'source': _safe_get(doc, 'source', ''),
|
|
@@ -472,8 +482,15 @@ class AppwriteDatabase:
|
|
| 472 |
return obj.get(field, default)
|
| 473 |
return getattr(obj, field, default)
|
| 474 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 475 |
# Route to correct collection
|
| 476 |
-
category_val =
|
| 477 |
target_collection_id = self.get_collection_id(category_val)
|
| 478 |
|
| 479 |
# Prepare document data - STRICT SCHEMA MAPPING (New Schema Enforcement)
|
|
@@ -489,17 +506,17 @@ class AppwriteDatabase:
|
|
| 489 |
pub_date_str = str(pub_date or datetime.now().isoformat())
|
| 490 |
|
| 491 |
document_data = {
|
| 492 |
-
'title':
|
| 493 |
-
'description':
|
| 494 |
'url': url[:2048],
|
| 495 |
-
'image_url':
|
| 496 |
'published_at': pub_date_str,
|
| 497 |
-
'source':
|
| 498 |
-
'category':
|
| 499 |
'fetched_at': datetime.now().isoformat(),
|
| 500 |
'url_hash': url_hash_full, # 64 chars
|
| 501 |
-
'slug':
|
| 502 |
-
'quality_score': int(get_field(article, 'quality_score', 50)),
|
| 503 |
# ENGAGEMENT METRICS
|
| 504 |
'likes': 0,
|
| 505 |
'dislike': 0,
|
|
|
|
| 321 |
if not url and _safe_get(doc, 'pdf_url'):
|
| 322 |
url = _safe_get(doc, 'pdf_url')
|
| 323 |
|
| 324 |
+
# Fix for legacy "None" string corruption in image_url
|
| 325 |
+
img_url = _safe_get(doc, 'image_url', '')
|
| 326 |
+
if img_url == "None":
|
| 327 |
+
img_url = ''
|
| 328 |
+
|
| 329 |
article = {
|
| 330 |
'$id': _safe_get(doc, '$id'), # Ensure $id is passed!
|
| 331 |
'title': _safe_get(doc, 'title'),
|
| 332 |
'description': description,
|
| 333 |
'url': url,
|
| 334 |
+
'image_url': img_url,
|
| 335 |
'publishedAt': _safe_get(doc, 'published_at'),
|
| 336 |
'published_at': _safe_get(doc, 'published_at'), # Standard schema field
|
| 337 |
'source': _safe_get(doc, 'source', ''),
|
|
|
|
| 408 |
articles = []
|
| 409 |
for doc in _safe_get(response, 'rows', []):
|
| 410 |
try:
|
| 411 |
+
# Fix for legacy "None" string corruption in image_url
|
| 412 |
+
img_url = _safe_get(doc, 'image_url', '')
|
| 413 |
+
if img_url == "None":
|
| 414 |
+
img_url = ''
|
| 415 |
+
|
| 416 |
article = {
|
| 417 |
'$id': _safe_get(doc, '$id'),
|
| 418 |
'title': _safe_get(doc, 'title'),
|
| 419 |
'description': _safe_get(doc, 'description') or _safe_get(doc, 'summary', ''),
|
| 420 |
'url': _safe_get(doc, 'url'),
|
| 421 |
+
'image_url': img_url,
|
| 422 |
'publishedAt': _safe_get(doc, 'published_at'),
|
| 423 |
'published_at': _safe_get(doc, 'published_at'),
|
| 424 |
'source': _safe_get(doc, 'source', ''),
|
|
|
|
| 482 |
return obj.get(field, default)
|
| 483 |
return getattr(obj, field, default)
|
| 484 |
|
| 485 |
+
# Helper to safely cast to string and prevent "None" strings
|
| 486 |
+
def clean_str(val, max_len=None):
|
| 487 |
+
if val is None or str(val).strip() == "None":
|
| 488 |
+
return ''
|
| 489 |
+
s = str(val).strip()
|
| 490 |
+
return s[:max_len] if max_len else s
|
| 491 |
+
|
| 492 |
# Route to correct collection
|
| 493 |
+
category_val = clean_str(get_field(article, 'category', ''))
|
| 494 |
target_collection_id = self.get_collection_id(category_val)
|
| 495 |
|
| 496 |
# Prepare document data - STRICT SCHEMA MAPPING (New Schema Enforcement)
|
|
|
|
| 506 |
pub_date_str = str(pub_date or datetime.now().isoformat())
|
| 507 |
|
| 508 |
document_data = {
|
| 509 |
+
'title': clean_str(get_field(article, 'title', ''), 500),
|
| 510 |
+
'description': clean_str(get_field(article, 'description', ''), 2000),
|
| 511 |
'url': url[:2048],
|
| 512 |
+
'image_url': clean_str(get_field(article, 'image_url') or get_field(article, 'image', ''), 2048) or None,
|
| 513 |
'published_at': pub_date_str,
|
| 514 |
+
'source': clean_str(get_field(article, 'source', ''), 200),
|
| 515 |
+
'category': clean_str(get_field(article, 'category', ''), 100),
|
| 516 |
'fetched_at': datetime.now().isoformat(),
|
| 517 |
'url_hash': url_hash_full, # 64 chars
|
| 518 |
+
'slug': clean_str(get_field(article, 'slug', ''), 200) or None,
|
| 519 |
+
'quality_score': int(get_field(article, 'quality_score', 50) or 50),
|
| 520 |
# ENGAGEMENT METRICS
|
| 521 |
'likes': 0,
|
| 522 |
'dislike': 0,
|
graphify-out/.graphify_labels.json
CHANGED
|
@@ -83,6 +83,11 @@
|
|
| 83 |
"81": "Community 81",
|
| 84 |
"82": "Community 82",
|
| 85 |
"83": "Community 83",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
"89": "Community 89",
|
| 87 |
"90": "Community 90",
|
| 88 |
"91": "Community 91",
|
|
@@ -128,5 +133,6 @@
|
|
| 128 |
"131": "code:bash (# Fetch AI news)",
|
| 129 |
"132": "code:bash (pip install -r requirements.txt)",
|
| 130 |
"133": "bool",
|
| 131 |
-
"134": "deploy.ps1"
|
|
|
|
| 132 |
}
|
|
|
|
| 83 |
"81": "Community 81",
|
| 84 |
"82": "Community 82",
|
| 85 |
"83": "Community 83",
|
| 86 |
+
"84": "._fetch_and_parse_feed",
|
| 87 |
+
"85": ".get_articles",
|
| 88 |
+
"86": "id_generator.py",
|
| 89 |
+
"87": "fetch_and_validate_category",
|
| 90 |
+
"88": "analytics.py",
|
| 91 |
"89": "Community 89",
|
| 92 |
"90": "Community 90",
|
| 93 |
"91": "Community 91",
|
|
|
|
| 133 |
"131": "code:bash (# Fetch AI news)",
|
| 134 |
"132": "code:bash (pip install -r requirements.txt)",
|
| 135 |
"133": "bool",
|
| 136 |
+
"134": "deploy.ps1",
|
| 137 |
+
"135": "firebase_service.py"
|
| 138 |
}
|
graphify-out/2026-08-24/.graphify_labels.json
CHANGED
|
@@ -83,11 +83,6 @@
|
|
| 83 |
"81": "Community 81",
|
| 84 |
"82": "Community 82",
|
| 85 |
"83": "Community 83",
|
| 86 |
-
"84": "Community 84",
|
| 87 |
-
"85": "Community 85",
|
| 88 |
-
"86": "Community 86",
|
| 89 |
-
"87": "Community 87",
|
| 90 |
-
"88": "Community 88",
|
| 91 |
"89": "Community 89",
|
| 92 |
"90": "Community 90",
|
| 93 |
"91": "Community 91",
|
|
|
|
| 83 |
"81": "Community 81",
|
| 84 |
"82": "Community 82",
|
| 85 |
"83": "Community 83",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
"89": "Community 89",
|
| 87 |
"90": "Community 90",
|
| 88 |
"91": "Community 91",
|
graphify-out/2026-08-24/GRAPH_REPORT.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
| 1 |
-
# Graph Report - backend (2026-08-
|
| 2 |
|
| 3 |
## Corpus Check
|
| 4 |
-
-
|
| 5 |
- Verdict: corpus is large enough that graph structure adds value.
|
| 6 |
|
| 7 |
## Summary
|
| 8 |
-
-
|
| 9 |
-
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED:
|
| 10 |
- Token cost: 0 input · 0 output
|
| 11 |
|
| 12 |
## Graph Freshness
|
| 13 |
-
- Built from commit: `
|
| 14 |
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
| 15 |
- Run `graphify update .` after code changes (no API cost).
|
| 16 |
|
|
@@ -72,16 +72,10 @@
|
|
| 72 |
- [[_COMMUNITY_Community 63|Community 63]]
|
| 73 |
- [[_COMMUNITY_Community 77|Community 77]]
|
| 74 |
- [[_COMMUNITY_Community 78|Community 78]]
|
| 75 |
-
- [[_COMMUNITY_Community 79|Community 79]]
|
| 76 |
- [[_COMMUNITY_Community 80|Community 80]]
|
| 77 |
- [[_COMMUNITY_Community 81|Community 81]]
|
| 78 |
- [[_COMMUNITY_Community 82|Community 82]]
|
| 79 |
- [[_COMMUNITY_Community 83|Community 83]]
|
| 80 |
-
- [[_COMMUNITY_Community 84|Community 84]]
|
| 81 |
-
- [[_COMMUNITY_Community 85|Community 85]]
|
| 82 |
-
- [[_COMMUNITY_Community 86|Community 86]]
|
| 83 |
-
- [[_COMMUNITY_Community 87|Community 87]]
|
| 84 |
-
- [[_COMMUNITY_Community 88|Community 88]]
|
| 85 |
- [[_COMMUNITY_Community 89|Community 89]]
|
| 86 |
- [[_COMMUNITY_Community 92|Community 92]]
|
| 87 |
- [[_COMMUNITY_Community 94|Community 94]]
|
|
@@ -123,81 +117,81 @@
|
|
| 123 |
10. `NewsProvider` - 19 edges
|
| 124 |
|
| 125 |
## Surprising Connections (you probably didn't know these)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
- `AppwriteDatabase` --uses--> `Article` [INFERRED]
|
| 127 |
app/services/appwrite_db.py → app/models.py
|
| 128 |
- `TablesDBWrapper` --uses--> `Article` [INFERRED]
|
| 129 |
app/services/appwrite_db.py → app/models.py
|
| 130 |
-
- `CacheService` --uses--> `Article` [INFERRED]
|
| 131 |
-
app/services/cache_service.py → app/models.py
|
| 132 |
-
- `NewsAggregator` --uses--> `Article` [INFERRED]
|
| 133 |
-
app/services/news_aggregator.py → app/models.py
|
| 134 |
-
- `GNewsProvider` --uses--> `Article` [INFERRED]
|
| 135 |
-
app/services/news_providers.py → app/models.py
|
| 136 |
|
| 137 |
## Import Cycles
|
| 138 |
- None detected.
|
| 139 |
|
| 140 |
-
## Communities (
|
| 141 |
|
| 142 |
### Community 0 - "Community 0"
|
| 143 |
-
Cohesion: 0.
|
| 144 |
-
Nodes (
|
| 145 |
|
| 146 |
### Community 1 - "Community 1"
|
| 147 |
Cohesion: 0.12
|
| 148 |
-
Nodes (
|
| 149 |
|
| 150 |
### Community 2 - "Community 2"
|
| 151 |
Cohesion: 0.08
|
| 152 |
Nodes (20): _DatetimeEncoder, Any, Execute Redis command via REST API. WARN-002 fixed: was using blockin, Get value from cache Args: key: Cache key, Set value in cache with TTL Args: key: Cache key, Delete key from cache Args: key: Cache key to de, JSON encoder that converts datetime/date objects to ISO-8601 strings. Preve, Push an item to the left of a Redis list (Producer action) Ar (+12 more)
|
| 153 |
|
| 154 |
### Community 4 - "Community 4"
|
| 155 |
-
Cohesion: 0.
|
| 156 |
-
Nodes (27):
|
| 157 |
|
| 158 |
### Community 6 - "Community 6"
|
| 159 |
-
Cohesion: 0.
|
| 160 |
-
Nodes (
|
| 161 |
|
| 162 |
### Community 8 - "Community 8"
|
| 163 |
-
Cohesion: 0.
|
| 164 |
-
Nodes (
|
| 165 |
|
| 166 |
### Community 9 - "Community 9"
|
| 167 |
Cohesion: 0.08
|
| 168 |
-
Nodes (
|
| 169 |
|
| 170 |
### Community 10 - "Community 10"
|
| 171 |
-
Cohesion: 0.
|
| 172 |
-
Nodes (
|
| 173 |
|
| 174 |
### Community 11 - "Community 11"
|
| 175 |
-
Cohesion: 0.
|
| 176 |
-
Nodes (
|
| 177 |
|
| 178 |
### Community 12 - "Community 12"
|
| 179 |
-
Cohesion: 0.
|
| 180 |
-
Nodes (
|
| 181 |
|
| 182 |
### Community 13 - "Community 13"
|
| 183 |
-
Cohesion: 0.
|
| 184 |
-
Nodes (
|
| 185 |
|
| 186 |
### Community 14 - "Community 14"
|
| 187 |
Cohesion: 0.10
|
| 188 |
Nodes (11): get_professional_logger(), IngestionStats, ProfessionalLogger, Professional Logging Module for Segmento Pulse Provides structured logging with, Log scheduler activity, Print comprehensive statistics summary, Get a professional logger instance, Track ingestion pipeline statistics (+3 more)
|
| 189 |
|
| 190 |
### Community 15 - "Community 15"
|
| 191 |
-
Cohesion: 0.
|
| 192 |
-
Nodes (
|
| 193 |
|
| 194 |
### Community 16 - "Community 16"
|
| 195 |
-
Cohesion: 0.
|
| 196 |
-
Nodes (
|
| 197 |
|
| 198 |
### Community 17 - "Community 17"
|
| 199 |
-
Cohesion: 0.
|
| 200 |
-
Nodes (
|
| 201 |
|
| 202 |
### Community 18 - "Community 18"
|
| 203 |
Cohesion: 0.14
|
|
@@ -208,12 +202,12 @@ Cohesion: 0.14
|
|
| 208 |
Nodes (11): estimate_tokens(), Text Chunking Service - Replacing LlamaIndex SentenceSplitter This provides s, Get overlap text from previous chunk Args: chunk, Split text and attach metadata to each chunk Args:, Intelligent text chunker that splits on sentence boundaries Replaces, Rough estimate of token count Args: text: Input text, Initialize SentenceSplitter Args: chunk_size: Ma, Split text into semantic chunks Args: text: Text (+3 more)
|
| 209 |
|
| 210 |
### Community 20 - "Community 20"
|
| 211 |
-
Cohesion: 0.
|
| 212 |
-
Nodes (
|
| 213 |
|
| 214 |
### Community 21 - "Community 21"
|
| 215 |
-
Cohesion: 0.
|
| 216 |
-
Nodes (
|
| 217 |
|
| 218 |
### Community 22 - "Community 22"
|
| 219 |
Cohesion: 0.13
|
|
@@ -228,64 +222,60 @@ Cohesion: 0.12
|
|
| 228 |
Nodes (15): comma_separated_to_list(), detect_html(), extract_domain(), list_to_comma_separated(), normalize_url(), Utility Functions for Segmento Pulse Provides common helpers for text processin, Intelligently strip HTML only if HTML tags are detected. This optimiz, Extract domain from URL. Args: url: Full URL (+7 more)
|
| 229 |
|
| 230 |
### Community 26 - "Community 26"
|
| 231 |
-
Cohesion: 0.
|
| 232 |
-
Nodes (
|
| 233 |
|
| 234 |
### Community 27 - "Community 27"
|
| 235 |
-
Cohesion: 0.
|
| 236 |
-
Nodes (
|
| 237 |
|
| 238 |
### Community 28 - "Community 28"
|
| 239 |
-
Cohesion: 0.
|
| 240 |
-
Nodes (
|
| 241 |
|
| 242 |
### Community 29 - "Community 29"
|
| 243 |
-
Cohesion: 0.
|
| 244 |
-
Nodes (
|
| 245 |
|
| 246 |
### Community 31 - "Community 31"
|
| 247 |
-
Cohesion: 0.
|
| 248 |
-
Nodes (
|
| 249 |
|
| 250 |
### Community 32 - "Community 32"
|
| 251 |
-
Cohesion: 0.
|
| 252 |
-
Nodes (
|
| 253 |
-
|
| 254 |
-
### Community 33 - "Community 33"
|
| 255 |
-
Cohesion: 0.15
|
| 256 |
-
Nodes (5): Appwrite Database Service - Phase 2 Provides persistent storage for news articl, Future-Proofing Wrapper (Migration Phase) Wraps legacy 'documents' API into, # NOTE: Cloud collection DOES accept 'published_at' (snake_case), TablesDBWrapper, Optimized Retrieval Service - UI Performance Enhancement ======================
|
| 257 |
|
| 258 |
### Community 34 - "Community 34"
|
| 259 |
-
Cohesion: 0.
|
| 260 |
-
Nodes (
|
| 261 |
|
| 262 |
### Community 38 - "Community 38"
|
| 263 |
-
Cohesion: 0.
|
| 264 |
-
Nodes (
|
| 265 |
|
| 266 |
### Community 39 - "Community 39"
|
| 267 |
Cohesion: 0.21
|
| 268 |
Nodes (8): HackerNewsProvider, AsyncClient, Step 1: Ask Hacker News for the IDs of its top stories. Returns a lis, Step 2 (single unit): Fetch the details for one Hacker News story. Ar, Convert raw Hacker News JSON items into Segmento Pulse Article objects., For every article that has an empty image_url, visit its URL and try to, Fetches top stories from the Hacker News API. No API key needed. No rate, Fetch the top stories from Hacker News. Args: category (
|
| 269 |
|
| 270 |
### Community 40 - "Community 40"
|
| 271 |
-
Cohesion: 0.
|
| 272 |
-
Nodes (
|
| 273 |
|
| 274 |
### Community 41 - "Community 41"
|
| 275 |
-
Cohesion: 0.
|
| 276 |
-
Nodes (
|
| 277 |
|
| 278 |
### Community 43 - "Community 43"
|
| 279 |
-
Cohesion: 0.
|
| 280 |
Nodes (6): API Endpoints, Configuration, Features, Local Development, SegmentoPulse Backend API, Usage
|
| 281 |
|
| 282 |
### Community 44 - "Community 44"
|
| 283 |
-
Cohesion: 0.
|
| 284 |
-
Nodes (
|
| 285 |
|
| 286 |
### Community 45 - "Community 45"
|
| 287 |
Cohesion: 0.33
|
| 288 |
-
Nodes (
|
| 289 |
|
| 290 |
### Community 46 - "Community 46"
|
| 291 |
Cohesion: 0.22
|
|
@@ -307,10 +297,6 @@ Nodes (6): AudioService, Synchronous wrapper for Groq API, Generate a concise au
|
|
| 307 |
Cohesion: 0.23
|
| 308 |
Nodes (7): AsyncClient, Fetches technology news from Wikinews using the MediaWiki search API. Fre, Fetch tech articles from Wikinews's Computing and Internet categories., Run one MediaWiki search query for articles in a given Wikinews category., Convert MediaWiki search result items into Segmento Pulse Article objects., For every article that has an empty image_url, visit its Wikinews curid, WikinewsProvider
|
| 309 |
|
| 310 |
-
### Community 53 - "Community 53"
|
| 311 |
-
Cohesion: 0.12
|
| 312 |
-
Nodes (17): get_cache_stats(), populate_database(), Start a background cache-warm job for all categories. Fix 2: The old vers, Populate Appwrite database by fetching fresh articles for all categories, Manually trigger the news fetch job (Phase 3) Useful for: - Test, The actual cache-warming work — runs in the background so the HTTP request, Get cache statistics Returns information about: - Which cate, trigger_fetch_job() (+9 more)
|
| 313 |
-
|
| 314 |
### Community 54 - "Community 54"
|
| 315 |
Cohesion: 0.20
|
| 316 |
Nodes (4): BrowserManager, Initialize the global browser instance, Gracefully close the global browser instance, Fetch dynamic content using a fresh context from the shared browser. Co
|
|
@@ -320,16 +306,16 @@ Cohesion: 0.50
|
|
| 320 |
Nodes (3): Parse comma-separated string into list (for HF Spaces secrets), Settings, BaseSettings
|
| 321 |
|
| 322 |
### Community 57 - "Community 57"
|
| 323 |
-
Cohesion: 0.
|
| 324 |
-
Nodes (
|
| 325 |
|
| 326 |
### Community 58 - "Community 58"
|
| 327 |
Cohesion: 0.22
|
| 328 |
Nodes (5): Extract XML tag content, Remove HTML tags and decode entities, Parse Google News RSS feed with advanced XML parsing, Extract image from multiple XML sources with fallbacks, Clean Google News description - they typically only contain links, not actual co
|
| 329 |
|
| 330 |
### Community 62 - "Community 62"
|
| 331 |
-
Cohesion: 0.
|
| 332 |
-
Nodes (
|
| 333 |
|
| 334 |
### Community 63 - "Community 63"
|
| 335 |
Cohesion: 0.31
|
|
@@ -343,10 +329,6 @@ Nodes (5): InshortsProvider, Fetch technology articles from the Inshorts communi
|
|
| 343 |
Cohesion: 0.28
|
| 344 |
Nodes (8): apply_engagement_boost(), apply_time_decay(), filter_by_recency(), Any, Ranking Utilities - Time Decay & Relevance ====================================, Filter out articles older than max_hours. Args: results: Lis, Apply time decay ranking to search results. Formula: Final Score = (1, Boost articles with high engagement (likes, views). Formula: Engageme
|
| 345 |
|
| 346 |
-
### Community 79 - "Community 79"
|
| 347 |
-
Cohesion: 0.29
|
| 348 |
-
Nodes (3): The Reaper: Scans the processing queue for tasks that timed out. If a w, Lazy-load the shared aggregator singleton from scheduler., WorkerManager
|
| 349 |
-
|
| 350 |
### Community 80 - "Community 80"
|
| 351 |
Cohesion: 0.33
|
| 352 |
Nodes (4): Fetches global technology news from WorldNewsAI.com. Paid provider (point, Fetch global technology news from WorldNewsAI. Args: cat, Convert WorldNewsAI JSON items into Segmento Pulse Article objects. K, WorldNewsAIProvider
|
|
@@ -360,40 +342,28 @@ Cohesion: 0.33
|
|
| 360 |
Nodes (6): extract_top_image(), _fetch_and_extract(), app/services/utils/image_enricher.py ──────────────────────────────────────────, Internal helper: download the HTML and pull out the og:image tag. Separat, # NOTE: We pass only the first 10,000 characters to avoid processing huge, Visit an article URL and extract its main (top) image. Looks for the imag
|
| 361 |
|
| 362 |
### Community 83 - "Community 83"
|
| 363 |
-
Cohesion: 0.
|
| 364 |
-
Nodes (
|
| 365 |
-
|
| 366 |
-
### Community 84 - "Community 84"
|
| 367 |
-
Cohesion: 0.33
|
| 368 |
-
Nodes (5): generate_article_id_uuid(), Article ID Generation Utilities ================================ Generates A, Generate Appwrite-compatible UUID from URL Alternative method using U, Validate that document ID meets Appwrite requirements Appwrite docume, validate_appwrite_id()
|
| 369 |
-
|
| 370 |
-
### Community 85 - "Community 85"
|
| 371 |
-
Cohesion: 0.50
|
| 372 |
-
Nodes (4): Response model for search endpoints, SearchResponse, Search news articles by keyword (Direct Aggregation), search_news()
|
| 373 |
-
|
| 374 |
-
### Community 86 - "Community 86"
|
| 375 |
-
Cohesion: 0.50
|
| 376 |
-
Nodes (3): get_quota_tracker(), API Quota Tracking Service Monitors API usage and prevents hitting rate limits, Get or create global quota tracker instance
|
| 377 |
|
| 378 |
## Knowledge Gaps
|
| 379 |
-
- **
|
| 380 |
These have ≤1 connection - possible missing edges or undocumented components.
|
| 381 |
- **35 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
| 382 |
|
| 383 |
## Suggested Questions
|
| 384 |
_Questions this graph is uniquely positioned to answer:_
|
| 385 |
|
| 386 |
-
- **Why does `Article` connect `Community 27` to `Community 4`, `Community 9`, `Community 16`, `Community 24`, `Community 26`, `Community 28`, `Community 29`, `Community
|
| 387 |
-
_High betweenness centrality (0.
|
| 388 |
-
- **Why does `get_appwrite_db()` connect `Community
|
| 389 |
-
_High betweenness centrality (0.
|
| 390 |
-
- **Why does `get_upstash_cache()` connect `Community
|
| 391 |
-
_High betweenness centrality (0.
|
| 392 |
- **Are the 26 inferred relationships involving `Article` (e.g. with `AppwriteDatabase` and `TablesDBWrapper`) actually correct?**
|
| 393 |
_`Article` has 26 INFERRED edges - model-reasoned connections that need verification._
|
| 394 |
- **Are the 12 inferred relationships involving `RSSParser` (e.g. with `NewsAggregator` and `GNewsProvider`) actually correct?**
|
| 395 |
_`RSSParser` has 12 INFERRED edges - model-reasoned connections that need verification._
|
| 396 |
- **What connects `Segmento Pulse Backend API FastAPI application for real-time technology news ag`, `Parse comma-separated string into list (for HF Spaces secrets)`, `Application lifespan manager Handles startup and shutdown events for` to the rest of the system?**
|
| 397 |
-
|
| 398 |
-
- **Should `Community
|
| 399 |
-
_Cohesion score 0.
|
|
|
|
| 1 |
+
# Graph Report - backend (2026-08-24)
|
| 2 |
|
| 3 |
## Corpus Check
|
| 4 |
+
- 87 files · ~74,093 words
|
| 5 |
- Verdict: corpus is large enough that graph structure adds value.
|
| 6 |
|
| 7 |
## Summary
|
| 8 |
+
- 1093 nodes · 1800 edges · 130 communities (95 shown, 35 thin omitted)
|
| 9 |
+
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 79 edges (avg confidence: 0.53)
|
| 10 |
- Token cost: 0 input · 0 output
|
| 11 |
|
| 12 |
## Graph Freshness
|
| 13 |
+
- Built from commit: `f7d7d04d`
|
| 14 |
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
| 15 |
- Run `graphify update .` after code changes (no API cost).
|
| 16 |
|
|
|
|
| 72 |
- [[_COMMUNITY_Community 63|Community 63]]
|
| 73 |
- [[_COMMUNITY_Community 77|Community 77]]
|
| 74 |
- [[_COMMUNITY_Community 78|Community 78]]
|
|
|
|
| 75 |
- [[_COMMUNITY_Community 80|Community 80]]
|
| 76 |
- [[_COMMUNITY_Community 81|Community 81]]
|
| 77 |
- [[_COMMUNITY_Community 82|Community 82]]
|
| 78 |
- [[_COMMUNITY_Community 83|Community 83]]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
- [[_COMMUNITY_Community 89|Community 89]]
|
| 80 |
- [[_COMMUNITY_Community 92|Community 92]]
|
| 81 |
- [[_COMMUNITY_Community 94|Community 94]]
|
|
|
|
| 117 |
10. `NewsProvider` - 19 edges
|
| 118 |
|
| 119 |
## Surprising Connections (you probably didn't know these)
|
| 120 |
+
- `TestNewsProcessorMetrics` --uses--> `IngestionMetrics` [INFERRED]
|
| 121 |
+
tests/test_quality_rescue.py → app/services/ingestion_metrics.py
|
| 122 |
+
- `TestQualityScoreRescue` --uses--> `IngestionMetrics` [INFERRED]
|
| 123 |
+
tests/test_quality_rescue.py → app/services/ingestion_metrics.py
|
| 124 |
+
- `TestIngestionMetrics` --uses--> `IngestionMetrics` [INFERRED]
|
| 125 |
+
tests/test_quality_rescue.py → app/services/ingestion_metrics.py
|
| 126 |
- `AppwriteDatabase` --uses--> `Article` [INFERRED]
|
| 127 |
app/services/appwrite_db.py → app/models.py
|
| 128 |
- `TablesDBWrapper` --uses--> `Article` [INFERRED]
|
| 129 |
app/services/appwrite_db.py → app/models.py
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
|
| 131 |
## Import Cycles
|
| 132 |
- None detected.
|
| 133 |
|
| 134 |
+
## Communities (130 total, 35 thin omitted)
|
| 135 |
|
| 136 |
### Community 0 - "Community 0"
|
| 137 |
+
Cohesion: 0.22
|
| 138 |
+
Nodes (10): _build_category_regex(), calculate_quality_score(), generate_slug(), Data Validation and Sanitization Layer FAANG-Level Quality Control for News Art, Clean and normalize article data HOTFIX: Now handles both Pydantic Ar, Generate URL-friendly slug from title Example: "Google Announces New, Score article quality from 0-100 Higher scores = better quality artic, # NOTE: 'cloud-computing' is kept here because it is an active category in (+2 more)
|
| 139 |
|
| 140 |
### Community 1 - "Community 1"
|
| 141 |
Cohesion: 0.12
|
| 142 |
+
Nodes (14): NewsResponse, Response model for news endpoints, get_news_by_category(), get_rss_feed(), get_umbrella_news(), Get news articles by category with cursor pagination and stale-while-revalidate, Aggregation endpoint for umbrella categories (data, cloud, latest-articles)., Get RSS feed from cloud providers Providers: aws, gcp, azure, ibm, or (+6 more)
|
| 143 |
|
| 144 |
### Community 2 - "Community 2"
|
| 145 |
Cohesion: 0.08
|
| 146 |
Nodes (20): _DatetimeEncoder, Any, Execute Redis command via REST API. WARN-002 fixed: was using blockin, Get value from cache Args: key: Cache key, Set value in cache with TTL Args: key: Cache key, Delete key from cache Args: key: Cache key to de, JSON encoder that converts datetime/date objects to ISO-8601 strings. Preve, Push an item to the left of a Redis list (Producer action) Ar (+12 more)
|
| 147 |
|
| 148 |
### Community 4 - "Community 4"
|
| 149 |
+
Cohesion: 0.09
|
| 150 |
+
Nodes (27): NewsAggregator, # NOTE: 'inshorts' removed — 100% connection-reset failures on HF Spaces (geo-bl, # NOTE: 'wikinews' removed — returns stale 2009-era political articles (0 keywor, Service for aggregating news from multiple sources with automatic failover, Get usage statistics for monitoring, GNewsProvider, GoogleNewsRSSProvider, NewsAPIProvider (+19 more)
|
| 151 |
|
| 152 |
### Community 6 - "Community 6"
|
| 153 |
+
Cohesion: 0.27
|
| 154 |
+
Nodes (6): AsyncClient, Fetch tech headlines from the India and US static JSON files. Both fi, Download one regional JSON file and parse its articles. Args:, Convert raw NewsAPI-format JSON items into Segmento Pulse Article objects., Reads top tech headlines from two static JSON files on GitHub Pages. Cove, SauravKanchanProvider
|
| 155 |
|
| 156 |
### Community 8 - "Community 8"
|
| 157 |
+
Cohesion: 0.11
|
| 158 |
+
Nodes (13): URL Deduplication Service using Scalable Bloom Filter =========================, Create a new scalable bloom filter, Check if URL is new and add it to the filter Args:, Persist Scalable Bloom Filter to disk using pickle, Get deduplication statistics, Print deduplication statistics, Reset the filter (use with caution), Estimate current memory usage Note: ScalableBloomFilter memor (+5 more)
|
| 159 |
|
| 160 |
### Community 9 - "Community 9"
|
| 161 |
Cohesion: 0.08
|
| 162 |
+
Nodes (28): ABC, NewsProvider, ProviderStatus, Check if this provider is ready to accept a fetch request. Returns Fa, Task 4: Implement exponential backoff for 429 (Too Many Requests). Inst, Call this when the API returns a 429 (Too Many Requests). The status ch, Reset this provider's call counter back to zero. Called once per day (m, Represents the health of a provider at any given moment. ACTIVE → P (+20 more)
|
| 163 |
|
| 164 |
### Community 10 - "Community 10"
|
| 165 |
+
Cohesion: 0.08
|
| 166 |
+
Nodes (14): FirebaseService, Increment view count for an article, Get view count for an article, Firebase Realtime Database service for analytics (optional), Add or Update subscriber in database Now supports merging 'subscription, Get subscriber by email, Get subscriber by unsubscribe token, Initialize Firebase Admin SDK (+6 more)
|
| 167 |
|
| 168 |
### Community 11 - "Community 11"
|
| 169 |
+
Cohesion: 0.07
|
| 170 |
+
Nodes (24): CircuitState, get_circuit_breaker(), ProviderCircuitBreaker, Provider Circuit Breaker ======================== Prevents wasting time/band, # NOTE: We deliberately do NOT try to load Redis state here., Build the Redis key for a provider's circuit state., On server boot, check Redis for any circuit states that were open befor, Write 'circuit:{provider}:state = open' to Redis with a 1-hour TTL. Cal (+16 more)
|
| 171 |
|
| 172 |
### Community 12 - "Community 12"
|
| 173 |
+
Cohesion: 0.15
|
| 174 |
+
Nodes (15): cache_health_check(), clear_cache(), get_cache_stats(), get_ingestion_alerts(), get_ingestion_stats(), _get_recommendations(), Cache Monitoring and Metrics API ================================= Provides, Simple health check endpoint for cache connectivity. Returns: (+7 more)
|
| 175 |
|
| 176 |
### Community 13 - "Community 13"
|
| 177 |
+
Cohesion: 0.31
|
| 178 |
+
Nodes (4): is_relevant_to_category(), Check whether an article belongs to the given category. Uses pre-compiled, TestNewsProcessorMetrics, TestQualityScoreRescue
|
| 179 |
|
| 180 |
### Community 14 - "Community 14"
|
| 181 |
Cohesion: 0.10
|
| 182 |
Nodes (11): get_professional_logger(), IngestionStats, ProfessionalLogger, Professional Logging Module for Segmento Pulse Provides structured logging with, Log scheduler activity, Print comprehensive statistics summary, Get a professional logger instance, Track ingestion pipeline statistics (+3 more)
|
| 183 |
|
| 184 |
### Community 15 - "Community 15"
|
| 185 |
+
Cohesion: 0.11
|
| 186 |
+
Nodes (15): AdaptiveScheduler, Adaptive Scheduler for Dynamic Category Fetching Automatically adjusts fetch, Update velocity tracking and calculate new interval Args:, # NOTE: We no longer call _save_velocity_data() here., Save velocity data to Redis using a non-blocking async HTTP call. Why, Get current interval for a category, Get velocity statistics for all categories, Print velocity summary (+7 more)
|
| 187 |
|
| 188 |
### Community 16 - "Community 16"
|
| 189 |
+
Cohesion: 0.07
|
| 190 |
+
Nodes (38): ErrorResponse, Request model for view count increment, Response model for view count, ViewCountRequest, ViewCountResponse, get_view_count(), increment_view_count(), Increment view count for an article (+30 more)
|
| 191 |
|
| 192 |
### Community 17 - "Community 17"
|
| 193 |
+
Cohesion: 0.10
|
| 194 |
+
Nodes (26): get_research_paper(), Get a single research paper by ID., alert_high_failure_rate(), alert_quota_exhausted(), alert_zero_articles(), Admin Alerting Service Sends real-time alerts via webhooks (Discord/Slack) for, Alert: Warning - Brevo API quota exhausted, Alert: Error - High email failure rate (+18 more)
|
| 195 |
|
| 196 |
### Community 18 - "Community 18"
|
| 197 |
Cohesion: 0.14
|
|
|
|
| 202 |
Nodes (11): estimate_tokens(), Text Chunking Service - Replacing LlamaIndex SentenceSplitter This provides s, Get overlap text from previous chunk Args: chunk, Split text and attach metadata to each chunk Args:, Intelligent text chunker that splits on sentence boundaries Replaces, Rough estimate of token count Args: text: Input text, Initialize SentenceSplitter Args: chunk_size: Ma, Split text into semantic chunks Args: text: Text (+3 more)
|
| 203 |
|
| 204 |
### Community 20 - "Community 20"
|
| 205 |
+
Cohesion: 0.22
|
| 206 |
+
Nodes (8): Further Notes, Implementation Decisions, Out of Scope, Problem Statement, Solution, Spec: Quality-Score Rescue — Reduce Wrongful Article Rejections, Testing Decisions, User Stories
|
| 207 |
|
| 208 |
### Community 21 - "Community 21"
|
| 209 |
+
Cohesion: 0.17
|
| 210 |
+
Nodes (7): IngestionMetrics, Ingestion Statistics Tracking Monitors ingestion performance, duplicate rates,, Track ingestion metrics over time, Record metrics from an ingestion run, Get current ingestion statistics, Check if any metrics exceed thresholds, TestIngestionMetrics
|
| 211 |
|
| 212 |
### Community 22 - "Community 22"
|
| 213 |
Cohesion: 0.13
|
|
|
|
| 222 |
Nodes (15): comma_separated_to_list(), detect_html(), extract_domain(), list_to_comma_separated(), normalize_url(), Utility Functions for Segmento Pulse Provides common helpers for text processin, Intelligently strip HTML only if HTML tags are detected. This optimiz, Extract domain from URL. Args: url: Full URL (+7 more)
|
| 223 |
|
| 224 |
### Community 26 - "Community 26"
|
| 225 |
+
Cohesion: 0.18
|
| 226 |
+
Nodes (10): AsyncClient, Fetch articles from all OpenRSS feeds — but only if 60 minutes have pas, Fetch one OpenRSS feed URL and parse its XML into Article objects. Ar, Parse raw XML from an OpenRSS feed into Article objects. Uses feedpar, get_provider_timestamp(), Save a provider's last-fetch timestamp to Redis. Always call this BEFORE, Build the Redis key string for a provider's last-fetch timestamp. Example, Read the last-fetch timestamp for a provider from Redis. Returns a Unix t (+2 more)
|
| 227 |
|
| 228 |
### Community 27 - "Community 27"
|
| 229 |
+
Cohesion: 0.08
|
| 230 |
+
Nodes (16): Article, Parse datetime from various formats including RFC 2822 (RSS feeds), Fetch news from ALL available sources for a category. Strategy (Phase, Fetch news specifically from a named provider (bypassing priority/failover), Fetch RSS from cloud providers, Search news articles using hybrid approach Currently uses Google News R, Parse GNews API response, Parse NewsAPI response (+8 more)
|
| 231 |
|
| 232 |
### Community 28 - "Community 28"
|
| 233 |
+
Cohesion: 0.09
|
| 234 |
+
Nodes (23): get_adaptive_scheduler(), Get or create adaptive scheduler instance, Cache Service using Redis Provides caching layer to reduce external API calls w, process_category(), News Processor Service Handles the heavy lifting of fetching, validating, and s, Core logic: Fetch -> Validate -> Save -> Update Adaptive Interval, # NOTE: fetched_approx excludes Redis-dedup volume (not returned by, get_upstash_cache() (+15 more)
|
| 235 |
|
| 236 |
### Community 29 - "Community 29"
|
| 237 |
+
Cohesion: 0.09
|
| 238 |
+
Nodes (29): health_check(), lifespan(), Live Health Dashboard — Phase 23 What this shows: Instead of a h, Enhanced health check endpoint with scheduler status Used by external monit, Application lifespan manager Handles startup and shutdown events for, root(), get_provider_stats(), Get statistics about news provider usage and health Returns informati (+21 more)
|
| 239 |
|
| 240 |
### Community 31 - "Community 31"
|
| 241 |
+
Cohesion: 0.12
|
| 242 |
+
Nodes (25): dislike_article(), EngagementRequest, get_article_stats(), get_popular_cloud_articles(), get_trending_articles(), like_article(), Engagement API Endpoints Handles article likes, views tracking, and trending ar, Increment like count for an article. (+17 more)
|
| 243 |
|
| 244 |
### Community 32 - "Community 32"
|
| 245 |
+
Cohesion: 0.07
|
| 246 |
+
Nodes (35): bloom_filter_health_check(), cleanup_old_articles(), get_bloom_filter_stats(), get_database_stats(), get_scheduler_status(), get_subscriber_analytics(), populate_database(), preview_newsletter_content() (+27 more)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
|
| 248 |
### Community 34 - "Community 34"
|
| 249 |
+
Cohesion: 0.06
|
| 250 |
+
Nodes (26): Response model for search endpoints, SearchResponse, clear_cache(), get_cache_stats(), Clear all cached news data Useful for testing or forcing a fresh data, Start a background cache-warm job for all categories. Fix 2: The old vers, The actual cache-warming work — runs in the background so the HTTP request, Get cache statistics Returns information about: - Which cate (+18 more)
|
| 251 |
|
| 252 |
### Community 38 - "Community 38"
|
| 253 |
+
Cohesion: 0.12
|
| 254 |
+
Nodes (12): get_quota_stats(), Get API quota usage statistics Tracks usage for: - GNews API (10, APIQuotaTracker, get_quota_tracker(), API Quota Tracking Service Monitors API usage and prevents hitting rate limits, Get current quota usage statistics, Track API usage and enforce rate limits, Check if we can still call this paid provider today. Reads the curren (+4 more)
|
| 255 |
|
| 256 |
### Community 39 - "Community 39"
|
| 257 |
Cohesion: 0.21
|
| 258 |
Nodes (8): HackerNewsProvider, AsyncClient, Step 1: Ask Hacker News for the IDs of its top stories. Returns a lis, Step 2 (single unit): Fetch the details for one Hacker News story. Ar, Convert raw Hacker News JSON items into Segmento Pulse Article objects., For every article that has an empty image_url, visit its URL and try to, Fetches top stories from the Hacker News API. No API key needed. No rate, Fetch the top stories from Hacker News. Args: category (
|
| 259 |
|
| 260 |
### Community 40 - "Community 40"
|
| 261 |
+
Cohesion: 0.05
|
| 262 |
+
Nodes (24): AppwriteDatabase, Any, Get all subscribers (Source of Truth) Used by admin analytics., Get database statistics Returns: Dictionary with, Appwrite Database service for persistent article storage (L2 cache), Initialize Appwrite client and database connection, Phase 4: Strict Routing Algorithm (Vertical Architecture), Generate a unique hash for an article URL. **INTEGRATION UPDATE**: Ma (+16 more)
|
| 263 |
|
| 264 |
### Community 41 - "Community 41"
|
| 265 |
+
Cohesion: 0.29
|
| 266 |
+
Nodes (6): Final verification checklist (run after all tickets complete), Ticket 0 — pytest harness setup, Ticket 1 — `QUALITY_RESCUE_THRESHOLD` constant + rescue path in `is_relevant_to_category()`, Ticket 2 — `irrelevant_count` tracking in `IngestionMetrics` (with `_approx` naming), Ticket 3 — Wire `irrelevant_count` through `news_processor.py` into `record_run()`, Tickets: Quality-Score Rescue
|
| 267 |
|
| 268 |
### Community 43 - "Community 43"
|
| 269 |
+
Cohesion: 0.29
|
| 270 |
Nodes (6): API Endpoints, Configuration, Features, Local Development, SegmentoPulse Backend API, Usage
|
| 271 |
|
| 272 |
### Community 44 - "Community 44"
|
| 273 |
+
Cohesion: 0.33
|
| 274 |
+
Nodes (6): Manually trigger the cleanup job (Phase 3) Deletes articles older tha, trigger_cleanup_job(), cleanup_old_news(), Background Job: Delete articles older than 48 hours from ALL collections, Manually trigger cleanup, trigger_cleanup_now()
|
| 275 |
|
| 276 |
### Community 45 - "Community 45"
|
| 277 |
Cohesion: 0.33
|
| 278 |
+
Nodes (5): _chunk_list(), _format_for_api(), Query Builder Utility (Phase 20 — Dynamic Round-Robin Query Builder) =========, Splits a flat list into groups of `size`. Example: _chunk_list([, Converts a list of keywords into the query string format a specific API expects.
|
| 279 |
|
| 280 |
### Community 46 - "Community 46"
|
| 281 |
Cohesion: 0.22
|
|
|
|
| 297 |
Cohesion: 0.23
|
| 298 |
Nodes (7): AsyncClient, Fetches technology news from Wikinews using the MediaWiki search API. Fre, Fetch tech articles from Wikinews's Computing and Internet categories., Run one MediaWiki search query for articles in a given Wikinews category., Convert MediaWiki search result items into Segmento Pulse Article objects., For every article that has an empty image_url, visit its Wikinews curid, WikinewsProvider
|
| 299 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 300 |
### Community 54 - "Community 54"
|
| 301 |
Cohesion: 0.20
|
| 302 |
Nodes (4): BrowserManager, Initialize the global browser instance, Gracefully close the global browser instance, Fetch dynamic content using a fresh context from the shared browser. Co
|
|
|
|
| 306 |
Nodes (3): Parse comma-separated string into list (for HF Spaces secrets), Settings, BaseSettings
|
| 307 |
|
| 308 |
### Community 57 - "Community 57"
|
| 309 |
+
Cohesion: 0.19
|
| 310 |
+
Nodes (8): Fetch news from GNews API. Why no 'from'/'to' date filter here?, Fetch news from NewsAPI. Phase 20 upgrade: The query string is now bu, Fetch news from NewsData.io, Parse NewsData.io response, Implement exponential backoff for 429 Too Many Requests, Fetch news from Google News RSS, build_dynamic_query(), Build a query string for the given category using the Anchor + Round-Robin
|
| 311 |
|
| 312 |
### Community 58 - "Community 58"
|
| 313 |
Cohesion: 0.22
|
| 314 |
Nodes (5): Extract XML tag content, Remove HTML tags and decode entities, Parse Google News RSS feed with advanced XML parsing, Extract image from multiple XML sources with fallbacks, Clean Google News description - they typically only contain links, not actual co
|
| 315 |
|
| 316 |
### Community 62 - "Community 62"
|
| 317 |
+
Cohesion: 0.19
|
| 318 |
+
Nodes (13): fetch_and_validate_category(), Fetch and validate articles for a single category. Args: categor, is_valid_article(), Validate article data quality before database insertion HOTFIX: Now h, is_url_seen_or_mark(), Redis URL Deduplication Bouncer ================================ This is the, Check if we have seen this article URL in the last 48 hours. If we have NOT, canonicalize_url() (+5 more)
|
| 319 |
|
| 320 |
### Community 63 - "Community 63"
|
| 321 |
Cohesion: 0.31
|
|
|
|
| 329 |
Cohesion: 0.28
|
| 330 |
Nodes (8): apply_engagement_boost(), apply_time_decay(), filter_by_recency(), Any, Ranking Utilities - Time Decay & Relevance ====================================, Filter out articles older than max_hours. Args: results: Lis, Apply time decay ranking to search results. Formula: Final Score = (1, Boost articles with high engagement (likes, views). Formula: Engageme
|
| 331 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 332 |
### Community 80 - "Community 80"
|
| 333 |
Cohesion: 0.33
|
| 334 |
Nodes (4): Fetches global technology news from WorldNewsAI.com. Paid provider (point, Fetch global technology news from WorldNewsAI. Args: cat, Convert WorldNewsAI JSON items into Segmento Pulse Article objects. K, WorldNewsAIProvider
|
|
|
|
| 342 |
Nodes (6): extract_top_image(), _fetch_and_extract(), app/services/utils/image_enricher.py ──────────────────────────────────────────, Internal helper: download the HTML and pull out the og:image tag. Separat, # NOTE: We pass only the first 10,000 characters to avoid processing huge, Visit an article URL and extract its main (top) image. Looks for the imag
|
| 343 |
|
| 344 |
### Community 83 - "Community 83"
|
| 345 |
+
Cohesion: 0.29
|
| 346 |
+
Nodes (7): normalize_article_date(), parse_date_to_iso(), Date Parsing and Normalization Utility FAANG-Level Quality Control for Publishe, Validate that a date string is in strict ISO-8601 UTC format Expected, Parse any date format and convert to strict ISO-8601 UTC Handles:, Normalize the publishedAt field in an article HOTFIX (2026-01-23): No, validate_date_format()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 347 |
|
| 348 |
## Knowledge Gaps
|
| 349 |
+
- **50 isolated node(s):** `graphify`, `Workflow: graphify`, `Features`, `API Endpoints`, `Configuration` (+45 more)
|
| 350 |
These have ≤1 connection - possible missing edges or undocumented components.
|
| 351 |
- **35 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
| 352 |
|
| 353 |
## Suggested Questions
|
| 354 |
_Questions this graph is uniquely positioned to answer:_
|
| 355 |
|
| 356 |
+
- **Why does `Article` connect `Community 27` to `Community 4`, `Community 6`, `Community 9`, `Community 16`, `Community 17`, `Community 24`, `Community 26`, `Community 28`, `Community 29`, `Community 33`, `Community 34`, `Community 39`, `Community 40`, `Community 52`, `Community 57`, `Community 58`, `Community 62`, `Community 63`, `Community 77`, `Community 80`, `Community 81`?**
|
| 357 |
+
_High betweenness centrality (0.193) - this node is a cross-community bridge._
|
| 358 |
+
- **Why does `get_appwrite_db()` connect `Community 17` to `Community 32`, `Community 34`, `Community 40`, `Community 44`, `Community 46`, `Community 16`, `Community 51`, `Community 28`, `Community 29`, `Community 31`?**
|
| 359 |
+
_High betweenness centrality (0.096) - this node is a cross-community bridge._
|
| 360 |
+
- **Why does `get_upstash_cache()` connect `Community 28` to `Community 32`, `Community 34`, `Community 2`, `Community 38`, `Community 9`, `Community 11`, `Community 12`, `Community 26`, `Community 29`, `Community 62`?**
|
| 361 |
+
_High betweenness centrality (0.077) - this node is a cross-community bridge._
|
| 362 |
- **Are the 26 inferred relationships involving `Article` (e.g. with `AppwriteDatabase` and `TablesDBWrapper`) actually correct?**
|
| 363 |
_`Article` has 26 INFERRED edges - model-reasoned connections that need verification._
|
| 364 |
- **Are the 12 inferred relationships involving `RSSParser` (e.g. with `NewsAggregator` and `GNewsProvider`) actually correct?**
|
| 365 |
_`RSSParser` has 12 INFERRED edges - model-reasoned connections that need verification._
|
| 366 |
- **What connects `Segmento Pulse Backend API FastAPI application for real-time technology news ag`, `Parse comma-separated string into list (for HF Spaces secrets)`, `Application lifespan manager Handles startup and shutdown events for` to the rest of the system?**
|
| 367 |
+
_489 weakly-connected nodes found - possible documentation gaps or missing edges._
|
| 368 |
+
- **Should `Community 1` be split into smaller, more focused modules?**
|
| 369 |
+
_Cohesion score 0.12418300653594772 - nodes in this community are weakly interconnected._
|
graphify-out/2026-08-24/graph.json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
graphify-out/2026-08-24/manifest.json
CHANGED
|
@@ -140,9 +140,9 @@
|
|
| 140 |
"semantic_hash": "9aed768ac1ab1b097db8c3495e4accde"
|
| 141 |
},
|
| 142 |
"app/services/ingestion_metrics.py": {
|
| 143 |
-
"mtime":
|
| 144 |
-
"ast_hash": "
|
| 145 |
-
"semantic_hash": "
|
| 146 |
},
|
| 147 |
"app/services/news_aggregator.py": {
|
| 148 |
"mtime": 1781514962.4688468,
|
|
@@ -150,9 +150,9 @@
|
|
| 150 |
"semantic_hash": "b7a259c6252f6477c6bdb1c14b76c70d"
|
| 151 |
},
|
| 152 |
"app/services/news_processor.py": {
|
| 153 |
-
"mtime":
|
| 154 |
-
"ast_hash": "
|
| 155 |
-
"semantic_hash": "
|
| 156 |
},
|
| 157 |
"app/services/news_providers.py": {
|
| 158 |
"mtime": 1781514962.4703689,
|
|
@@ -335,9 +335,9 @@
|
|
| 335 |
"semantic_hash": "86f0e38b40cd9a4e2d526085d1713194"
|
| 336 |
},
|
| 337 |
"app/utils/data_validation.py": {
|
| 338 |
-
"mtime":
|
| 339 |
-
"ast_hash": "
|
| 340 |
-
"semantic_hash": "
|
| 341 |
},
|
| 342 |
"app/utils/date_parser.py": {
|
| 343 |
"mtime": 1781514962.5117342,
|
|
@@ -413,5 +413,35 @@
|
|
| 413 |
"mtime": 1781514962.608238,
|
| 414 |
"ast_hash": "c6d261f13470968633d01d75c69bccd5",
|
| 415 |
"semantic_hash": "c6d261f13470968633d01d75c69bccd5"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 416 |
}
|
| 417 |
}
|
|
|
|
| 140 |
"semantic_hash": "9aed768ac1ab1b097db8c3495e4accde"
|
| 141 |
},
|
| 142 |
"app/services/ingestion_metrics.py": {
|
| 143 |
+
"mtime": 1787313822.596181,
|
| 144 |
+
"ast_hash": "fa6ffea26638acd6322834fe8950d394",
|
| 145 |
+
"semantic_hash": ""
|
| 146 |
},
|
| 147 |
"app/services/news_aggregator.py": {
|
| 148 |
"mtime": 1781514962.4688468,
|
|
|
|
| 150 |
"semantic_hash": "b7a259c6252f6477c6bdb1c14b76c70d"
|
| 151 |
},
|
| 152 |
"app/services/news_processor.py": {
|
| 153 |
+
"mtime": 1787313906.6372898,
|
| 154 |
+
"ast_hash": "3bdc72481805c9e06b2762f1f10605c7",
|
| 155 |
+
"semantic_hash": ""
|
| 156 |
},
|
| 157 |
"app/services/news_providers.py": {
|
| 158 |
"mtime": 1781514962.4703689,
|
|
|
|
| 335 |
"semantic_hash": "86f0e38b40cd9a4e2d526085d1713194"
|
| 336 |
},
|
| 337 |
"app/utils/data_validation.py": {
|
| 338 |
+
"mtime": 1787313714.3286016,
|
| 339 |
+
"ast_hash": "3c05cce47717f23479699c8770ff7a0f",
|
| 340 |
+
"semantic_hash": ""
|
| 341 |
},
|
| 342 |
"app/utils/date_parser.py": {
|
| 343 |
"mtime": 1781514962.5117342,
|
|
|
|
| 413 |
"mtime": 1781514962.608238,
|
| 414 |
"ast_hash": "c6d261f13470968633d01d75c69bccd5",
|
| 415 |
"semantic_hash": "c6d261f13470968633d01d75c69bccd5"
|
| 416 |
+
},
|
| 417 |
+
"tests/test_quality_rescue.py": {
|
| 418 |
+
"mtime": 1787313849.4597816,
|
| 419 |
+
"ast_hash": "81487865f9af449752468d6eb2320007",
|
| 420 |
+
"semantic_hash": ""
|
| 421 |
+
},
|
| 422 |
+
"tests/test_smoke.py": {
|
| 423 |
+
"mtime": 1787313339.8659484,
|
| 424 |
+
"ast_hash": "4ec114b151d942bb1c1ca67228d5998c",
|
| 425 |
+
"semantic_hash": ""
|
| 426 |
+
},
|
| 427 |
+
"SPEC_quality_score_rescue.md": {
|
| 428 |
+
"mtime": 1787312784.771174,
|
| 429 |
+
"ast_hash": "cc34f04777ee9580e98d5f2d48a7bd88",
|
| 430 |
+
"semantic_hash": ""
|
| 431 |
+
},
|
| 432 |
+
"TICKETS_quality_score_rescue.md": {
|
| 433 |
+
"mtime": 1787312756.814512,
|
| 434 |
+
"ast_hash": "2d41b128ced733adc19f0edaa3048cce",
|
| 435 |
+
"semantic_hash": ""
|
| 436 |
+
},
|
| 437 |
+
"UBIQUITOUS_LANGUAGE.md": {
|
| 438 |
+
"mtime": 1787312797.962652,
|
| 439 |
+
"ast_hash": "fd78fddcd85ee12d5eede6021a61eeb0",
|
| 440 |
+
"semantic_hash": ""
|
| 441 |
+
},
|
| 442 |
+
"requirements-dev.txt": {
|
| 443 |
+
"mtime": 1787313321.3640547,
|
| 444 |
+
"ast_hash": "eac373b319f56841db5563a98f9c98c4",
|
| 445 |
+
"semantic_hash": ""
|
| 446 |
}
|
| 447 |
}
|
graphify-out/GRAPH_REPORT.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
| 1 |
# Graph Report - backend (2026-08-24)
|
| 2 |
|
| 3 |
## Corpus Check
|
| 4 |
-
- 87 files · ~
|
| 5 |
- Verdict: corpus is large enough that graph structure adds value.
|
| 6 |
|
| 7 |
## Summary
|
| 8 |
-
-
|
| 9 |
-
- Extraction:
|
| 10 |
- Token cost: 0 input · 0 output
|
| 11 |
|
| 12 |
## Graph Freshness
|
| 13 |
-
- Built from commit: `
|
| 14 |
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
| 15 |
- Run `graphify update .` after code changes (no API cost).
|
| 16 |
|
|
@@ -76,6 +76,10 @@
|
|
| 76 |
- [[_COMMUNITY_Community 81|Community 81]]
|
| 77 |
- [[_COMMUNITY_Community 82|Community 82]]
|
| 78 |
- [[_COMMUNITY_Community 83|Community 83]]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
- [[_COMMUNITY_Community 89|Community 89]]
|
| 80 |
- [[_COMMUNITY_Community 92|Community 92]]
|
| 81 |
- [[_COMMUNITY_Community 94|Community 94]]
|
|
@@ -108,8 +112,8 @@
|
|
| 108 |
1. `Article` - 89 edges
|
| 109 |
2. `get_appwrite_db()` - 47 edges
|
| 110 |
3. `get_upstash_cache()` - 33 edges
|
| 111 |
-
4. `
|
| 112 |
-
5. `
|
| 113 |
6. `NewsProvider` - 28 edges
|
| 114 |
7. `AppwriteDatabase` - 26 edges
|
| 115 |
8. `NewsAggregator` - 24 edges
|
|
@@ -131,71 +135,71 @@
|
|
| 131 |
## Import Cycles
|
| 132 |
- None detected.
|
| 133 |
|
| 134 |
-
## Communities (
|
| 135 |
|
| 136 |
### Community 0 - "Community 0"
|
| 137 |
Cohesion: 0.22
|
| 138 |
Nodes (10): _build_category_regex(), calculate_quality_score(), generate_slug(), Data Validation and Sanitization Layer FAANG-Level Quality Control for News Art, Clean and normalize article data HOTFIX: Now handles both Pydantic Ar, Generate URL-friendly slug from title Example: "Google Announces New, Score article quality from 0-100 Higher scores = better quality artic, # NOTE: 'cloud-computing' is kept here because it is an active category in (+2 more)
|
| 139 |
|
| 140 |
### Community 1 - "Community 1"
|
| 141 |
-
Cohesion: 0.
|
| 142 |
-
Nodes (
|
| 143 |
|
| 144 |
### Community 2 - "Community 2"
|
| 145 |
Cohesion: 0.08
|
| 146 |
Nodes (20): _DatetimeEncoder, Any, Execute Redis command via REST API. WARN-002 fixed: was using blockin, Get value from cache Args: key: Cache key, Set value in cache with TTL Args: key: Cache key, Delete key from cache Args: key: Cache key to de, JSON encoder that converts datetime/date objects to ISO-8601 strings. Preve, Push an item to the left of a Redis list (Producer action) Ar (+12 more)
|
| 147 |
|
| 148 |
### Community 4 - "Community 4"
|
| 149 |
-
Cohesion: 0.
|
| 150 |
-
Nodes (
|
| 151 |
|
| 152 |
### Community 6 - "Community 6"
|
| 153 |
Cohesion: 0.27
|
| 154 |
Nodes (6): AsyncClient, Fetch tech headlines from the India and US static JSON files. Both fi, Download one regional JSON file and parse its articles. Args:, Convert raw NewsAPI-format JSON items into Segmento Pulse Article objects., Reads top tech headlines from two static JSON files on GitHub Pages. Cove, SauravKanchanProvider
|
| 155 |
|
| 156 |
### Community 8 - "Community 8"
|
| 157 |
-
Cohesion: 0.
|
| 158 |
-
Nodes (
|
| 159 |
|
| 160 |
### Community 9 - "Community 9"
|
| 161 |
Cohesion: 0.08
|
| 162 |
-
Nodes (
|
| 163 |
|
| 164 |
### Community 10 - "Community 10"
|
| 165 |
-
Cohesion: 0.
|
| 166 |
-
Nodes (
|
| 167 |
|
| 168 |
### Community 11 - "Community 11"
|
| 169 |
-
Cohesion: 0.
|
| 170 |
-
Nodes (
|
| 171 |
|
| 172 |
### Community 12 - "Community 12"
|
| 173 |
-
Cohesion: 0.
|
| 174 |
-
Nodes (
|
| 175 |
|
| 176 |
### Community 13 - "Community 13"
|
| 177 |
-
Cohesion: 0.
|
| 178 |
-
Nodes (
|
| 179 |
|
| 180 |
### Community 14 - "Community 14"
|
| 181 |
Cohesion: 0.10
|
| 182 |
Nodes (11): get_professional_logger(), IngestionStats, ProfessionalLogger, Professional Logging Module for Segmento Pulse Provides structured logging with, Log scheduler activity, Print comprehensive statistics summary, Get a professional logger instance, Track ingestion pipeline statistics (+3 more)
|
| 183 |
|
| 184 |
### Community 15 - "Community 15"
|
| 185 |
-
Cohesion: 0.
|
| 186 |
-
Nodes (
|
| 187 |
|
| 188 |
### Community 16 - "Community 16"
|
| 189 |
-
Cohesion: 0.
|
| 190 |
-
Nodes (
|
| 191 |
|
| 192 |
### Community 17 - "Community 17"
|
| 193 |
-
Cohesion: 0.
|
| 194 |
-
Nodes (
|
| 195 |
|
| 196 |
### Community 18 - "Community 18"
|
| 197 |
-
Cohesion: 0.
|
| 198 |
-
Nodes (
|
| 199 |
|
| 200 |
### Community 19 - "Community 19"
|
| 201 |
Cohesion: 0.14
|
|
@@ -206,60 +210,60 @@ Cohesion: 0.22
|
|
| 206 |
Nodes (8): Further Notes, Implementation Decisions, Out of Scope, Problem Statement, Solution, Spec: Quality-Score Rescue — Reduce Wrongful Article Rejections, Testing Decisions, User Stories
|
| 207 |
|
| 208 |
### Community 21 - "Community 21"
|
| 209 |
-
Cohesion: 0.
|
| 210 |
-
Nodes (
|
| 211 |
|
| 212 |
### Community 22 - "Community 22"
|
| 213 |
Cohesion: 0.13
|
| 214 |
Nodes (10): create_document_from_rss_entry(), Document, Custom Document Class - Replacing LlamaIndex Document This provides the same, Helper function to create Document from RSS feed entry Args:, Custom Document class that standardizes data structure Replaces Llama, Initialize a Document Args: text: The document c, Generate unique document ID from URL or content hash Returns:, Convert Document to dictionary for serialization Returns: (+2 more)
|
| 215 |
|
| 216 |
### Community 24 - "Community 24"
|
| 217 |
-
Cohesion: 0.
|
| 218 |
-
Nodes (
|
| 219 |
|
| 220 |
### Community 25 - "Community 25"
|
| 221 |
Cohesion: 0.12
|
| 222 |
Nodes (15): comma_separated_to_list(), detect_html(), extract_domain(), list_to_comma_separated(), normalize_url(), Utility Functions for Segmento Pulse Provides common helpers for text processin, Intelligently strip HTML only if HTML tags are detected. This optimiz, Extract domain from URL. Args: url: Full URL (+7 more)
|
| 223 |
|
| 224 |
### Community 26 - "Community 26"
|
| 225 |
-
Cohesion: 0.
|
| 226 |
-
Nodes (
|
| 227 |
|
| 228 |
### Community 27 - "Community 27"
|
| 229 |
-
Cohesion: 0.
|
| 230 |
-
Nodes (
|
| 231 |
|
| 232 |
### Community 28 - "Community 28"
|
| 233 |
-
Cohesion: 0.
|
| 234 |
-
Nodes (
|
| 235 |
|
| 236 |
### Community 29 - "Community 29"
|
| 237 |
-
Cohesion: 0.
|
| 238 |
-
Nodes (
|
| 239 |
|
| 240 |
### Community 31 - "Community 31"
|
| 241 |
-
Cohesion: 0.
|
| 242 |
-
Nodes (
|
| 243 |
|
| 244 |
### Community 32 - "Community 32"
|
| 245 |
-
Cohesion: 0.
|
| 246 |
-
Nodes (
|
| 247 |
|
| 248 |
### Community 34 - "Community 34"
|
| 249 |
-
Cohesion: 0.
|
| 250 |
-
Nodes (
|
| 251 |
|
| 252 |
### Community 38 - "Community 38"
|
| 253 |
-
Cohesion: 0.
|
| 254 |
-
Nodes (
|
| 255 |
|
| 256 |
### Community 39 - "Community 39"
|
| 257 |
Cohesion: 0.21
|
| 258 |
Nodes (8): HackerNewsProvider, AsyncClient, Step 1: Ask Hacker News for the IDs of its top stories. Returns a lis, Step 2 (single unit): Fetch the details for one Hacker News story. Ar, Convert raw Hacker News JSON items into Segmento Pulse Article objects., For every article that has an empty image_url, visit its URL and try to, Fetches top stories from the Hacker News API. No API key needed. No rate, Fetch the top stories from Hacker News. Args: category (
|
| 259 |
|
| 260 |
### Community 40 - "Community 40"
|
| 261 |
-
Cohesion: 0.
|
| 262 |
-
Nodes (
|
| 263 |
|
| 264 |
### Community 41 - "Community 41"
|
| 265 |
Cohesion: 0.29
|
|
@@ -270,8 +274,8 @@ Cohesion: 0.29
|
|
| 270 |
Nodes (6): API Endpoints, Configuration, Features, Local Development, SegmentoPulse Backend API, Usage
|
| 271 |
|
| 272 |
### Community 44 - "Community 44"
|
| 273 |
-
Cohesion: 0.
|
| 274 |
-
Nodes (6):
|
| 275 |
|
| 276 |
### Community 45 - "Community 45"
|
| 277 |
Cohesion: 0.33
|
|
@@ -306,45 +310,61 @@ Cohesion: 0.50
|
|
| 306 |
Nodes (3): Parse comma-separated string into list (for HF Spaces secrets), Settings, BaseSettings
|
| 307 |
|
| 308 |
### Community 57 - "Community 57"
|
| 309 |
-
Cohesion: 0.
|
| 310 |
-
Nodes (
|
| 311 |
|
| 312 |
### Community 58 - "Community 58"
|
| 313 |
Cohesion: 0.22
|
| 314 |
Nodes (5): Extract XML tag content, Remove HTML tags and decode entities, Parse Google News RSS feed with advanced XML parsing, Extract image from multiple XML sources with fallbacks, Clean Google News description - they typically only contain links, not actual co
|
| 315 |
|
| 316 |
### Community 62 - "Community 62"
|
| 317 |
-
Cohesion: 0.
|
| 318 |
-
Nodes (
|
| 319 |
|
| 320 |
### Community 63 - "Community 63"
|
| 321 |
-
Cohesion: 0.
|
| 322 |
-
Nodes (
|
| 323 |
|
| 324 |
### Community 77 - "Community 77"
|
| 325 |
-
Cohesion: 0.
|
| 326 |
-
Nodes (
|
| 327 |
|
| 328 |
### Community 78 - "Community 78"
|
| 329 |
Cohesion: 0.28
|
| 330 |
Nodes (8): apply_engagement_boost(), apply_time_decay(), filter_by_recency(), Any, Ranking Utilities - Time Decay & Relevance ====================================, Filter out articles older than max_hours. Args: results: Lis, Apply time decay ranking to search results. Formula: Final Score = (1, Boost articles with high engagement (likes, views). Formula: Engageme
|
| 331 |
|
| 332 |
### Community 80 - "Community 80"
|
| 333 |
-
Cohesion: 0.
|
| 334 |
-
Nodes (
|
| 335 |
|
| 336 |
### Community 81 - "Community 81"
|
| 337 |
Cohesion: 0.29
|
| 338 |
-
Nodes (
|
| 339 |
|
| 340 |
### Community 82 - "Community 82"
|
| 341 |
-
Cohesion: 0.
|
| 342 |
-
Nodes (
|
| 343 |
|
| 344 |
### Community 83 - "Community 83"
|
| 345 |
Cohesion: 0.29
|
| 346 |
Nodes (7): normalize_article_date(), parse_date_to_iso(), Date Parsing and Normalization Utility FAANG-Level Quality Control for Publishe, Validate that a date string is in strict ISO-8601 UTC format Expected, Parse any date format and convert to strict ISO-8601 UTC Handles:, Normalize the publishedAt field in an article HOTFIX (2026-01-23): No, validate_date_format()
|
| 347 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 348 |
## Knowledge Gaps
|
| 349 |
- **50 isolated node(s):** `graphify`, `Workflow: graphify`, `Features`, `API Endpoints`, `Configuration` (+45 more)
|
| 350 |
These have ≤1 connection - possible missing edges or undocumented components.
|
|
@@ -353,17 +373,17 @@ Nodes (7): normalize_article_date(), parse_date_to_iso(), Date Parsing and Norma
|
|
| 353 |
## Suggested Questions
|
| 354 |
_Questions this graph is uniquely positioned to answer:_
|
| 355 |
|
| 356 |
-
- **Why does `Article` connect `Community
|
| 357 |
-
_High betweenness centrality (0.
|
| 358 |
-
- **Why does `
|
| 359 |
-
_High betweenness centrality (0.
|
| 360 |
-
- **Why does `
|
| 361 |
-
_High betweenness centrality (0.
|
| 362 |
- **Are the 26 inferred relationships involving `Article` (e.g. with `AppwriteDatabase` and `TablesDBWrapper`) actually correct?**
|
| 363 |
_`Article` has 26 INFERRED edges - model-reasoned connections that need verification._
|
| 364 |
- **Are the 12 inferred relationships involving `RSSParser` (e.g. with `NewsAggregator` and `GNewsProvider`) actually correct?**
|
| 365 |
_`RSSParser` has 12 INFERRED edges - model-reasoned connections that need verification._
|
| 366 |
- **What connects `Segmento Pulse Backend API FastAPI application for real-time technology news ag`, `Parse comma-separated string into list (for HF Spaces secrets)`, `Application lifespan manager Handles startup and shutdown events for` to the rest of the system?**
|
| 367 |
-
|
| 368 |
- **Should `Community 1` be split into smaller, more focused modules?**
|
| 369 |
-
_Cohesion score 0.
|
|
|
|
| 1 |
# Graph Report - backend (2026-08-24)
|
| 2 |
|
| 3 |
## Corpus Check
|
| 4 |
+
- 87 files · ~72,722 words
|
| 5 |
- Verdict: corpus is large enough that graph structure adds value.
|
| 6 |
|
| 7 |
## Summary
|
| 8 |
+
- 1059 nodes · 1751 edges · 136 communities (101 shown, 35 thin omitted)
|
| 9 |
+
- Extraction: 95% EXTRACTED · 5% INFERRED · 0% AMBIGUOUS · INFERRED: 79 edges (avg confidence: 0.53)
|
| 10 |
- Token cost: 0 input · 0 output
|
| 11 |
|
| 12 |
## Graph Freshness
|
| 13 |
+
- Built from commit: `98ca1d1c`
|
| 14 |
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
| 15 |
- Run `graphify update .` after code changes (no API cost).
|
| 16 |
|
|
|
|
| 76 |
- [[_COMMUNITY_Community 81|Community 81]]
|
| 77 |
- [[_COMMUNITY_Community 82|Community 82]]
|
| 78 |
- [[_COMMUNITY_Community 83|Community 83]]
|
| 79 |
+
- [[_COMMUNITY_._fetch_and_parse_feed|._fetch_and_parse_feed]]
|
| 80 |
+
- [[_COMMUNITY_.get_articles|.get_articles]]
|
| 81 |
+
- [[_COMMUNITY_id_generator.py|id_generator.py]]
|
| 82 |
+
- [[_COMMUNITY_fetch_and_validate_category|fetch_and_validate_category]]
|
| 83 |
- [[_COMMUNITY_Community 89|Community 89]]
|
| 84 |
- [[_COMMUNITY_Community 92|Community 92]]
|
| 85 |
- [[_COMMUNITY_Community 94|Community 94]]
|
|
|
|
| 112 |
1. `Article` - 89 edges
|
| 113 |
2. `get_appwrite_db()` - 47 edges
|
| 114 |
3. `get_upstash_cache()` - 33 edges
|
| 115 |
+
4. `_safe_get()` - 31 edges
|
| 116 |
+
5. `RSSParser` - 31 edges
|
| 117 |
6. `NewsProvider` - 28 edges
|
| 118 |
7. `AppwriteDatabase` - 26 edges
|
| 119 |
8. `NewsAggregator` - 24 edges
|
|
|
|
| 135 |
## Import Cycles
|
| 136 |
- None detected.
|
| 137 |
|
| 138 |
+
## Communities (136 total, 35 thin omitted)
|
| 139 |
|
| 140 |
### Community 0 - "Community 0"
|
| 141 |
Cohesion: 0.22
|
| 142 |
Nodes (10): _build_category_regex(), calculate_quality_score(), generate_slug(), Data Validation and Sanitization Layer FAANG-Level Quality Control for News Art, Clean and normalize article data HOTFIX: Now handles both Pydantic Ar, Generate URL-friendly slug from title Example: "Google Announces New, Score article quality from 0-100 Higher scores = better quality artic, # NOTE: 'cloud-computing' is kept here because it is an active category in (+2 more)
|
| 143 |
|
| 144 |
### Community 1 - "Community 1"
|
| 145 |
+
Cohesion: 0.09
|
| 146 |
+
Nodes (22): ErrorResponse, NewsResponse, Response model for news endpoints, Request model for view count increment, Response model for view count, ViewCountRequest, ViewCountResponse, get_news_by_category() (+14 more)
|
| 147 |
|
| 148 |
### Community 2 - "Community 2"
|
| 149 |
Cohesion: 0.08
|
| 150 |
Nodes (20): _DatetimeEncoder, Any, Execute Redis command via REST API. WARN-002 fixed: was using blockin, Get value from cache Args: key: Cache key, Set value in cache with TTL Args: key: Cache key, Delete key from cache Args: key: Cache key to de, JSON encoder that converts datetime/date objects to ISO-8601 strings. Preve, Push an item to the left of a Redis list (Producer action) Ar (+12 more)
|
| 151 |
|
| 152 |
### Community 4 - "Community 4"
|
| 153 |
+
Cohesion: 0.06
|
| 154 |
+
Nodes (26): get_quota_tracker(), API Quota Tracking Service Monitors API usage and prevents hitting rate limits, Get or create global quota tracker instance, GNewsProvider, GoogleNewsRSSProvider, MediumRSSProvider, NewsAPIProvider, NewsProvider (+18 more)
|
| 155 |
|
| 156 |
### Community 6 - "Community 6"
|
| 157 |
Cohesion: 0.27
|
| 158 |
Nodes (6): AsyncClient, Fetch tech headlines from the India and US static JSON files. Both fi, Download one regional JSON file and parse its articles. Args:, Convert raw NewsAPI-format JSON items into Segmento Pulse Article objects., Reads top tech headlines from two static JSON files on GitHub Pages. Cove, SauravKanchanProvider
|
| 159 |
|
| 160 |
### Community 8 - "Community 8"
|
| 161 |
+
Cohesion: 0.08
|
| 162 |
+
Nodes (21): bloom_filter_health_check(), get_bloom_filter_stats(), Reset Scalable Bloom Filter - Integration Sync Mechanism **USE CASE**, Get Scalable Bloom Filter statistics - Observability Endpoint Shows:, Quick health check for Bloom Filter - Production Monitoring Returns:, reset_bloom_filter(), get_url_filter(), URL Deduplication Service using Scalable Bloom Filter ========================= (+13 more)
|
| 163 |
|
| 164 |
### Community 9 - "Community 9"
|
| 165 |
Cohesion: 0.08
|
| 166 |
+
Nodes (24): ABC, # NOTE: 'inshorts' removed — 100% connection-reset failures on HF Spaces (geo-bl, # NOTE: 'wikinews' removed — returns stale 2009-era political articles (0 keywor, NewsProvider, Check if this provider is ready to accept a fetch request. Returns Fa, Task 4: Implement exponential backoff for 429 (Too Many Requests). Inst, Call this when the API returns a 429 (Too Many Requests). The status ch, Reset this provider's call counter back to zero. Called once per day (m (+16 more)
|
| 167 |
|
| 168 |
### Community 10 - "Community 10"
|
| 169 |
+
Cohesion: 0.12
|
| 170 |
+
Nodes (16): Live Health Dashboard — Phase 23 What this shows: Instead of a h, root(), cleanup_old_articles(), get_database_stats(), get_subscriber_analytics(), Get Appwrite database statistics (Phase 2) Returns: - Total, Delete articles older than specified days from Appwrite database Args, Get subscriber distribution by preference from Appwrite Shows how man (+8 more)
|
| 171 |
|
| 172 |
### Community 11 - "Community 11"
|
| 173 |
+
Cohesion: 0.11
|
| 174 |
+
Nodes (14): ProviderCircuitBreaker, Build the Redis key for a provider's circuit state., On server boot, check Redis for any circuit states that were open befor, Write 'circuit:{provider}:state = open' to Redis with a 1-hour TTL. Cal, Delete 'circuit:{provider}:state' from Redis. Called whenever a circuit, Check if provider should be skipped Args: provider: Prov, Record successful request Args: provider: Provider name, Record failed request Args: provider: Provider name (+6 more)
|
| 175 |
|
| 176 |
### Community 12 - "Community 12"
|
| 177 |
+
Cohesion: 0.13
|
| 178 |
+
Nodes (18): health_check(), lifespan(), Enhanced health check endpoint with scheduler status Used by external monit, Application lifespan manager Handles startup and shutdown events for, get_cache_stats(), get_quota_stats(), _get_recommendations(), Cache Monitoring and Metrics API ================================= Provides (+10 more)
|
| 179 |
|
| 180 |
### Community 13 - "Community 13"
|
| 181 |
+
Cohesion: 0.43
|
| 182 |
+
Nodes (3): is_relevant_to_category(), Check whether an article belongs to the given category. Uses pre-compiled, TestQualityScoreRescue
|
| 183 |
|
| 184 |
### Community 14 - "Community 14"
|
| 185 |
Cohesion: 0.10
|
| 186 |
Nodes (11): get_professional_logger(), IngestionStats, ProfessionalLogger, Professional Logging Module for Segmento Pulse Provides structured logging with, Log scheduler activity, Print comprehensive statistics summary, Get a professional logger instance, Track ingestion pipeline statistics (+3 more)
|
| 187 |
|
| 188 |
### Community 15 - "Community 15"
|
| 189 |
+
Cohesion: 0.12
|
| 190 |
+
Nodes (13): AdaptiveScheduler, Update velocity tracking and calculate new interval Args:, Save velocity data to Redis using a non-blocking async HTTP call. Why, Get current interval for a category, Get velocity statistics for all categories, Print velocity summary, Dynamically adjusts fetch intervals based on category activity Tracks, Initialize adaptive scheduler Args: categories: (+5 more)
|
| 191 |
|
| 192 |
### Community 16 - "Community 16"
|
| 193 |
+
Cohesion: 0.05
|
| 194 |
+
Nodes (44): get_subscriber_count(), Subscription API Routes Handles newsletter subscriptions and unsubscribe functi, Unsubscribe user via email link Supports Granular Unsubscribe (e.g., 'Morni, Unsubscribe via email address (for forms/dashboard) Supports Granular Unsub, Get total number of active subscribers from Appwrite, Send newsletter to all subscribers (LEGACY ENDPOINT - Use scheduled newsletters, Subscribe a user to the newsletter - Adds subscriber to Appwrite (Sol, send_newsletter() (+36 more)
|
| 195 |
|
| 196 |
### Community 17 - "Community 17"
|
| 197 |
+
Cohesion: 0.19
|
| 198 |
+
Nodes (11): AudioGenerationRequest, AudioResponse, _find_article(), generate_audio_summary(), get_audio_status(), Generate audio summary for an article by URL, Helper to find an article across multiple collections. Returns (article, co, Check if audio/text summary exists for an article. (+3 more)
|
| 199 |
|
| 200 |
### Community 18 - "Community 18"
|
| 201 |
+
Cohesion: 0.12
|
| 202 |
+
Nodes (16): Emergency Circuit Breaker Reset Run this endpoint right after any redeplo, reset_circuit_breakers(), cache_health_check(), clear_cache(), Simple health check endpoint for cache connectivity. Returns:, Clear all cached data (admin endpoint). USE WITH CAUTION: This will f, CircuitState, get_circuit_breaker() (+8 more)
|
| 203 |
|
| 204 |
### Community 19 - "Community 19"
|
| 205 |
Cohesion: 0.14
|
|
|
|
| 210 |
Nodes (8): Further Notes, Implementation Decisions, Out of Scope, Problem Statement, Solution, Spec: Quality-Score Rescue — Reduce Wrongful Article Rejections, Testing Decisions, User Stories
|
| 211 |
|
| 212 |
### Community 21 - "Community 21"
|
| 213 |
+
Cohesion: 0.20
|
| 214 |
+
Nodes (6): IngestionMetrics, Track ingestion metrics over time, Record metrics from an ingestion run, Get current ingestion statistics, Check if any metrics exceed thresholds, TestIngestionMetrics
|
| 215 |
|
| 216 |
### Community 22 - "Community 22"
|
| 217 |
Cohesion: 0.13
|
| 218 |
Nodes (10): create_document_from_rss_entry(), Document, Custom Document Class - Replacing LlamaIndex Document This provides the same, Helper function to create Document from RSS feed entry Args:, Custom Document class that standardizes data structure Replaces Llama, Initialize a Document Args: text: The document c, Generate unique document ID from URL or content hash Returns:, Convert Document to dictionary for serialization Returns: (+2 more)
|
| 219 |
|
| 220 |
### Community 24 - "Community 24"
|
| 221 |
+
Cohesion: 0.09
|
| 222 |
+
Nodes (23): ProviderStatus, Represents the health of a provider at any given moment. ACTIVE → P, providers/thenewsapi/client.py ────────────────────────────────────────────────, Fetch technology articles from TheNewsAPI.com. Args: cat, # NOTE: We deliberately do NOT add 'published_after' or, Convert TheNewsAPI JSON items into Segmento Pulse Article objects. Th, Fetches technology news from TheNewsAPI.com. Paid provider — needs THENEW, TheNewsAPIProvider (+15 more)
|
| 223 |
|
| 224 |
### Community 25 - "Community 25"
|
| 225 |
Cohesion: 0.12
|
| 226 |
Nodes (15): comma_separated_to_list(), detect_html(), extract_domain(), list_to_comma_separated(), normalize_url(), Utility Functions for Segmento Pulse Provides common helpers for text processin, Intelligently strip HTML only if HTML tags are detected. This optimiz, Extract domain from URL. Args: url: Full URL (+7 more)
|
| 227 |
|
| 228 |
### Community 26 - "Community 26"
|
| 229 |
+
Cohesion: 0.22
|
| 230 |
+
Nodes (9): AsyncClient, Fetch articles from all OpenRSS feeds — but only if 60 minutes have pas, Fetch one OpenRSS feed URL and parse its XML into Article objects. Ar, get_provider_timestamp(), Save a provider's last-fetch timestamp to Redis. Always call this BEFORE, Build the Redis key string for a provider's last-fetch timestamp. Example, Read the last-fetch timestamp for a provider from Redis. Returns a Unix t, set_provider_timestamp() (+1 more)
|
| 231 |
|
| 232 |
### Community 27 - "Community 27"
|
| 233 |
+
Cohesion: 0.17
|
| 234 |
+
Nodes (7): NewsAggregator, Fetch news from ALL available sources for a category. Strategy (Phase, Service for aggregating news from multiple sources with automatic failover, Fetch news specifically from a named provider (bypassing priority/failover), Fetch RSS from cloud providers, Search news articles using hybrid approach Currently uses Google News R, Get usage statistics for monitoring
|
| 235 |
|
| 236 |
### Community 28 - "Community 28"
|
| 237 |
+
Cohesion: 0.18
|
| 238 |
+
Nodes (9): Worker Manager Service Consumer process that pulls categories from Redis and ex, # NOTE: Do NOT create a new NewsAggregator here., AlignedColorFormatter, get_logger(), backend/app/utils/custom_logger.py ────────────────────────────────────────────, Get a logger that flows into the root logger configured in main.py. How t, Custom log formatter that produces perfectly aligned, ANSI-colored output., Logger (+1 more)
|
| 239 |
|
| 240 |
### Community 29 - "Community 29"
|
| 241 |
+
Cohesion: 0.14
|
| 242 |
+
Nodes (18): Cache Service using Redis Provides caching layer to reduce external API calls w, cleanup_old_news(), fetch_daily_research(), fetch_single_category_job(), _get_adaptive(), keepalive_job(), Background Scheduler Service - Phase 3 Automates news fetching and database cle, Per-category background job (Phase 6). This is what each of the 22 adapti (+10 more)
|
| 243 |
|
| 244 |
### Community 31 - "Community 31"
|
| 245 |
+
Cohesion: 0.16
|
| 246 |
+
Nodes (20): dislike_article(), EngagementRequest, get_article_stats(), get_popular_cloud_articles(), get_trending_articles(), like_article(), Engagement API Endpoints Handles article likes, views tracking, and trending ar, Increment like count for an article. (+12 more)
|
| 247 |
|
| 248 |
### Community 32 - "Community 32"
|
| 249 |
+
Cohesion: 0.09
|
| 250 |
+
Nodes (29): get_cache_stats(), get_scheduler_status(), populate_database(), preview_newsletter_content(), Start a background cache-warm job for all categories. Fix 2: The old vers, Populate Appwrite database by fetching fresh articles for all categories, Manually trigger the news fetch job (Phase 3) Useful for: - Test, Manually trigger the cleanup job (Phase 3) Deletes articles older tha (+21 more)
|
| 251 |
|
| 252 |
### Community 34 - "Community 34"
|
| 253 |
+
Cohesion: 0.08
|
| 254 |
+
Nodes (19): Response model for search endpoints, SearchResponse, clear_cache(), Clear all cached news data Useful for testing or forcing a fresh data, Search news articles by keyword (Direct Aggregation), search_news(), CacheService, Set cached articles with TTL (+11 more)
|
| 255 |
|
| 256 |
### Community 38 - "Community 38"
|
| 257 |
+
Cohesion: 0.18
|
| 258 |
+
Nodes (7): APIQuotaTracker, Get current quota usage statistics, Track API usage and enforce rate limits, Check if we can still call this paid provider today. Reads the curren, Record that we just used one API credit for this provider. Writes to, Check if approaching rate limits, Check if an API call can be made without exceeding quotas
|
| 259 |
|
| 260 |
### Community 39 - "Community 39"
|
| 261 |
Cohesion: 0.21
|
| 262 |
Nodes (8): HackerNewsProvider, AsyncClient, Step 1: Ask Hacker News for the IDs of its top stories. Returns a lis, Step 2 (single unit): Fetch the details for one Hacker News story. Ar, Convert raw Hacker News JSON items into Segmento Pulse Article objects., For every article that has an empty image_url, visit its URL and try to, Fetches top stories from the Hacker News API. No API key needed. No rate, Fetch the top stories from Hacker News. Args: category (
|
| 263 |
|
| 264 |
### Community 40 - "Community 40"
|
| 265 |
+
Cohesion: 0.07
|
| 266 |
+
Nodes (15): AppwriteDatabase, Any, Get all subscribers (Source of Truth) Used by admin analytics., Get database statistics Returns: Dictionary with, Appwrite Database service for persistent article storage (L2 cache), Initialize Appwrite client and database connection, Generate a unique hash for an article URL. **INTEGRATION UPDATE**: Ma, Save articles to Appwrite database with TRUE parallel writes (+7 more)
|
| 267 |
|
| 268 |
### Community 41 - "Community 41"
|
| 269 |
Cohesion: 0.29
|
|
|
|
| 274 |
Nodes (6): API Endpoints, Configuration, Features, Local Development, SegmentoPulse Backend API, Usage
|
| 275 |
|
| 276 |
### Community 44 - "Community 44"
|
| 277 |
+
Cohesion: 0.17
|
| 278 |
+
Nodes (6): Create a new subscriber in Appwrite (Dual-Write) Uses Boolean Flags sch, Get subscriber by email, Update subscriber preferences, Update specific subscription preference (Granular Unsubscribe), Update global subscription status (Global Unsubscribe), Update lastSentAt timestamp for a subscriber
|
| 279 |
|
| 280 |
### Community 45 - "Community 45"
|
| 281 |
Cohesion: 0.33
|
|
|
|
| 310 |
Nodes (3): Parse comma-separated string into list (for HF Spaces secrets), Settings, BaseSettings
|
| 311 |
|
| 312 |
### Community 57 - "Community 57"
|
| 313 |
+
Cohesion: 0.11
|
| 314 |
+
Nodes (17): Article, Parse datetime from various formats including RFC 2822 (RSS feeds), NewsDataProvider, Fetch news from GNews API. Why no 'from'/'to' date filter here?, Fetch news from NewsAPI. Phase 20 upgrade: The query string is now bu, Fetch news from NewsData.io, Parse NewsData.io response, Implement exponential backoff for 429 Too Many Requests (+9 more)
|
| 315 |
|
| 316 |
### Community 58 - "Community 58"
|
| 317 |
Cohesion: 0.22
|
| 318 |
Nodes (5): Extract XML tag content, Remove HTML tags and decode entities, Parse Google News RSS feed with advanced XML parsing, Extract image from multiple XML sources with fallbacks, Clean Google News description - they typically only contain links, not actual co
|
| 319 |
|
| 320 |
### Community 62 - "Community 62"
|
| 321 |
+
Cohesion: 0.31
|
| 322 |
+
Nodes (8): is_url_seen_or_mark(), Redis URL Deduplication Bouncer ================================ This is the, Check if we have seen this article URL in the last 48 hours. If we have NOT, canonicalize_url(), get_url_hash(), URL Canonicalization for Better Deduplication Normalizes URLs before hashing, Generate hash from canonical URL Args: url: Original URL, Normalize URL for better deduplication Args: url: Original U
|
| 323 |
|
| 324 |
### Community 63 - "Community 63"
|
| 325 |
+
Cohesion: 0.20
|
| 326 |
+
Nodes (8): get_ingestion_alerts(), get_ingestion_stats(), Get ingestion statistics Returns metrics about news ingestion perform, Check for ingestion alerts Monitors: - High duplicate rate (>90%, get_ingestion_metrics(), Ingestion Statistics Tracking Monitors ingestion performance, duplicate rates,, Get or create global ingestion metrics instance, TestNewsProcessorMetrics
|
| 327 |
|
| 328 |
### Community 77 - "Community 77"
|
| 329 |
+
Cohesion: 0.15
|
| 330 |
+
Nodes (9): InshortsProvider, Fetch technology articles from the Inshorts community API. Args:, Solve the split date/time problem. Inshorts gives us date and time as, Convert raw Inshorts JSON items into Segmento Pulse Article objects., Fetches 60-word technology summaries from the Inshorts community API. Fre, OpenRSSProvider, Fetches RSS feeds from dev.to, Hashnode, and GitHub Blog via OpenRSS.org., Parse raw XML from an OpenRSS feed into Article objects. Uses feedpar (+1 more)
|
| 331 |
|
| 332 |
### Community 78 - "Community 78"
|
| 333 |
Cohesion: 0.28
|
| 334 |
Nodes (8): apply_engagement_boost(), apply_time_decay(), filter_by_recency(), Any, Ranking Utilities - Time Decay & Relevance ====================================, Filter out articles older than max_hours. Args: results: Lis, Apply time decay ranking to search results. Formula: Final Score = (1, Boost articles with high engagement (likes, views). Formula: Engageme
|
| 335 |
|
| 336 |
### Community 80 - "Community 80"
|
| 337 |
+
Cohesion: 0.24
|
| 338 |
+
Nodes (8): get_adaptive_scheduler(), Adaptive Scheduler for Dynamic Category Fetching Automatically adjusts fetch, # NOTE: We no longer call _save_velocity_data() here., Get or create adaptive scheduler instance, process_category(), News Processor Service Handles the heavy lifting of fetching, validating, and s, Core logic: Fetch -> Validate -> Save -> Update Adaptive Interval, # NOTE: fetched_approx excludes Redis-dedup volume (not returned by
|
| 339 |
|
| 340 |
### Community 81 - "Community 81"
|
| 341 |
Cohesion: 0.29
|
| 342 |
+
Nodes (3): The Reaper: Scans the processing queue for tasks that timed out. If a w, Lazy-load the shared aggregator singleton from scheduler., WorkerManager
|
| 343 |
|
| 344 |
### Community 82 - "Community 82"
|
| 345 |
+
Cohesion: 0.25
|
| 346 |
+
Nodes (8): enrich_missing_images_in_batch(), Scan a list of fully-vetted articles and fill in any missing images. Only, extract_top_image(), _fetch_and_extract(), app/services/utils/image_enricher.py ──────────────────────────────────────────, Internal helper: download the HTML and pull out the og:image tag. Separat, # NOTE: We pass only the first 10,000 characters to avoid processing huge, Visit an article URL and extract its main (top) image. Looks for the imag
|
| 347 |
|
| 348 |
### Community 83 - "Community 83"
|
| 349 |
Cohesion: 0.29
|
| 350 |
Nodes (7): normalize_article_date(), parse_date_to_iso(), Date Parsing and Normalization Utility FAANG-Level Quality Control for Publishe, Validate that a date string is in strict ISO-8601 UTC format Expected, Parse any date format and convert to strict ISO-8601 UTC Handles:, Normalize the publishedAt field in an article HOTFIX (2026-01-23): No, validate_date_format()
|
| 351 |
|
| 352 |
+
### Community 84 - "._fetch_and_parse_feed"
|
| 353 |
+
Cohesion: 0.33
|
| 354 |
+
Nodes (4): AsyncClient, Fetch articles from all premium tech RSS feeds concurrently. Args:, Fetch one RSS feed URL and parse it into Article objects. Args:, Parse raw XML text from a feed into a list of Article objects. Uses f
|
| 355 |
+
|
| 356 |
+
### Community 85 - ".get_articles"
|
| 357 |
+
Cohesion: 0.33
|
| 358 |
+
Nodes (3): Phase 4: Strict Routing Algorithm (Vertical Architecture), Get articles by category with pagination and projection (FAANG-Level), Get articles with custom query filters (for cursor pagination)
|
| 359 |
+
|
| 360 |
+
### Community 86 - "id_generator.py"
|
| 361 |
+
Cohesion: 0.33
|
| 362 |
+
Nodes (5): generate_article_id_uuid(), Article ID Generation Utilities ================================ Generates A, Generate Appwrite-compatible UUID from URL Alternative method using U, Validate that document ID meets Appwrite requirements Appwrite docume, validate_appwrite_id()
|
| 363 |
+
|
| 364 |
+
### Community 87 - "fetch_and_validate_category"
|
| 365 |
+
Cohesion: 0.40
|
| 366 |
+
Nodes (5): fetch_and_validate_category(), Fetch and validate articles for a single category. Args: categor, is_valid_article(), Validate article data quality before database insertion HOTFIX: Now h, canonicalize_url
|
| 367 |
+
|
| 368 |
## Knowledge Gaps
|
| 369 |
- **50 isolated node(s):** `graphify`, `Workflow: graphify`, `Features`, `API Endpoints`, `Configuration` (+45 more)
|
| 370 |
These have ≤1 connection - possible missing edges or undocumented components.
|
|
|
|
| 373 |
## Suggested Questions
|
| 374 |
_Questions this graph is uniquely positioned to answer:_
|
| 375 |
|
| 376 |
+
- **Why does `Article` connect `Community 57` to `Community 1`, `Community 4`, `Community 6`, `Community 9`, `Community 10`, `Community 17`, `Community 24`, `Community 26`, `Community 27`, `Community 29`, `Community 33`, `Community 34`, `Community 39`, `Community 40`, `Community 52`, `Community 58`, `Community 77`, `Community 80`, `._fetch_and_parse_feed`, `fetch_and_validate_category`?**
|
| 377 |
+
_High betweenness centrality (0.175) - this node is a cross-community bridge._
|
| 378 |
+
- **Why does `get_upstash_cache()` connect `Community 18` to `Community 32`, `Community 1`, `Community 34`, `Community 2`, `Community 4`, `Community 38`, `Community 11`, `Community 12`, `Community 80`, `Community 81`, `Community 24`, `Community 26`, `Community 28`, `Community 29`, `Community 62`?**
|
| 379 |
+
_High betweenness centrality (0.114) - this node is a cross-community bridge._
|
| 380 |
+
- **Why does `get_appwrite_db()` connect `Community 10` to `Community 32`, `Community 1`, `Community 34`, `Community 8`, `Community 40`, `Community 12`, `Community 46`, `Community 16`, `Community 17`, `Community 80`, `Community 51`, `Community 29`, `Community 31`?**
|
| 381 |
+
_High betweenness centrality (0.079) - this node is a cross-community bridge._
|
| 382 |
- **Are the 26 inferred relationships involving `Article` (e.g. with `AppwriteDatabase` and `TablesDBWrapper`) actually correct?**
|
| 383 |
_`Article` has 26 INFERRED edges - model-reasoned connections that need verification._
|
| 384 |
- **Are the 12 inferred relationships involving `RSSParser` (e.g. with `NewsAggregator` and `GNewsProvider`) actually correct?**
|
| 385 |
_`RSSParser` has 12 INFERRED edges - model-reasoned connections that need verification._
|
| 386 |
- **What connects `Segmento Pulse Backend API FastAPI application for real-time technology news ag`, `Parse comma-separated string into list (for HF Spaces secrets)`, `Application lifespan manager Handles startup and shutdown events for` to the rest of the system?**
|
| 387 |
+
_472 weakly-connected nodes found - possible documentation gaps or missing edges._
|
| 388 |
- **Should `Community 1` be split into smaller, more focused modules?**
|
| 389 |
+
_Cohesion score 0.09401709401709402 - nodes in this community are weakly interconnected._
|
graphify-out/cache/ast/v0.9.5/1c3f57689ce70e2b13e423b55681cdaaed4d952d420c978f01327190664f0e67.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"nodes": [{"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_firebase_service_py", "label": "firebase_service.py", "file_type": "code", "source_file": "app/services/firebase_service.py", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
graphify-out/cache/ast/v0.9.5/4015dd2120abc1b10e107930ad2e461104dc0f8d4b92099117657b7401ead048.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"nodes": [{"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "label": "main.py", "file_type": "code", "source_file": "app/main.py", "source_location": "L1"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "label": "lifespan()", "file_type": "code", "source_file": "app/main.py", "source_location": "L66", "_callable": true}, {"id": "fastapi", "label": "FastAPI", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "label": "root()", "file_type": "code", "source_file": "app/main.py", "source_location": "L160", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "label": "health_check()", "file_type": "code", "source_file": "app/main.py", "source_location": "L262", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_rationale_67", "label": "Application lifespan manager Handles startup and shutdown events for", "file_type": "rationale", "source_file": "app/main.py", "source_location": "L67"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_rationale_161", "label": "Live Health Dashboard \u2014 Phase 23 What this shows: Instead of a h", "file_type": "rationale", "source_file": "app/main.py", "source_location": "L161"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_rationale_263", "label": "Enhanced health check endpoint with scheduler status Used by external monit", "file_type": "rationale", "source_file": "app/main.py", "source_location": "L263"}], "edges": [{"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L1", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L2", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L3", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L4", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "warnings", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L5", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "fastapi_middleware_cors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L6", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "app_utils_custom_logger", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L7", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "nest_asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L31", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "contextlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L36", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "app_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L37", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "pydantic_warnings", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L40", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "app_routes", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L51", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "app_services_scheduler", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L54", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "app_services_worker_manager", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L57", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "app_services_circuit_breaker", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L60", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "app_services_browser_manager", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L63", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L66", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "target": "fastapi", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L66", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "app_routes", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L147", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "app_routes", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L151", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "app_routes", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L156", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L160", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L262", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_py", "target": "uvicorn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L297", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_rationale_67", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L67", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_rationale_161", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L161", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_rationale_263", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L263", "weight": 1.0}], "raw_calls": [{"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "callee": "start_scheduler", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L77", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "callee": "create_task", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L91", "receiver": "asyncio"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "callee": "run_worker", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L91", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "callee": "startup_circuit_breaker", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L96", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "callee": "start", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L98", "receiver": "browser_manager"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "callee": "cancel", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L109", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "callee": "shutdown_scheduler", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L115", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_lifespan", "callee": "shutdown", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L116", "receiver": "browser_manager"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "now", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L181", "receiver": "datetime"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get_jobs", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L185", "receiver": "scheduler"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "startswith", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L188", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "startswith", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L189", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "isoformat", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L195", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get_appwrite_db", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L198", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "info", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L203", "receiver": "logger"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get_summary", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L214", "receiver": "ingestion_stats"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "isoformat", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L225", "receiver": "now_utc"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L247", "receiver": "stats"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L248", "receiver": "stats"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L249", "receiver": "stats"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L250", "receiver": "stats"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L251", "receiver": "stats"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L252", "receiver": "stats"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L253", "receiver": "stats"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_root", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L254", "receiver": "stats"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "callee": "get_jobs", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L272", "receiver": "scheduler"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "callee": "get_jobs", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L276", "receiver": "scheduler"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "callee": "append", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L277", "receiver": "jobs_info"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "callee": "isoformat", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L280", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "callee": "isoformat", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L285", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "callee": "now", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L285", "receiver": "datetime"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "callee": "strftime", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L286", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_main_health_check", "callee": "now", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py", "source_location": "L286", "receiver": "datetime"}]}
|
graphify-out/cache/ast/v0.9.5/5b8213932acd73feafcf8cc6da4a06622d078b983b20eec92bf30d59ab2c9c3e.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"nodes": [{"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "label": "subscription.py", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L1"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberequest", "label": "SubscribeRequest", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L17", "_callable": true}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberequest_validate_preference", "label": ".validate_preference()", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L25", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberesponse", "label": "SubscribeResponse", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L32", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscriberesponse", "label": "UnsubscribeResponse", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L38", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "label": "subscribe()", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L45", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "label": "unsubscribe()", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L108", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscriberequest", "label": "UnsubscribeRequest", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L172", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "label": "unsubscribe_post()", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L177", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscriber_count", "label": "get_subscriber_count()", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L240", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_send_newsletter", "label": "send_newsletter()", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L263", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "label": "get_subscription_status()", "file_type": "code", "source_file": "app/routes/subscription.py", "source_location": "L315", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_1", "label": "Subscription API Routes Handles newsletter subscriptions and unsubscribe functi", "file_type": "rationale", "source_file": "app/routes/subscription.py", "source_location": "L1"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_46", "label": "Subscribe a user to the newsletter - Adds subscriber to Appwrite (Sol", "file_type": "rationale", "source_file": "app/routes/subscription.py", "source_location": "L46"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_112", "label": "Unsubscribe user via email link Supports Granular Unsubscribe (e.g., 'Morni", "file_type": "rationale", "source_file": "app/routes/subscription.py", "source_location": "L112"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_178", "label": "Unsubscribe via email address (for forms/dashboard) Supports Granular Unsub", "file_type": "rationale", "source_file": "app/routes/subscription.py", "source_location": "L178"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_241", "label": "Get total number of active subscribers from Appwrite", "file_type": "rationale", "source_file": "app/routes/subscription.py", "source_location": "L241"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_267", "label": "Send newsletter to all subscribers (LEGACY ENDPOINT - Use scheduled newsletters", "file_type": "rationale", "source_file": "app/routes/subscription.py", "source_location": "L267"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_316", "label": "Get subscription status by email Required for Dashboard to sync with Appwri", "file_type": "rationale", "source_file": "app/routes/subscription.py", "source_location": "L316"}], "edges": [{"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L5", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L6", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L7", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L8", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "app_services_brevo_email_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L10", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "app_services_appwrite_db", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L11", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L17", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L17", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberequest", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberequest_validate_preference", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L25", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberesponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L32", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberesponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L32", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscriberesponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L38", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscriberesponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L38", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L45", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberequest", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L45", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L108", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscriberequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L172", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscriberequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L172", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L177", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscriberequest", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L177", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscriber_count", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L240", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_send_newsletter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L263", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L315", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberesponse", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L85", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscriberesponse", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L156", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscriberesponse", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L223", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_1", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L1", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_46", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L46", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_112", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L112", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_178", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L178", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_241", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscriber_count", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L241", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_267", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_send_newsletter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L267", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_rationale_316", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/routes/subscription.py", "source_location": "L316", "weight": 1.0}], "raw_calls": [{"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscriberequest_validate_preference", "callee": "ValueError", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L28", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "callee": "get_brevo_service", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L54", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "callee": "get_appwrite_db", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L55", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "callee": "generate_unsubscribe_token", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L58", "receiver": "brevo"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "callee": "create_subscriber", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L64", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L72", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "callee": "send_welcome_email", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L78", "receiver": "brevo"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L101", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_subscribe", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L103"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "get_appwrite_db", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L117", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "get_brevo_service", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L118", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "get_subscriber_by_token", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L121", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L124", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L129", "receiver": "subscriber"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L130", "receiver": "subscriber"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "update_subscription_status", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L137", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "update_subscriber_status", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L141", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L145", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "send_unsubscribe_confirmation", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L154", "receiver": "brevo"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L166", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L168"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "get_appwrite_db", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L183", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "get_brevo_service", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L184", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "get_subscriber", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L187", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L190", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L195", "receiver": "subscriber"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "update_subscription_status", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L203", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "update_subscriber_status", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L207", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L211", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "send_unsubscribe_confirmation", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L221", "receiver": "brevo"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L233", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_unsubscribe_post", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L235"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscriber_count", "callee": "get_appwrite_db", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L243", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscriber_count", "callee": "get_all_subscribers", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L244", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscriber_count", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L246", "receiver": "s"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscriber_count", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L256", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_send_newsletter", "callee": "get_appwrite_db", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L275", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_send_newsletter", "callee": "get_brevo_service", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L276", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_send_newsletter", "callee": "get_all_subscribers", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L279", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_send_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L280", "receiver": "s"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_send_newsletter", "callee": "fetch_by_category", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L292", "receiver": "news_aggregator"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_send_newsletter", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L309", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_send_newsletter", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L311"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "get_appwrite_db", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L322", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "get_subscriber", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L323", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "_safe_get", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L335", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "_safe_get", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L336", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "_safe_get", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L337", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "_safe_get", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L338", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "_safe_get", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L339", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "items", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L345", "receiver": "subscriptions"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "_safe_get", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L351", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "_safe_get", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L352", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "_safe_get", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L353", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "_safe_get", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L354", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "_safe_get", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L355", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "HTTPException", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L363", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_subscription_get_subscription_status", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py", "source_location": "L365"}]}
|
graphify-out/cache/ast/v0.9.5/783347828a08021007c473737ad3efc13cc87a66f06f3fd9b43c629af0098924.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"nodes": [{"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "label": "newsletter_service.py", "file_type": "code", "source_file": "app/services/newsletter_service.py", "source_location": "L1"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "label": "get_newsletter_content()", "file_type": "code", "source_file": "app/services/newsletter_service.py", "source_location": "L56", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "label": "send_scheduled_newsletter()", "file_type": "code", "source_file": "app/services/newsletter_service.py", "source_location": "L187", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_preview_newsletter_content", "label": "preview_newsletter_content()", "file_type": "code", "source_file": "app/services/newsletter_service.py", "source_location": "L318", "_callable": true}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_rationale_1", "label": "Newsletter Service Orchestrates newsletter sending with time-based preferences", "file_type": "rationale", "source_file": "app/services/newsletter_service.py", "source_location": "L1"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_rationale_57", "label": "Fetch articles from Appwrite using precise time-windowed application logic.", "file_type": "rationale", "source_file": "app/services/newsletter_service.py", "source_location": "L57"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_rationale_188", "label": "Main newsletter orchestrator. CRITICAL SAFETY CHECKS: 1. Validat", "file_type": "rationale", "source_file": "app/services/newsletter_service.py", "source_location": "L188"}, {"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_rationale_319", "label": "Preview newsletter content without sending emails. Useful for testing and d", "file_type": "rationale", "source_file": "app/services/newsletter_service.py", "source_location": "L319"}], "edges": [{"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L6", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L7", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "target": "pytz", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L8", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "target": "app_services_appwrite_db", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L9", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "target": "app_services_brevo_email_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L11", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "target": "app_services_alert_service", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L12", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "target": "app_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L13", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L56", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L187", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_preview_newsletter_content", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L318", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L211", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_preview_newsletter_content", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L323", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_rationale_1", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L1", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_rationale_57", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L57", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_rationale_188", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L188", "weight": 1.0}, {"source": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_rationale_319", "target": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_preview_newsletter_content", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/newsletter_service.py", "source_location": "L319", "weight": 1.0}], "raw_calls": [{"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "get_appwrite_db", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L75", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "now", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L83", "receiver": "datetime"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "IST", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L83"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "replace", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L87", "receiver": "now_ist"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "replace", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L88", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "timedelta", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L88", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "replace", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L95", "receiver": "now_ist"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "replace", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L96", "receiver": "now_ist"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "replace", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L103", "receiver": "now_ist"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "replace", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L104", "receiver": "now_ist"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "timedelta", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L112", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "timedelta", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L117", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "timedelta", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L122", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "astimezone", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L125", "receiver": "start_time"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "UTC", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L125"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "astimezone", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L126", "receiver": "end_time"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "UTC", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L126"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "strftime", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L129", "receiver": "start_time"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "strftime", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L129", "receiver": "end_time"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "isoformat", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L130", "receiver": "start_utc"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "isoformat", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L130", "receiver": "end_utc"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "greater_than", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L139", "receiver": "Query"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "isoformat", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L139", "receiver": "start_utc"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "less_than_equal", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L140", "receiver": "Query"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "isoformat", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L140", "receiver": "end_utc"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "order_desc", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L141", "receiver": "Query"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "limit", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L142", "receiver": "Query"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "append", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L150", "receiver": "fetch_tasks"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "get_articles_with_queries", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L150", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "gather", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L152", "receiver": "asyncio"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "list", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L156"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "append", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L157", "receiver": "collections_articles"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "append", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L171", "receiver": "final_articles"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "pop", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L171", "receiver": "list_to_pull_from"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "pop", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L174", "receiver": "collections_articles"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_get_newsletter_content", "callee": "print_exc", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L183", "receiver": "traceback"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "strftime", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L202", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "now", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L202", "receiver": "datetime"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "IST", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L202"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "strftime", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L216", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "now", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L216", "receiver": "datetime"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "IST", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L216"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "alert_zero_articles", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L234", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get_appwrite_db", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L239", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get_subscribers_by_preference", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L240", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get_brevo_service", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L252", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "send_newsletter", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L254", "receiver": "brevo"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L263", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L268", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L269", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "alert_quota_exhausted", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L276", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L279", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L280", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L284", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L284", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L286", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "alert_high_failure_rate", "is_member_call": false, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L287", "receiver": null}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L289", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L290", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L295", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L296", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L297", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L298", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L299", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L303", "receiver": "result"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L306", "receiver": "subscriber"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_send_scheduled_newsletter", "callee": "update_last_sent", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L308", "receiver": "appwrite_db"}, {"caller_nid": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_services_newsletter_service_preview_newsletter_content", "callee": "get", "is_member_call": true, "source_file": "C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py", "source_location": "L329", "receiver": "PREFERENCE_CONFIG"}]}
|
graphify-out/cache/ast/v0.9.5/de78637e85bfbabca7e0e6f845d1dc532f78b61ea1bc259c11d6a107013f34ff.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"nodes": [{"id": "c_users_hp_desktop_segmento_segmentopulse_backend_segmentopulse_backend_app_routes_analytics_py", "label": "analytics.py", "file_type": "code", "source_file": "app/routes/analytics.py", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
graphify-out/cache/stat-index.json
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\__init__.py":{"size":126,"mtime_ns":1781514962444458700,"hash":"eecc1507a271ee3a4f18beb081bf213d5f9bd4cf9f2f556a281a0d8fa29b2e89"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\config.py":{"size":6582,"mtime_ns":1781514962444458700,"hash":"430d2b7dc65a9a4637c73a7fbde416314de7cfa7e5bf5c54dda7f6bbff9500be"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py":{"size":11605,"mtime_ns":1781514962445976100,"hash":"64f695dced18f2112430338c38f35b7ead27b86c8d5730fa3ba39f90263edbca"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\models.py":{"size":3127,"mtime_ns":1781514962445976100,"hash":"d9001854e1ab93723ad394fa1f949fc19738b46e7ae90cc0e478b7161ccddd9d"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\__init__.py":{"size":22,"mtime_ns":1781514962445976100,"hash":"742ae2add47b68e650fef8504d287af6abecf83978226af6af087560abb41722"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\admin.py":{"size":27727,"mtime_ns":1781514962445976100,"hash":"fb668b871345d497c882cbefcc28a1b9c4810c79c18351665bb1da09499678e8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\analytics.py":{"size":1192,"mtime_ns":1781514962445976100,"hash":"b355af6a99f1f55eee5ebe8b568c2d18ac1fe2f99a3711751d9b9ab8220ca592"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\audio.py":{"size":10530,"mtime_ns":1781514962445976100,"hash":"a103a1e162e0afb1a55706bb74a47085be8842c9c241c84b7f899d0af15b75b8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\engagement.py":{"size":15131,"mtime_ns":1781514962450727100,"hash":"eaff5db9762e3ca292b0dae35d8317b550ee1f46ce293002062dc22711cf9212"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\monitoring.py":{"size":9933,"mtime_ns":1781514962450727100,"hash":"134358b12f40b1165cd17b3738e63aca2044d37b94fabd167e6a7aa70b3e85d9"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\news.py":{"size":12605,"mtime_ns":1781514962452321000,"hash":"f90dd26fc055772128c4270e04a1fa516735542c741b17f5dcc461c58ba7be22"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\research.py":{"size":2218,"mtime_ns":1781514962452321000,"hash":"0d58dfceafe2c87e401f83489747af1f343cda1b22c1e33522cd726f92bb7c1c"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\search.py":{"size":1945,"mtime_ns":1781514962452321000,"hash":"efa5c809a91733ee7b1d6bd3f7cf66b762eaf173c7f6cb5fa083599dc810e857"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py":{"size":12168,"mtime_ns":1781514962452321000,"hash":"a1c0540ec3d8b57a66824eca9a8a80d36dc478cfeb76501589cc07740a9bc55e"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\__init__.py":{"size":24,"mtime_ns":1781514962455349800,"hash":"5b8cfe02cefbad85f03afb68d994d8d97405904b4bd0bd20d9b1e5cadecacde6"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\adaptive_scheduler.py":{"size":11160,"mtime_ns":1781514962455349800,"hash":"0a5d97f66b27c9f91b113d126ad03b11b812576d04d6ebe4c009f1f4d75146b8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\alert_service.py":{"size":4928,"mtime_ns":1781514962455349800,"hash":"038c6e84e3d98a1411264a9b3f615b31c9b9eace061618b402a280767b16dd81"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\api_quota.py":{"size":9878,"mtime_ns":1781514962457876500,"hash":"a20ef1242e1e211335205c250e774190d018a57d36401d1afdd78c0b3e7394b9"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\appwrite_db.py":{"size":47040,"mtime_ns":1781523703237664500,"hash":"8d2645050644f00e617cbd76eb1e1b53ccc9ba17ac0b305a98286ceb590011fc"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\audio_service.py":{"size":6012,"mtime_ns":1781514962457876500,"hash":"cc3b8414537f7479ecad0d433b5a309e615e9ff46c842fc7596be687dbf27b80"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\brevo_email_service.py":{"size":20975,"mtime_ns":1781514962462152900,"hash":"5d75bed9cb256f3619daac6abccdd7ebb70f4f218fcb725c719dfdba9a48682d"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\browser_manager.py":{"size":5189,"mtime_ns":1781514962462726000,"hash":"4d4823016603e9cceb42ce428a113db4382c3f5452e9310d22ffe8c057d3bf57"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\cache_service.py":{"size":7035,"mtime_ns":1781514962462726000,"hash":"cb955368034e99b13f8a393bfbc58eedd3fe22759e833bd09df1e8cca3587c05"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\chunker.py":{"size":5752,"mtime_ns":1781514962464232200,"hash":"7c36118097a97f7bd84f5726a15486314d6de5f15d08fb2a2346fb8b5e582166"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\circuit_breaker.py":{"size":22071,"mtime_ns":1781514962464232200,"hash":"90b9478c3634c38f63919559c24f8eb90dc29c97cf2b773ac14bfe1638878724"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\deduplication.py":{"size":11102,"mtime_ns":1781523653921168300,"hash":"000d2c855fcf9b8c76711cdac5d3fddffd4074d01c7cca362f7080a5740e7855"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\document.py":{"size":3884,"mtime_ns":1781514962464232200,"hash":"d621492d4765b4ccf2e838d166a159415e13a94079cd81696affc34d36b34582"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\firebase_service.py":{"size":17726,"mtime_ns":1781514962468275700,"hash":"64734334e205ca9b708003df206d0e28ba6cc58acd252c3bf645478ac80cf910"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\ingestion_metrics.py":{"size":5261,"mtime_ns":1787313822596181000,"hash":"35ba28d6364e854a56c7643c89931ff3515b1b204b084b10ae8b3712dee8007b"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\news_aggregator.py":{"size":26475,"mtime_ns":1781514962468846900,"hash":"c7dd59daa1c5e70ccd64ff4c179e4074c15412d276a2ef3ad5102cf86b177a78"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\news_processor.py":{"size":3809,"mtime_ns":1787313906637289700,"hash":"9e3e9edea2c890ec82498090ca612d5537f6bf932c2c36fada0ed146ed05e2a5"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\news_providers.py":{"size":34676,"mtime_ns":1781514962470368800,"hash":"56b1b3fa71faa6cc58efde0b1d1c0ca614c0bf9fa1bee4067324a6e58b516eb1"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py":{"size":12805,"mtime_ns":1781514962472398000,"hash":"1d765c3377c8bcd49bbfb08d0e84508cfefbebb133e8792f0e353895b39e2024"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\optimized_retrieval.py":{"size":9851,"mtime_ns":1781514962473928100,"hash":"fcbc89ed0c7a85540695901c7e284e34e503f1925db9fb8a87b69bf66a5f8fad"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\professional_logger.py":{"size":6399,"mtime_ns":1781514962473928100,"hash":"e85bbbd3b38075f719a0f6809bae87b4280e94dc4dad8e6028bca6f64df52625"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\__init__.py":{"size":1752,"mtime_ns":1781514962475455400,"hash":"385ab3321c950564601e62fc4218d26217c4f00304472f74c010345a095976ea"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\base.py":{"size":9313,"mtime_ns":1781514962476980300,"hash":"57b50ebdf0d73458cec735d5eac432e3f4334e47ed4dc725a59936184c4ddbc8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\direct_rss\\__init__.py":{"size":674,"mtime_ns":1781514962478503500,"hash":"cd043289907d910a3800cd5859edbc0f7da0ccbd91892df34a7eb8e9657a7661"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\direct_rss\\client.py":{"size":19688,"mtime_ns":1781514962479025500,"hash":"31614ada3763c9c17cf0f2a1ceaf2474e33a18fa7854493743788f79757bc28a"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\hackernews\\__init__.py":{"size":613,"mtime_ns":1781514962481119300,"hash":"2f17a61fd043bfd550ee30b1788d3424bab6e5001d9fa4cfdde03c6faaf8323c"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\hackernews\\client.py":{"size":18418,"mtime_ns":1781514962482236800,"hash":"ec532d68ff5a12d4b42909ac7827f34dfdb81ae86febce49bbb492339f778013"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\inshorts\\__init__.py":{"size":750,"mtime_ns":1781514962482236800,"hash":"6e838f96679fcfe0a20b58daaa05911c9b0347471c281c87b014d8f81880396e"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\inshorts\\client.py":{"size":18730,"mtime_ns":1781514962484182700,"hash":"6795095f0135d94c2913a584c395fb1b3c4662f8fd123b0459e097b36ea7dff6"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\openrss\\__init__.py":{"size":1051,"mtime_ns":1781514962485786300,"hash":"d17118862f8c962b6153c9bb0dc40a1cc722ca5ff016e10bacf96d927f1a0f27"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\openrss\\client.py":{"size":18552,"mtime_ns":1781514962485786300,"hash":"2875632a56bfc96ea45e23853673f42c384b3829fa832d14c163c8cadf976dc5"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\sauravkanchan\\__init__.py":{"size":841,"mtime_ns":1781514962487313200,"hash":"a2806a359871aafb0ded3287238ff5b4b242266369f29342e88b82236e291669"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\sauravkanchan\\client.py":{"size":18135,"mtime_ns":1781514962487313200,"hash":"d374f0d9ad604b36335d8f45d1f38264bf11dcfe2270cf00134bd4c00e7d4ed0"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\thenewsapi\\__init__.py":{"size":764,"mtime_ns":1781514962489946100,"hash":"1f1346de349d92722fccd70c5b70202ba30f5dd1ca199e964d2a3b97b08f79fa"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\thenewsapi\\client.py":{"size":18718,"mtime_ns":1781514962490470500,"hash":"db30db5c6deaa34356407cb6df61d2d16d776f7d29ece5f7c86e9e6c2f5dc3ce"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\webz\\__init__.py":{"size":995,"mtime_ns":1781514962490470500,"hash":"5989123cafe0c1ccde0a01bda7aa654fcc736ac5b50d031ee58070cf0a79091c"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\webz\\client.py":{"size":22054,"mtime_ns":1781514962493040000,"hash":"dfffd2cbf83adcb99fe2a72837cf7a29f1b8556d37ed7e9fcc2e19a60d6291d5"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\wikinews\\__init__.py":{"size":915,"mtime_ns":1781514962494189900,"hash":"d57fb68c4231418cd4ad87e6b1e1d63ef4a7b15e87a32ec9a25aa91381b25deb"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\wikinews\\client.py":{"size":21502,"mtime_ns":1781514962494716200,"hash":"0937e6b61dd4ae616dd81bb8050939fb2dba87f05228ecb124281344a26a05c8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\worldnewsai\\__init__.py":{"size":1275,"mtime_ns":1781514962494716200,"hash":"439895ca37a32b6ca6d8cfdc0cb3f5f23a38539bc19a0fd2071b85d04cd9b7f1"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\worldnewsai\\client.py":{"size":19640,"mtime_ns":1781514962494716200,"hash":"9096fc125452073983582af258bf2694e78cd70090a1dffe8cc4b761da64d84c"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\research_aggregator.py":{"size":8055,"mtime_ns":1781514962494716200,"hash":"3ad4b4d007bd06b46a03271b9c3e5c7ec5af8a4c14c50f1476fb790cdb410963"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\rss_parser.py":{"size":9502,"mtime_ns":1781514962494716200,"hash":"6bdd5339ab694d37483c2b55529056cef3d708354d6ee7f4a071e5cdde80080e"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\scheduler.py":{"size":46098,"mtime_ns":1781523637254985200,"hash":"498313dbadf4c80e12b52838baf31fbfbbc41b0c52052e2d8a8d785b200b66d6"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\upstash_cache.py":{"size":13597,"mtime_ns":1781514962500371800,"hash":"3bca0f62133e053bdd7c2b5b646e7c737faaeeb7a631eb546fd68b66c24ec941"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\utils\\__init__.py":{"size":561,"mtime_ns":1781514962502507000,"hash":"62681459c997dc2f764eb7b90cf025b9095064b21b2e85c3d9c94c103c26f3b2"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\utils\\image_enricher.py":{"size":8540,"mtime_ns":1781514962502507000,"hash":"09a84beee2fef2efdb41f6b79f199709b1e1b9da1c02fcd638d31401d953de3b"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\utils\\provider_state.py":{"size":12204,"mtime_ns":1781514962502507000,"hash":"816730167dce1598d851f012d64013c8098e0ed35a553080c9ac28b93314acb2"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\worker_manager.py":{"size":7826,"mtime_ns":1781514962502507000,"hash":"d20529d19e5acf76d92917f7b4eadce32ab0285c719f7dbddb027b4d9843ccc0"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils.py":{"size":3850,"mtime_ns":1781514962505597200,"hash":"af0157ce82f4a58535388740decebec619d76f8faebc5eb73ec68ec3dfd2ce59"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\__init__.py":{"size":167,"mtime_ns":1781514962508122200,"hash":"6e1c6fbce3c4af8b317a2deff50e734bbae17059b9cb68049ea3379bb991e9d2"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\cursor_pagination.py":{"size":4891,"mtime_ns":1781514962508122200,"hash":"d3b8e19cf36c2c735f7b861590a2d3016e0727567099960261085270a76090a9"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\custom_logger.py":{"size":8361,"mtime_ns":1781514962508122200,"hash":"7dc6ce505c69a89c92407433336106f836db682f85c8b9de9fc73f8a759b1b2f"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\data_validation.py":{"size":28386,"mtime_ns":1787313714328601600,"hash":"3bf3510609808b0c707c328e4bc30d60b25fd740bc72c1de8a770c743e2656c0"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\date_parser.py":{"size":3998,"mtime_ns":1781514962511734200,"hash":"a10aebfb8c15a302fb9b8e7b13e89bab305432cb99083619280257bef5a87aa8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\helpers.py":{"size":1338,"mtime_ns":1781514962512810600,"hash":"59d0384f99ed3de4cc9d97268caf6e80131f460aaf9afd271e673a050beaef48"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\id_generator.py":{"size":3986,"mtime_ns":1781523720441230400,"hash":"c0161c88cc0e31b4aeede40987b30e87316729b0e8fe75f7fd7051da3157805d"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\query_builder.py":{"size":7589,"mtime_ns":1781514962514335100,"hash":"734b875389b3fbe402ceff84faf0e0118dc756b7db41d7a1e0eb6d1b6e54edb3"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\ranking.py":{"size":6030,"mtime_ns":1781514962514335100,"hash":"92799c4fe91c5e6fd7147661b8e2efb28ec5851a99f6535bd2362b189d745b39"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\redis_dedup.py":{"size":4307,"mtime_ns":1781514962516417400,"hash":"ffedb3998d4563b85bc83e09de07d52afd72ba73229fe6b8bca5b213ecac8ef9"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\stale_while_revalidate.py":{"size":6160,"mtime_ns":1781514962516417400,"hash":"b2d24b031af38107a08723cd801da77bad66264d990c031ab1823ee83e2eda60"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\url_canonicalization.py":{"size":5184,"mtime_ns":1781514962516417400,"hash":"6b30bd425d89f59b871fc9528eeed5770082bdfadbc34c158bb644006c804480"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\data\\velocity_tracking.json":{"size":4982,"mtime_ns":1781514962518434200,"hash":"e2a3297a20d734d2eeecbfa746bb4c616730344478091b5924752f9afc1dcfef"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\deploy.ps1":{"size":2894,"mtime_ns":1781514962520446400,"hash":"25f371f466f58c988c5df1c00815af17f031ac53390f3304a436ea8599c53d9f"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\run.py":{"size":712,"mtime_ns":1781514962609903800,"hash":"b528c588351a8cb9b86263632c136a47809766b8417e98a8f1b41ad0c9737e8e"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\.agents\\rules\\graphify.md":{"size":963,"mtime_ns":1781514962439681700,"hash":"da57cf34efdec417e86e41fbbcc003efc293da263f6d2edf277f72f2429bd7d4"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\.agents\\workflows\\graphify.md":{"size":287,"mtime_ns":1781514962440723300,"hash":"02a10022db4416c89203d0bb199d5b2f48da01fb2962bb28adff3ca65ba10260"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\README.md":{"size":1780,"mtime_ns":1781514962443911200,"hash":"391cc76e75cc24c2baeeec4acc44ce8cc24660df2e51a926c7d29466e746a3ef"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\requirements.txt":{"size":1403,"mtime_ns":1781514962608238000,"hash":"7dfd75e13c9a9666f57548f107176909ac155140ad5ef07efa64612f7d7f61ba"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\tests\\test_quality_rescue.py":{"size":4158,"mtime_ns":1787313849459781700,"hash":"4079330b0e3ebe2d9619f40469ae90be4e88da73740935a2a71e58ff02d8180a"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\tests\\test_smoke.py":{"size":34,"mtime_ns":1787313339865948500,"hash":"5f4d982648bf6a9651645dad2592fd0d924e901ee47f36cf0746a54e7a60ecc3"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\SPEC_quality_score_rescue.md":{"size":8975,"mtime_ns":1787312784771173900,"hash":"788cd197abfbc6ecb1896cfb0a4512a9bb7603020857f20c592b45f4a7795a31"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\TICKETS_quality_score_rescue.md":{"size":7365,"mtime_ns":1787312756814512100,"hash":"2e14945c0cd4ef32cc5ae2c93f84447d94286a368c940f5d90168d2e6c5af3be"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\UBIQUITOUS_LANGUAGE.md":{"size":4060,"mtime_ns":1787312797962652000,"hash":"ecc920e9fbcafaa88997a0402105ff80b8c0edf22a726f4a8d870874669677c0"}}
|
|
|
|
| 1 |
+
{"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\__init__.py":{"size":126,"mtime_ns":1781514962444458700,"hash":"eecc1507a271ee3a4f18beb081bf213d5f9bd4cf9f2f556a281a0d8fa29b2e89"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\config.py":{"size":6582,"mtime_ns":1781514962444458700,"hash":"430d2b7dc65a9a4637c73a7fbde416314de7cfa7e5bf5c54dda7f6bbff9500be"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\main.py":{"size":11513,"mtime_ns":1787560164227792700,"hash":"4015dd2120abc1b10e107930ad2e461104dc0f8d4b92099117657b7401ead048"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\models.py":{"size":3127,"mtime_ns":1781514962445976100,"hash":"d9001854e1ab93723ad394fa1f949fc19738b46e7ae90cc0e478b7161ccddd9d"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\__init__.py":{"size":22,"mtime_ns":1781514962445976100,"hash":"742ae2add47b68e650fef8504d287af6abecf83978226af6af087560abb41722"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\admin.py":{"size":27727,"mtime_ns":1781514962445976100,"hash":"fb668b871345d497c882cbefcc28a1b9c4810c79c18351665bb1da09499678e8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\analytics.py":{"size":49,"mtime_ns":1787560197983953900,"hash":"de78637e85bfbabca7e0e6f845d1dc532f78b61ea1bc259c11d6a107013f34ff"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\audio.py":{"size":10530,"mtime_ns":1781514962445976100,"hash":"a103a1e162e0afb1a55706bb74a47085be8842c9c241c84b7f899d0af15b75b8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\engagement.py":{"size":15131,"mtime_ns":1781514962450727100,"hash":"eaff5db9762e3ca292b0dae35d8317b550ee1f46ce293002062dc22711cf9212"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\monitoring.py":{"size":9933,"mtime_ns":1781514962450727100,"hash":"134358b12f40b1165cd17b3738e63aca2044d37b94fabd167e6a7aa70b3e85d9"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\news.py":{"size":12605,"mtime_ns":1781514962452321000,"hash":"f90dd26fc055772128c4270e04a1fa516735542c741b17f5dcc461c58ba7be22"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\research.py":{"size":2218,"mtime_ns":1781514962452321000,"hash":"0d58dfceafe2c87e401f83489747af1f343cda1b22c1e33522cd726f92bb7c1c"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\search.py":{"size":1945,"mtime_ns":1781514962452321000,"hash":"efa5c809a91733ee7b1d6bd3f7cf66b762eaf173c7f6cb5fa083599dc810e857"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\routes\\subscription.py":{"size":12249,"mtime_ns":1787563549028880600,"hash":"5b8213932acd73feafcf8cc6da4a06622d078b983b20eec92bf30d59ab2c9c3e"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\__init__.py":{"size":24,"mtime_ns":1781514962455349800,"hash":"5b8cfe02cefbad85f03afb68d994d8d97405904b4bd0bd20d9b1e5cadecacde6"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\adaptive_scheduler.py":{"size":11160,"mtime_ns":1781514962455349800,"hash":"0a5d97f66b27c9f91b113d126ad03b11b812576d04d6ebe4c009f1f4d75146b8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\alert_service.py":{"size":4928,"mtime_ns":1781514962455349800,"hash":"038c6e84e3d98a1411264a9b3f615b31c9b9eace061618b402a280767b16dd81"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\api_quota.py":{"size":9878,"mtime_ns":1781514962457876500,"hash":"a20ef1242e1e211335205c250e774190d018a57d36401d1afdd78c0b3e7394b9"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\appwrite_db.py":{"size":47040,"mtime_ns":1781523703237664500,"hash":"8d2645050644f00e617cbd76eb1e1b53ccc9ba17ac0b305a98286ceb590011fc"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\audio_service.py":{"size":6012,"mtime_ns":1781514962457876500,"hash":"cc3b8414537f7479ecad0d433b5a309e615e9ff46c842fc7596be687dbf27b80"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\brevo_email_service.py":{"size":20975,"mtime_ns":1781514962462152900,"hash":"5d75bed9cb256f3619daac6abccdd7ebb70f4f218fcb725c719dfdba9a48682d"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\browser_manager.py":{"size":5189,"mtime_ns":1781514962462726000,"hash":"4d4823016603e9cceb42ce428a113db4382c3f5452e9310d22ffe8c057d3bf57"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\cache_service.py":{"size":7035,"mtime_ns":1781514962462726000,"hash":"cb955368034e99b13f8a393bfbc58eedd3fe22759e833bd09df1e8cca3587c05"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\chunker.py":{"size":5752,"mtime_ns":1781514962464232200,"hash":"7c36118097a97f7bd84f5726a15486314d6de5f15d08fb2a2346fb8b5e582166"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\circuit_breaker.py":{"size":22071,"mtime_ns":1781514962464232200,"hash":"90b9478c3634c38f63919559c24f8eb90dc29c97cf2b773ac14bfe1638878724"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\deduplication.py":{"size":11102,"mtime_ns":1781523653921168300,"hash":"000d2c855fcf9b8c76711cdac5d3fddffd4074d01c7cca362f7080a5740e7855"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\document.py":{"size":3884,"mtime_ns":1781514962464232200,"hash":"d621492d4765b4ccf2e838d166a159415e13a94079cd81696affc34d36b34582"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\firebase_service.py":{"size":84,"mtime_ns":1787560217544305700,"hash":"1c3f57689ce70e2b13e423b55681cdaaed4d952d420c978f01327190664f0e67"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\ingestion_metrics.py":{"size":5261,"mtime_ns":1787313822596181000,"hash":"35ba28d6364e854a56c7643c89931ff3515b1b204b084b10ae8b3712dee8007b"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\news_aggregator.py":{"size":26475,"mtime_ns":1781514962468846900,"hash":"c7dd59daa1c5e70ccd64ff4c179e4074c15412d276a2ef3ad5102cf86b177a78"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\news_processor.py":{"size":3809,"mtime_ns":1787313906637289700,"hash":"9e3e9edea2c890ec82498090ca612d5537f6bf932c2c36fada0ed146ed05e2a5"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\news_providers.py":{"size":34676,"mtime_ns":1781514962470368800,"hash":"56b1b3fa71faa6cc58efde0b1d1c0ca614c0bf9fa1bee4067324a6e58b516eb1"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\newsletter_service.py":{"size":12743,"mtime_ns":1787560901560863300,"hash":"783347828a08021007c473737ad3efc13cc87a66f06f3fd9b43c629af0098924"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\optimized_retrieval.py":{"size":9851,"mtime_ns":1781514962473928100,"hash":"fcbc89ed0c7a85540695901c7e284e34e503f1925db9fb8a87b69bf66a5f8fad"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\professional_logger.py":{"size":6399,"mtime_ns":1781514962473928100,"hash":"e85bbbd3b38075f719a0f6809bae87b4280e94dc4dad8e6028bca6f64df52625"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\__init__.py":{"size":1752,"mtime_ns":1781514962475455400,"hash":"385ab3321c950564601e62fc4218d26217c4f00304472f74c010345a095976ea"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\base.py":{"size":9313,"mtime_ns":1781514962476980300,"hash":"57b50ebdf0d73458cec735d5eac432e3f4334e47ed4dc725a59936184c4ddbc8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\direct_rss\\__init__.py":{"size":674,"mtime_ns":1781514962478503500,"hash":"cd043289907d910a3800cd5859edbc0f7da0ccbd91892df34a7eb8e9657a7661"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\direct_rss\\client.py":{"size":19688,"mtime_ns":1781514962479025500,"hash":"31614ada3763c9c17cf0f2a1ceaf2474e33a18fa7854493743788f79757bc28a"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\hackernews\\__init__.py":{"size":613,"mtime_ns":1781514962481119300,"hash":"2f17a61fd043bfd550ee30b1788d3424bab6e5001d9fa4cfdde03c6faaf8323c"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\hackernews\\client.py":{"size":18418,"mtime_ns":1781514962482236800,"hash":"ec532d68ff5a12d4b42909ac7827f34dfdb81ae86febce49bbb492339f778013"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\inshorts\\__init__.py":{"size":750,"mtime_ns":1781514962482236800,"hash":"6e838f96679fcfe0a20b58daaa05911c9b0347471c281c87b014d8f81880396e"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\inshorts\\client.py":{"size":18730,"mtime_ns":1781514962484182700,"hash":"6795095f0135d94c2913a584c395fb1b3c4662f8fd123b0459e097b36ea7dff6"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\openrss\\__init__.py":{"size":1051,"mtime_ns":1781514962485786300,"hash":"d17118862f8c962b6153c9bb0dc40a1cc722ca5ff016e10bacf96d927f1a0f27"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\openrss\\client.py":{"size":18552,"mtime_ns":1781514962485786300,"hash":"2875632a56bfc96ea45e23853673f42c384b3829fa832d14c163c8cadf976dc5"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\sauravkanchan\\__init__.py":{"size":841,"mtime_ns":1781514962487313200,"hash":"a2806a359871aafb0ded3287238ff5b4b242266369f29342e88b82236e291669"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\sauravkanchan\\client.py":{"size":18135,"mtime_ns":1781514962487313200,"hash":"d374f0d9ad604b36335d8f45d1f38264bf11dcfe2270cf00134bd4c00e7d4ed0"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\thenewsapi\\__init__.py":{"size":764,"mtime_ns":1781514962489946100,"hash":"1f1346de349d92722fccd70c5b70202ba30f5dd1ca199e964d2a3b97b08f79fa"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\thenewsapi\\client.py":{"size":18718,"mtime_ns":1781514962490470500,"hash":"db30db5c6deaa34356407cb6df61d2d16d776f7d29ece5f7c86e9e6c2f5dc3ce"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\webz\\__init__.py":{"size":995,"mtime_ns":1781514962490470500,"hash":"5989123cafe0c1ccde0a01bda7aa654fcc736ac5b50d031ee58070cf0a79091c"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\webz\\client.py":{"size":22054,"mtime_ns":1781514962493040000,"hash":"dfffd2cbf83adcb99fe2a72837cf7a29f1b8556d37ed7e9fcc2e19a60d6291d5"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\wikinews\\__init__.py":{"size":915,"mtime_ns":1781514962494189900,"hash":"d57fb68c4231418cd4ad87e6b1e1d63ef4a7b15e87a32ec9a25aa91381b25deb"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\wikinews\\client.py":{"size":21502,"mtime_ns":1781514962494716200,"hash":"0937e6b61dd4ae616dd81bb8050939fb2dba87f05228ecb124281344a26a05c8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\worldnewsai\\__init__.py":{"size":1275,"mtime_ns":1781514962494716200,"hash":"439895ca37a32b6ca6d8cfdc0cb3f5f23a38539bc19a0fd2071b85d04cd9b7f1"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\providers\\worldnewsai\\client.py":{"size":19640,"mtime_ns":1781514962494716200,"hash":"9096fc125452073983582af258bf2694e78cd70090a1dffe8cc4b761da64d84c"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\research_aggregator.py":{"size":8055,"mtime_ns":1781514962494716200,"hash":"3ad4b4d007bd06b46a03271b9c3e5c7ec5af8a4c14c50f1476fb790cdb410963"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\rss_parser.py":{"size":9502,"mtime_ns":1781514962494716200,"hash":"6bdd5339ab694d37483c2b55529056cef3d708354d6ee7f4a071e5cdde80080e"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\scheduler.py":{"size":46098,"mtime_ns":1781523637254985200,"hash":"498313dbadf4c80e12b52838baf31fbfbbc41b0c52052e2d8a8d785b200b66d6"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\upstash_cache.py":{"size":13597,"mtime_ns":1781514962500371800,"hash":"3bca0f62133e053bdd7c2b5b646e7c737faaeeb7a631eb546fd68b66c24ec941"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\utils\\__init__.py":{"size":561,"mtime_ns":1781514962502507000,"hash":"62681459c997dc2f764eb7b90cf025b9095064b21b2e85c3d9c94c103c26f3b2"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\utils\\image_enricher.py":{"size":8540,"mtime_ns":1781514962502507000,"hash":"09a84beee2fef2efdb41f6b79f199709b1e1b9da1c02fcd638d31401d953de3b"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\utils\\provider_state.py":{"size":12204,"mtime_ns":1781514962502507000,"hash":"816730167dce1598d851f012d64013c8098e0ed35a553080c9ac28b93314acb2"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\services\\worker_manager.py":{"size":7826,"mtime_ns":1781514962502507000,"hash":"d20529d19e5acf76d92917f7b4eadce32ab0285c719f7dbddb027b4d9843ccc0"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils.py":{"size":3850,"mtime_ns":1781514962505597200,"hash":"af0157ce82f4a58535388740decebec619d76f8faebc5eb73ec68ec3dfd2ce59"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\__init__.py":{"size":167,"mtime_ns":1781514962508122200,"hash":"6e1c6fbce3c4af8b317a2deff50e734bbae17059b9cb68049ea3379bb991e9d2"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\cursor_pagination.py":{"size":4891,"mtime_ns":1781514962508122200,"hash":"d3b8e19cf36c2c735f7b861590a2d3016e0727567099960261085270a76090a9"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\custom_logger.py":{"size":8361,"mtime_ns":1781514962508122200,"hash":"7dc6ce505c69a89c92407433336106f836db682f85c8b9de9fc73f8a759b1b2f"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\data_validation.py":{"size":28386,"mtime_ns":1787313714328601600,"hash":"3bf3510609808b0c707c328e4bc30d60b25fd740bc72c1de8a770c743e2656c0"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\date_parser.py":{"size":3998,"mtime_ns":1781514962511734200,"hash":"a10aebfb8c15a302fb9b8e7b13e89bab305432cb99083619280257bef5a87aa8"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\helpers.py":{"size":1338,"mtime_ns":1781514962512810600,"hash":"59d0384f99ed3de4cc9d97268caf6e80131f460aaf9afd271e673a050beaef48"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\id_generator.py":{"size":3986,"mtime_ns":1781523720441230400,"hash":"c0161c88cc0e31b4aeede40987b30e87316729b0e8fe75f7fd7051da3157805d"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\query_builder.py":{"size":7589,"mtime_ns":1781514962514335100,"hash":"734b875389b3fbe402ceff84faf0e0118dc756b7db41d7a1e0eb6d1b6e54edb3"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\ranking.py":{"size":6030,"mtime_ns":1781514962514335100,"hash":"92799c4fe91c5e6fd7147661b8e2efb28ec5851a99f6535bd2362b189d745b39"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\redis_dedup.py":{"size":4307,"mtime_ns":1781514962516417400,"hash":"ffedb3998d4563b85bc83e09de07d52afd72ba73229fe6b8bca5b213ecac8ef9"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\stale_while_revalidate.py":{"size":6160,"mtime_ns":1781514962516417400,"hash":"b2d24b031af38107a08723cd801da77bad66264d990c031ab1823ee83e2eda60"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\app\\utils\\url_canonicalization.py":{"size":5184,"mtime_ns":1781514962516417400,"hash":"6b30bd425d89f59b871fc9528eeed5770082bdfadbc34c158bb644006c804480"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\data\\velocity_tracking.json":{"size":4982,"mtime_ns":1781514962518434200,"hash":"e2a3297a20d734d2eeecbfa746bb4c616730344478091b5924752f9afc1dcfef"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\deploy.ps1":{"size":2894,"mtime_ns":1781514962520446400,"hash":"25f371f466f58c988c5df1c00815af17f031ac53390f3304a436ea8599c53d9f"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\run.py":{"size":712,"mtime_ns":1781514962609903800,"hash":"b528c588351a8cb9b86263632c136a47809766b8417e98a8f1b41ad0c9737e8e"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\.agents\\rules\\graphify.md":{"size":963,"mtime_ns":1781514962439681700,"hash":"da57cf34efdec417e86e41fbbcc003efc293da263f6d2edf277f72f2429bd7d4"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\.agents\\workflows\\graphify.md":{"size":287,"mtime_ns":1781514962440723300,"hash":"02a10022db4416c89203d0bb199d5b2f48da01fb2962bb28adff3ca65ba10260"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\README.md":{"size":1780,"mtime_ns":1781514962443911200,"hash":"391cc76e75cc24c2baeeec4acc44ce8cc24660df2e51a926c7d29466e746a3ef"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\requirements.txt":{"size":1403,"mtime_ns":1781514962608238000,"hash":"7dfd75e13c9a9666f57548f107176909ac155140ad5ef07efa64612f7d7f61ba"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\tests\\test_quality_rescue.py":{"size":4158,"mtime_ns":1787313849459781700,"hash":"4079330b0e3ebe2d9619f40469ae90be4e88da73740935a2a71e58ff02d8180a"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\tests\\test_smoke.py":{"size":34,"mtime_ns":1787313339865948500,"hash":"5f4d982648bf6a9651645dad2592fd0d924e901ee47f36cf0746a54e7a60ecc3"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\SPEC_quality_score_rescue.md":{"size":8975,"mtime_ns":1787312784771173900,"hash":"788cd197abfbc6ecb1896cfb0a4512a9bb7603020857f20c592b45f4a7795a31"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\TICKETS_quality_score_rescue.md":{"size":7365,"mtime_ns":1787312756814512100,"hash":"2e14945c0cd4ef32cc5ae2c93f84447d94286a368c940f5d90168d2e6c5af3be"},"C:\\Users\\HP\\Desktop\\Segmento\\SegmentoPulse-Backend\\SegmentoPulse\\backend\\UBIQUITOUS_LANGUAGE.md":{"size":4060,"mtime_ns":1787312797962652000,"hash":"ecc920e9fbcafaa88997a0402105ff80b8c0edf22a726f4a8d870874669677c0"}}
|
graphify-out/graph.html
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
graphify-out/graph.json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
graphify-out/manifest.json
CHANGED
|
@@ -10,9 +10,9 @@
|
|
| 10 |
"semantic_hash": "387b663b09b63c21c265e656853e0400"
|
| 11 |
},
|
| 12 |
"app/main.py": {
|
| 13 |
-
"mtime":
|
| 14 |
-
"ast_hash": "
|
| 15 |
-
"semantic_hash": "
|
| 16 |
},
|
| 17 |
"app/models.py": {
|
| 18 |
"mtime": 1781514962.445976,
|
|
@@ -30,9 +30,9 @@
|
|
| 30 |
"semantic_hash": "67f26b72218fb0f3953b572ce1a5d1cc"
|
| 31 |
},
|
| 32 |
"app/routes/analytics.py": {
|
| 33 |
-
"mtime":
|
| 34 |
-
"ast_hash": "
|
| 35 |
-
"semantic_hash": "
|
| 36 |
},
|
| 37 |
"app/routes/audio.py": {
|
| 38 |
"mtime": 1781514962.445976,
|
|
@@ -65,9 +65,9 @@
|
|
| 65 |
"semantic_hash": "624423d802fb0621c1c130de6a96bc75"
|
| 66 |
},
|
| 67 |
"app/routes/subscription.py": {
|
| 68 |
-
"mtime":
|
| 69 |
-
"ast_hash": "
|
| 70 |
-
"semantic_hash": "
|
| 71 |
},
|
| 72 |
"app/services/__init__.py": {
|
| 73 |
"mtime": 1781514962.4553497,
|
|
@@ -135,9 +135,9 @@
|
|
| 135 |
"semantic_hash": "1fe592c432c159b50b7198ee0e3ce143"
|
| 136 |
},
|
| 137 |
"app/services/firebase_service.py": {
|
| 138 |
-
"mtime":
|
| 139 |
-
"ast_hash": "
|
| 140 |
-
"semantic_hash": "
|
| 141 |
},
|
| 142 |
"app/services/ingestion_metrics.py": {
|
| 143 |
"mtime": 1787313822.596181,
|
|
@@ -160,9 +160,9 @@
|
|
| 160 |
"semantic_hash": "befbcb63100bc42f6374978bd6f474de"
|
| 161 |
},
|
| 162 |
"app/services/newsletter_service.py": {
|
| 163 |
-
"mtime":
|
| 164 |
-
"ast_hash": "
|
| 165 |
-
"semantic_hash": "
|
| 166 |
},
|
| 167 |
"app/services/optimized_retrieval.py": {
|
| 168 |
"mtime": 1781514962.4739282,
|
|
@@ -410,9 +410,9 @@
|
|
| 410 |
"semantic_hash": "4f0f6f724db6ac098ce46e58f924cd00"
|
| 411 |
},
|
| 412 |
"requirements.txt": {
|
| 413 |
-
"mtime":
|
| 414 |
-
"ast_hash": "
|
| 415 |
-
"semantic_hash": "
|
| 416 |
},
|
| 417 |
"tests/test_quality_rescue.py": {
|
| 418 |
"mtime": 1787313849.4597816,
|
|
|
|
| 10 |
"semantic_hash": "387b663b09b63c21c265e656853e0400"
|
| 11 |
},
|
| 12 |
"app/main.py": {
|
| 13 |
+
"mtime": 1787560164.2277927,
|
| 14 |
+
"ast_hash": "32c183e08563cde0425013898d9951da",
|
| 15 |
+
"semantic_hash": ""
|
| 16 |
},
|
| 17 |
"app/models.py": {
|
| 18 |
"mtime": 1781514962.445976,
|
|
|
|
| 30 |
"semantic_hash": "67f26b72218fb0f3953b572ce1a5d1cc"
|
| 31 |
},
|
| 32 |
"app/routes/analytics.py": {
|
| 33 |
+
"mtime": 1787560197.983954,
|
| 34 |
+
"ast_hash": "c09d7c9738a40d395d0b12923696c8e5",
|
| 35 |
+
"semantic_hash": ""
|
| 36 |
},
|
| 37 |
"app/routes/audio.py": {
|
| 38 |
"mtime": 1781514962.445976,
|
|
|
|
| 65 |
"semantic_hash": "624423d802fb0621c1c130de6a96bc75"
|
| 66 |
},
|
| 67 |
"app/routes/subscription.py": {
|
| 68 |
+
"mtime": 1787563549.0288806,
|
| 69 |
+
"ast_hash": "ceac23dd155a1a3efed2d054804df90b",
|
| 70 |
+
"semantic_hash": ""
|
| 71 |
},
|
| 72 |
"app/services/__init__.py": {
|
| 73 |
"mtime": 1781514962.4553497,
|
|
|
|
| 135 |
"semantic_hash": "1fe592c432c159b50b7198ee0e3ce143"
|
| 136 |
},
|
| 137 |
"app/services/firebase_service.py": {
|
| 138 |
+
"mtime": 1787560217.5443058,
|
| 139 |
+
"ast_hash": "eade08a32f368fca596965fd0ac09816",
|
| 140 |
+
"semantic_hash": ""
|
| 141 |
},
|
| 142 |
"app/services/ingestion_metrics.py": {
|
| 143 |
"mtime": 1787313822.596181,
|
|
|
|
| 160 |
"semantic_hash": "befbcb63100bc42f6374978bd6f474de"
|
| 161 |
},
|
| 162 |
"app/services/newsletter_service.py": {
|
| 163 |
+
"mtime": 1787560901.5608633,
|
| 164 |
+
"ast_hash": "8f66b5eced36015e4c0afe790000d6bf",
|
| 165 |
+
"semantic_hash": ""
|
| 166 |
},
|
| 167 |
"app/services/optimized_retrieval.py": {
|
| 168 |
"mtime": 1781514962.4739282,
|
|
|
|
| 410 |
"semantic_hash": "4f0f6f724db6ac098ce46e58f924cd00"
|
| 411 |
},
|
| 412 |
"requirements.txt": {
|
| 413 |
+
"mtime": 1787560182.8633618,
|
| 414 |
+
"ast_hash": "b3469a177d2afa5b7dfe5240a24642ba",
|
| 415 |
+
"semantic_hash": ""
|
| 416 |
},
|
| 417 |
"tests/test_quality_rescue.py": {
|
| 418 |
"mtime": 1787313849.4597816,
|