harshrawat18 commited on
Commit
70bc888
ยท
1 Parent(s): cd9285b

feat: ingestion fix

Browse files
Files changed (7) hide show
  1. .coverage +0 -0
  2. coverage.xml +1927 -0
  3. reset_pib.py +13 -0
  4. scripts/ingest_tor_stealth.py +1 -41
  5. test_db.py +17 -0
  6. test_db_fix.py +13 -0
  7. test_get_id.py +10 -0
.coverage ADDED
Binary file (53.2 kB). View file
 
coverage.xml ADDED
@@ -0,0 +1,1927 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" ?>
2
+ <coverage version="7.14.1" timestamp="1780582097108" lines-valid="1713" lines-covered="259" line-rate="0.1512" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0">
3
+ <!-- Generated by coverage.py: https://coverage.readthedocs.io/en/7.14.1 -->
4
+ <!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
5
+ <sources>
6
+ <source>/workspaces/govbridge/gov_backend</source>
7
+ </sources>
8
+ <packages>
9
+ <package name="." line-rate="0" branch-rate="0" complexity="0">
10
+ <classes>
11
+ <class name="__init__.py" filename="__init__.py" complexity="0" line-rate="1" branch-rate="0">
12
+ <methods/>
13
+ <lines/>
14
+ </class>
15
+ <class name="ai_brain.py" filename="ai_brain.py" complexity="0" line-rate="0" branch-rate="0">
16
+ <methods/>
17
+ <lines>
18
+ <line number="1" hits="0"/>
19
+ <line number="2" hits="0"/>
20
+ <line number="3" hits="0"/>
21
+ <line number="5" hits="0"/>
22
+ <line number="6" hits="0"/>
23
+ <line number="8" hits="0"/>
24
+ <line number="10" hits="0"/>
25
+ <line number="11" hits="0"/>
26
+ <line number="12" hits="0"/>
27
+ <line number="14" hits="0"/>
28
+ <line number="16" hits="0"/>
29
+ <line number="18" hits="0"/>
30
+ <line number="19" hits="0"/>
31
+ <line number="26" hits="0"/>
32
+ <line number="27" hits="0"/>
33
+ <line number="28" hits="0"/>
34
+ <line number="29" hits="0"/>
35
+ <line number="30" hits="0"/>
36
+ <line number="32" hits="0"/>
37
+ <line number="33" hits="0"/>
38
+ </lines>
39
+ </class>
40
+ <class name="api.py" filename="api.py" complexity="0" line-rate="0" branch-rate="0">
41
+ <methods/>
42
+ <lines>
43
+ <line number="1" hits="0"/>
44
+ <line number="2" hits="0"/>
45
+ <line number="3" hits="0"/>
46
+ <line number="4" hits="0"/>
47
+ <line number="5" hits="0"/>
48
+ <line number="6" hits="0"/>
49
+ <line number="7" hits="0"/>
50
+ <line number="8" hits="0"/>
51
+ <line number="9" hits="0"/>
52
+ <line number="10" hits="0"/>
53
+ <line number="11" hits="0"/>
54
+ <line number="12" hits="0"/>
55
+ <line number="13" hits="0"/>
56
+ <line number="14" hits="0"/>
57
+ <line number="15" hits="0"/>
58
+ <line number="16" hits="0"/>
59
+ <line number="17" hits="0"/>
60
+ <line number="18" hits="0"/>
61
+ <line number="19" hits="0"/>
62
+ <line number="22" hits="0"/>
63
+ <line number="23" hits="0"/>
64
+ <line number="24" hits="0"/>
65
+ <line number="25" hits="0"/>
66
+ <line number="27" hits="0"/>
67
+ <line number="28" hits="0"/>
68
+ <line number="30" hits="0"/>
69
+ <line number="31" hits="0"/>
70
+ <line number="34" hits="0"/>
71
+ <line number="35" hits="0"/>
72
+ <line number="36" hits="0"/>
73
+ <line number="39" hits="0"/>
74
+ <line number="49" hits="0"/>
75
+ <line number="50" hits="0"/>
76
+ <line number="51" hits="0"/>
77
+ <line number="53" hits="0"/>
78
+ <line number="54" hits="0"/>
79
+ <line number="55" hits="0"/>
80
+ <line number="56" hits="0"/>
81
+ <line number="58" hits="0"/>
82
+ <line number="59" hits="0"/>
83
+ <line number="60" hits="0"/>
84
+ <line number="62" hits="0"/>
85
+ <line number="63" hits="0"/>
86
+ <line number="64" hits="0"/>
87
+ <line number="65" hits="0"/>
88
+ <line number="66" hits="0"/>
89
+ <line number="67" hits="0"/>
90
+ <line number="68" hits="0"/>
91
+ <line number="69" hits="0"/>
92
+ <line number="71" hits="0"/>
93
+ <line number="72" hits="0"/>
94
+ <line number="73" hits="0"/>
95
+ <line number="74" hits="0"/>
96
+ <line number="75" hits="0"/>
97
+ <line number="76" hits="0"/>
98
+ <line number="77" hits="0"/>
99
+ <line number="79" hits="0"/>
100
+ <line number="80" hits="0"/>
101
+ <line number="81" hits="0"/>
102
+ <line number="82" hits="0"/>
103
+ <line number="83" hits="0"/>
104
+ <line number="84" hits="0"/>
105
+ <line number="87" hits="0"/>
106
+ <line number="88" hits="0"/>
107
+ <line number="90" hits="0"/>
108
+ <line number="92" hits="0"/>
109
+ <line number="93" hits="0"/>
110
+ <line number="95" hits="0"/>
111
+ <line number="99" hits="0"/>
112
+ <line number="100" hits="0"/>
113
+ <line number="102" hits="0"/>
114
+ <line number="104" hits="0"/>
115
+ <line number="105" hits="0"/>
116
+ <line number="106" hits="0"/>
117
+ <line number="107" hits="0"/>
118
+ <line number="108" hits="0"/>
119
+ <line number="110" hits="0"/>
120
+ <line number="111" hits="0"/>
121
+ <line number="112" hits="0"/>
122
+ <line number="113" hits="0"/>
123
+ <line number="114" hits="0"/>
124
+ <line number="115" hits="0"/>
125
+ <line number="116" hits="0"/>
126
+ <line number="118" hits="0"/>
127
+ <line number="119" hits="0"/>
128
+ <line number="120" hits="0"/>
129
+ <line number="121" hits="0"/>
130
+ <line number="122" hits="0"/>
131
+ <line number="123" hits="0"/>
132
+ <line number="124" hits="0"/>
133
+ <line number="125" hits="0"/>
134
+ <line number="126" hits="0"/>
135
+ <line number="127" hits="0"/>
136
+ <line number="128" hits="0"/>
137
+ <line number="129" hits="0"/>
138
+ <line number="131" hits="0"/>
139
+ <line number="132" hits="0"/>
140
+ <line number="133" hits="0"/>
141
+ <line number="136" hits="0"/>
142
+ <line number="138" hits="0"/>
143
+ <line number="139" hits="0"/>
144
+ <line number="142" hits="0"/>
145
+ <line number="144" hits="0"/>
146
+ <line number="145" hits="0"/>
147
+ <line number="147" hits="0"/>
148
+ <line number="148" hits="0"/>
149
+ <line number="151" hits="0"/>
150
+ <line number="152" hits="0"/>
151
+ <line number="153" hits="0"/>
152
+ <line number="154" hits="0"/>
153
+ <line number="155" hits="0"/>
154
+ <line number="156" hits="0"/>
155
+ <line number="157" hits="0"/>
156
+ <line number="158" hits="0"/>
157
+ <line number="159" hits="0"/>
158
+ <line number="160" hits="0"/>
159
+ <line number="161" hits="0"/>
160
+ <line number="162" hits="0"/>
161
+ <line number="163" hits="0"/>
162
+ <line number="164" hits="0"/>
163
+ <line number="165" hits="0"/>
164
+ <line number="168" hits="0"/>
165
+ <line number="169" hits="0"/>
166
+ <line number="175" hits="0"/>
167
+ <line number="176" hits="0"/>
168
+ <line number="177" hits="0"/>
169
+ <line number="178" hits="0"/>
170
+ <line number="179" hits="0"/>
171
+ <line number="181" hits="0"/>
172
+ <line number="187" hits="0"/>
173
+ <line number="188" hits="0"/>
174
+ <line number="189" hits="0"/>
175
+ <line number="190" hits="0"/>
176
+ <line number="191" hits="0"/>
177
+ <line number="192" hits="0"/>
178
+ <line number="193" hits="0"/>
179
+ <line number="194" hits="0"/>
180
+ <line number="195" hits="0"/>
181
+ <line number="197" hits="0"/>
182
+ <line number="198" hits="0"/>
183
+ <line number="199" hits="0"/>
184
+ <line number="200" hits="0"/>
185
+ <line number="201" hits="0"/>
186
+ <line number="212" hits="0"/>
187
+ <line number="213" hits="0"/>
188
+ <line number="215" hits="0"/>
189
+ <line number="216" hits="0"/>
190
+ <line number="217" hits="0"/>
191
+ <line number="218" hits="0"/>
192
+ <line number="220" hits="0"/>
193
+ <line number="222" hits="0"/>
194
+ <line number="223" hits="0"/>
195
+ <line number="225" hits="0"/>
196
+ <line number="226" hits="0"/>
197
+ <line number="227" hits="0"/>
198
+ <line number="230" hits="0"/>
199
+ <line number="232" hits="0"/>
200
+ <line number="237" hits="0"/>
201
+ <line number="243" hits="0"/>
202
+ <line number="244" hits="0"/>
203
+ <line number="245" hits="0"/>
204
+ <line number="246" hits="0"/>
205
+ <line number="247" hits="0"/>
206
+ <line number="248" hits="0"/>
207
+ <line number="249" hits="0"/>
208
+ <line number="250" hits="0"/>
209
+ <line number="251" hits="0"/>
210
+ <line number="264" hits="0"/>
211
+ <line number="271" hits="0"/>
212
+ <line number="272" hits="0"/>
213
+ <line number="273" hits="0"/>
214
+ <line number="274" hits="0"/>
215
+ <line number="275" hits="0"/>
216
+ <line number="278" hits="0"/>
217
+ <line number="279" hits="0"/>
218
+ <line number="285" hits="0"/>
219
+ <line number="287" hits="0"/>
220
+ <line number="290" hits="0"/>
221
+ <line number="291" hits="0"/>
222
+ <line number="293" hits="0"/>
223
+ <line number="294" hits="0"/>
224
+ <line number="295" hits="0"/>
225
+ <line number="297" hits="0"/>
226
+ <line number="301" hits="0"/>
227
+ <line number="310" hits="0"/>
228
+ <line number="326" hits="0"/>
229
+ <line number="329" hits="0"/>
230
+ <line number="330" hits="0"/>
231
+ <line number="331" hits="0"/>
232
+ <line number="341" hits="0"/>
233
+ <line number="342" hits="0"/>
234
+ <line number="343" hits="0"/>
235
+ <line number="346" hits="0"/>
236
+ <line number="347" hits="0"/>
237
+ <line number="348" hits="0"/>
238
+ <line number="351" hits="0"/>
239
+ <line number="352" hits="0"/>
240
+ <line number="354" hits="0"/>
241
+ <line number="364" hits="0"/>
242
+ <line number="365" hits="0"/>
243
+ <line number="366" hits="0"/>
244
+ <line number="367" hits="0"/>
245
+ <line number="368" hits="0"/>
246
+ <line number="369" hits="0"/>
247
+ <line number="371" hits="0"/>
248
+ <line number="372" hits="0"/>
249
+ <line number="374" hits="0"/>
250
+ <line number="375" hits="0"/>
251
+ <line number="376" hits="0"/>
252
+ <line number="377" hits="0"/>
253
+ <line number="379" hits="0"/>
254
+ <line number="386" hits="0"/>
255
+ </lines>
256
+ </class>
257
+ <class name="ask_brain.py" filename="ask_brain.py" complexity="0" line-rate="0" branch-rate="0">
258
+ <methods/>
259
+ <lines>
260
+ <line number="1" hits="0"/>
261
+ <line number="2" hits="0"/>
262
+ <line number="3" hits="0"/>
263
+ <line number="5" hits="0"/>
264
+ <line number="6" hits="0"/>
265
+ <line number="8" hits="0"/>
266
+ <line number="10" hits="0"/>
267
+ <line number="11" hits="0"/>
268
+ <line number="12" hits="0"/>
269
+ <line number="15" hits="0"/>
270
+ <line number="16" hits="0"/>
271
+ <line number="18" hits="0"/>
272
+ <line number="19" hits="0"/>
273
+ <line number="21" hits="0"/>
274
+ <line number="22" hits="0"/>
275
+ <line number="24" hits="0"/>
276
+ <line number="29" hits="0"/>
277
+ <line number="31" hits="0"/>
278
+ <line number="32" hits="0"/>
279
+ <line number="33" hits="0"/>
280
+ <line number="34" hits="0"/>
281
+ <line number="35" hits="0"/>
282
+ <line number="36" hits="0"/>
283
+ <line number="38" hits="0"/>
284
+ <line number="40" hits="0"/>
285
+ <line number="41" hits="0"/>
286
+ <line number="43" hits="0"/>
287
+ <line number="44" hits="0"/>
288
+ </lines>
289
+ </class>
290
+ <class name="bhashini.py" filename="bhashini.py" complexity="0" line-rate="0" branch-rate="0">
291
+ <methods/>
292
+ <lines>
293
+ <line number="1" hits="0"/>
294
+ <line number="2" hits="0"/>
295
+ <line number="3" hits="0"/>
296
+ <line number="5" hits="0"/>
297
+ <line number="19" hits="0"/>
298
+ <line number="27" hits="0"/>
299
+ <line number="28" hits="0"/>
300
+ <line number="29" hits="0"/>
301
+ <line number="31" hits="0"/>
302
+ <line number="32" hits="0"/>
303
+ <line number="34" hits="0"/>
304
+ <line number="36" hits="0"/>
305
+ <line number="37" hits="0"/>
306
+ <line number="38" hits="0"/>
307
+ <line number="39" hits="0"/>
308
+ <line number="40" hits="0"/>
309
+ <line number="41" hits="0"/>
310
+ <line number="46" hits="0"/>
311
+ <line number="51" hits="0"/>
312
+ <line number="52" hits="0"/>
313
+ <line number="53" hits="0"/>
314
+ <line number="54" hits="0"/>
315
+ <line number="55" hits="0"/>
316
+ <line number="58" hits="0"/>
317
+ <line number="65" hits="0"/>
318
+ <line number="66" hits="0"/>
319
+ <line number="68" hits="0"/>
320
+ <line number="69" hits="0"/>
321
+ <line number="71" hits="0"/>
322
+ <line number="72" hits="0"/>
323
+ <line number="74" hits="0"/>
324
+ <line number="75" hits="0"/>
325
+ <line number="76" hits="0"/>
326
+ <line number="81" hits="0"/>
327
+ <line number="83" hits="0"/>
328
+ <line number="91" hits="0"/>
329
+ <line number="92" hits="0"/>
330
+ <line number="103" hits="0"/>
331
+ <line number="104" hits="0"/>
332
+ <line number="110" hits="0"/>
333
+ <line number="112" hits="0"/>
334
+ <line number="114" hits="0"/>
335
+ <line number="115" hits="0"/>
336
+ <line number="123" hits="0"/>
337
+ <line number="124" hits="0"/>
338
+ <line number="131" hits="0"/>
339
+ <line number="134" hits="0"/>
340
+ <line number="137" hits="0"/>
341
+ <line number="143" hits="0"/>
342
+ <line number="144" hits="0"/>
343
+ <line number="147" hits="0"/>
344
+ <line number="148" hits="0"/>
345
+ <line number="149" hits="0"/>
346
+ <line number="150" hits="0"/>
347
+ <line number="151" hits="0"/>
348
+ <line number="152" hits="0"/>
349
+ <line number="160" hits="0"/>
350
+ <line number="165" hits="0"/>
351
+ <line number="170" hits="0"/>
352
+ <line number="171" hits="0"/>
353
+ <line number="172" hits="0"/>
354
+ <line number="173" hits="0"/>
355
+ <line number="174" hits="0"/>
356
+ <line number="175" hits="0"/>
357
+ <line number="178" hits="0"/>
358
+ <line number="179" hits="0"/>
359
+ <line number="180" hits="0"/>
360
+ <line number="181" hits="0"/>
361
+ <line number="182" hits="0"/>
362
+ <line number="183" hits="0"/>
363
+ <line number="186" hits="0"/>
364
+ <line number="187" hits="0"/>
365
+ </lines>
366
+ </class>
367
+ <class name="config.py" filename="config.py" complexity="0" line-rate="0" branch-rate="0">
368
+ <methods/>
369
+ <lines>
370
+ <line number="1" hits="0"/>
371
+ <line number="2" hits="0"/>
372
+ <line number="3" hits="0"/>
373
+ <line number="4" hits="0"/>
374
+ <line number="6" hits="0"/>
375
+ <line number="7" hits="0"/>
376
+ <line number="8" hits="0"/>
377
+ <line number="10" hits="0"/>
378
+ <line number="12" hits="0"/>
379
+ </lines>
380
+ </class>
381
+ <class name="ingest_rajasthan.py" filename="ingest_rajasthan.py" complexity="0" line-rate="0" branch-rate="0">
382
+ <methods/>
383
+ <lines>
384
+ <line number="1" hits="0"/>
385
+ <line number="2" hits="0"/>
386
+ <line number="3" hits="0"/>
387
+ <line number="4" hits="0"/>
388
+ <line number="7" hits="0"/>
389
+ <line number="10" hits="0"/>
390
+ <line number="13" hits="0"/>
391
+ <line number="22" hits="0"/>
392
+ <line number="24" hits="0"/>
393
+ <line number="27" hits="0"/>
394
+ <line number="28" hits="0"/>
395
+ <line number="29" hits="0"/>
396
+ <line number="30" hits="0"/>
397
+ <line number="33" hits="0"/>
398
+ <line number="34" hits="0"/>
399
+ <line number="37" hits="0"/>
400
+ <line number="38" hits="0"/>
401
+ <line number="41" hits="0"/>
402
+ <line number="42" hits="0"/>
403
+ <line number="43" hits="0"/>
404
+ <line number="45" hits="0"/>
405
+ <line number="47" hits="0"/>
406
+ <line number="49" hits="0"/>
407
+ <line number="50" hits="0"/>
408
+ <line number="51" hits="0"/>
409
+ <line number="52" hits="0"/>
410
+ <line number="53" hits="0"/>
411
+ <line number="55" hits="0"/>
412
+ <line number="56" hits="0"/>
413
+ <line number="57" hits="0"/>
414
+ <line number="58" hits="0"/>
415
+ <line number="60" hits="0"/>
416
+ <line number="61" hits="0"/>
417
+ <line number="65" hits="0"/>
418
+ <line number="69" hits="0"/>
419
+ <line number="74" hits="0"/>
420
+ <line number="76" hits="0"/>
421
+ <line number="77" hits="0"/>
422
+ <line number="78" hits="0"/>
423
+ <line number="79" hits="0"/>
424
+ <line number="80" hits="0"/>
425
+ <line number="81" hits="0"/>
426
+ <line number="82" hits="0"/>
427
+ <line number="83" hits="0"/>
428
+ <line number="84" hits="0"/>
429
+ <line number="86" hits="0"/>
430
+ <line number="95" hits="0"/>
431
+ <line number="96" hits="0"/>
432
+ <line number="97" hits="0"/>
433
+ <line number="98" hits="0"/>
434
+ <line number="100" hits="0"/>
435
+ <line number="102" hits="0"/>
436
+ <line number="103" hits="0"/>
437
+ <line number="104" hits="0"/>
438
+ <line number="105" hits="0"/>
439
+ <line number="107" hits="0"/>
440
+ <line number="108" hits="0"/>
441
+ <line number="109" hits="0"/>
442
+ <line number="110" hits="0"/>
443
+ <line number="114" hits="0"/>
444
+ <line number="115" hits="0"/>
445
+ <line number="116" hits="0"/>
446
+ <line number="117" hits="0"/>
447
+ <line number="118" hits="0"/>
448
+ <line number="119" hits="0"/>
449
+ <line number="120" hits="0"/>
450
+ <line number="128" hits="0"/>
451
+ <line number="129" hits="0"/>
452
+ <line number="131" hits="0"/>
453
+ <line number="136" hits="0"/>
454
+ <line number="137" hits="0"/>
455
+ <line number="138" hits="0"/>
456
+ <line number="139" hits="0"/>
457
+ <line number="142" hits="0"/>
458
+ <line number="144" hits="0"/>
459
+ <line number="145" hits="0"/>
460
+ <line number="146" hits="0"/>
461
+ <line number="147" hits="0"/>
462
+ <line number="148" hits="0"/>
463
+ <line number="150" hits="0"/>
464
+ <line number="151" hits="0"/>
465
+ <line number="159" hits="0"/>
466
+ <line number="160" hits="0"/>
467
+ <line number="161" hits="0"/>
468
+ <line number="162" hits="0"/>
469
+ <line number="163" hits="0"/>
470
+ <line number="165" hits="0"/>
471
+ <line number="170" hits="0"/>
472
+ <line number="171" hits="0"/>
473
+ <line number="174" hits="0"/>
474
+ <line number="175" hits="0"/>
475
+ <line number="177" hits="0"/>
476
+ <line number="178" hits="0"/>
477
+ <line number="179" hits="0"/>
478
+ <line number="180" hits="0"/>
479
+ <line number="182" hits="0"/>
480
+ <line number="183" hits="0"/>
481
+ <line number="184" hits="0"/>
482
+ <line number="186" hits="0"/>
483
+ <line number="188" hits="0"/>
484
+ <line number="189" hits="0"/>
485
+ <line number="191" hits="0"/>
486
+ <line number="192" hits="0"/>
487
+ </lines>
488
+ </class>
489
+ <class name="scraper.py" filename="scraper.py" complexity="0" line-rate="0" branch-rate="0">
490
+ <methods/>
491
+ <lines>
492
+ <line number="1" hits="0"/>
493
+ <line number="2" hits="0"/>
494
+ <line number="3" hits="0"/>
495
+ <line number="4" hits="0"/>
496
+ <line number="5" hits="0"/>
497
+ <line number="6" hits="0"/>
498
+ <line number="7" hits="0"/>
499
+ <line number="10" hits="0"/>
500
+ <line number="11" hits="0"/>
501
+ <line number="14" hits="0"/>
502
+ <line number="15" hits="0"/>
503
+ <line number="18" hits="0"/>
504
+ <line number="142" hits="0"/>
505
+ <line number="161" hits="0"/>
506
+ <line number="163" hits="0"/>
507
+ <line number="172" hits="0"/>
508
+ <line number="173" hits="0"/>
509
+ <line number="174" hits="0"/>
510
+ <line number="181" hits="0"/>
511
+ <line number="182" hits="0"/>
512
+ <line number="183" hits="0"/>
513
+ <line number="185" hits="0"/>
514
+ <line number="186" hits="0"/>
515
+ <line number="187" hits="0"/>
516
+ <line number="188" hits="0"/>
517
+ <line number="189" hits="0"/>
518
+ <line number="191" hits="0"/>
519
+ <line number="193" hits="0"/>
520
+ <line number="194" hits="0"/>
521
+ <line number="195" hits="0"/>
522
+ <line number="196" hits="0"/>
523
+ <line number="198" hits="0"/>
524
+ <line number="199" hits="0"/>
525
+ <line number="201" hits="0"/>
526
+ <line number="202" hits="0"/>
527
+ <line number="204" hits="0"/>
528
+ <line number="205" hits="0"/>
529
+ <line number="206" hits="0"/>
530
+ <line number="207" hits="0"/>
531
+ <line number="208" hits="0"/>
532
+ <line number="209" hits="0"/>
533
+ <line number="212" hits="0"/>
534
+ <line number="219" hits="0"/>
535
+ <line number="220" hits="0"/>
536
+ <line number="221" hits="0"/>
537
+ <line number="222" hits="0"/>
538
+ <line number="223" hits="0"/>
539
+ <line number="224" hits="0"/>
540
+ <line number="225" hits="0"/>
541
+ <line number="226" hits="0"/>
542
+ <line number="227" hits="0"/>
543
+ <line number="229" hits="0"/>
544
+ <line number="231" hits="0"/>
545
+ <line number="232" hits="0"/>
546
+ <line number="233" hits="0"/>
547
+ <line number="234" hits="0"/>
548
+ <line number="236" hits="0"/>
549
+ <line number="237" hits="0"/>
550
+ <line number="239" hits="0"/>
551
+ <line number="240" hits="0"/>
552
+ <line number="241" hits="0"/>
553
+ <line number="242" hits="0"/>
554
+ <line number="243" hits="0"/>
555
+ <line number="244" hits="0"/>
556
+ <line number="245" hits="0"/>
557
+ <line number="246" hits="0"/>
558
+ <line number="248" hits="0"/>
559
+ <line number="249" hits="0"/>
560
+ <line number="250" hits="0"/>
561
+ <line number="251" hits="0"/>
562
+ <line number="253" hits="0"/>
563
+ <line number="260" hits="0"/>
564
+ <line number="261" hits="0"/>
565
+ <line number="262" hits="0"/>
566
+ <line number="263" hits="0"/>
567
+ <line number="264" hits="0"/>
568
+ <line number="265" hits="0"/>
569
+ <line number="266" hits="0"/>
570
+ <line number="267" hits="0"/>
571
+ <line number="268" hits="0"/>
572
+ <line number="270" hits="0"/>
573
+ <line number="271" hits="0"/>
574
+ <line number="273" hits="0"/>
575
+ <line number="275" hits="0"/>
576
+ <line number="289" hits="0"/>
577
+ <line number="309" hits="0"/>
578
+ <line number="310" hits="0"/>
579
+ <line number="312" hits="0"/>
580
+ <line number="313" hits="0"/>
581
+ <line number="315" hits="0"/>
582
+ <line number="316" hits="0"/>
583
+ <line number="317" hits="0"/>
584
+ <line number="318" hits="0"/>
585
+ <line number="320" hits="0"/>
586
+ <line number="322" hits="0"/>
587
+ <line number="323" hits="0"/>
588
+ <line number="324" hits="0"/>
589
+ <line number="326" hits="0"/>
590
+ <line number="328" hits="0"/>
591
+ <line number="329" hits="0"/>
592
+ <line number="330" hits="0"/>
593
+ <line number="331" hits="0"/>
594
+ <line number="333" hits="0"/>
595
+ <line number="334" hits="0"/>
596
+ </lines>
597
+ </class>
598
+ <class name="test_ingest.py" filename="test_ingest.py" complexity="0" line-rate="0" branch-rate="0">
599
+ <methods/>
600
+ <lines>
601
+ <line number="1" hits="0"/>
602
+ <line number="2" hits="0"/>
603
+ <line number="5" hits="0"/>
604
+ <line number="8" hits="0"/>
605
+ <line number="11" hits="0"/>
606
+ <line number="18" hits="0"/>
607
+ <line number="20" hits="0"/>
608
+ <line number="25" hits="0"/>
609
+ <line number="26" hits="0"/>
610
+ <line number="27" hits="0"/>
611
+ <line number="29" hits="0"/>
612
+ <line number="30" hits="0"/>
613
+ </lines>
614
+ </class>
615
+ <class name="test_queries.py" filename="test_queries.py" complexity="0" line-rate="0" branch-rate="0">
616
+ <methods/>
617
+ <lines>
618
+ <line number="1" hits="0"/>
619
+ <line number="2" hits="0"/>
620
+ <line number="4" hits="0"/>
621
+ <line number="6" hits="0"/>
622
+ <line number="14" hits="0"/>
623
+ <line number="15" hits="0"/>
624
+ <line number="16" hits="0"/>
625
+ <line number="17" hits="0"/>
626
+ <line number="18" hits="0"/>
627
+ <line number="19" hits="0"/>
628
+ <line number="20" hits="0"/>
629
+ <line number="21" hits="0"/>
630
+ <line number="23" hits="0"/>
631
+ <line number="25" hits="0"/>
632
+ <line number="26" hits="0"/>
633
+ </lines>
634
+ </class>
635
+ </classes>
636
+ </package>
637
+ <package name="automation" line-rate="0" branch-rate="0" complexity="0">
638
+ <classes>
639
+ <class name="__init__.py" filename="automation/__init__.py" complexity="0" line-rate="1" branch-rate="0">
640
+ <methods/>
641
+ <lines/>
642
+ </class>
643
+ <class name="change_detector.py" filename="automation/change_detector.py" complexity="0" line-rate="0" branch-rate="0">
644
+ <methods/>
645
+ <lines>
646
+ <line number="1" hits="0"/>
647
+ <line number="2" hits="0"/>
648
+ <line number="3" hits="0"/>
649
+ <line number="4" hits="0"/>
650
+ <line number="5" hits="0"/>
651
+ <line number="6" hits="0"/>
652
+ <line number="7" hits="0"/>
653
+ <line number="9" hits="0"/>
654
+ <line number="10" hits="0"/>
655
+ <line number="12" hits="0"/>
656
+ <line number="13" hits="0"/>
657
+ <line number="14" hits="0"/>
658
+ <line number="15" hits="0"/>
659
+ <line number="16" hits="0"/>
660
+ <line number="17" hits="0"/>
661
+ <line number="18" hits="0"/>
662
+ <line number="19" hits="0"/>
663
+ <line number="21" hits="0"/>
664
+ <line number="22" hits="0"/>
665
+ <line number="23" hits="0"/>
666
+ <line number="24" hits="0"/>
667
+ <line number="26" hits="0"/>
668
+ <line number="28" hits="0"/>
669
+ <line number="30" hits="0"/>
670
+ <line number="31" hits="0"/>
671
+ <line number="32" hits="0"/>
672
+ <line number="33" hits="0"/>
673
+ <line number="34" hits="0"/>
674
+ <line number="36" hits="0"/>
675
+ <line number="37" hits="0"/>
676
+ <line number="38" hits="0"/>
677
+ <line number="39" hits="0"/>
678
+ <line number="40" hits="0"/>
679
+ <line number="41" hits="0"/>
680
+ <line number="42" hits="0"/>
681
+ <line number="43" hits="0"/>
682
+ <line number="45" hits="0"/>
683
+ <line number="46" hits="0"/>
684
+ <line number="47" hits="0"/>
685
+ <line number="49" hits="0"/>
686
+ <line number="51" hits="0"/>
687
+ <line number="52" hits="0"/>
688
+ </lines>
689
+ </class>
690
+ <class name="coverage_reporter.py" filename="automation/coverage_reporter.py" complexity="0" line-rate="0" branch-rate="0">
691
+ <methods/>
692
+ <lines>
693
+ <line number="1" hits="0"/>
694
+ <line number="2" hits="0"/>
695
+ <line number="3" hits="0"/>
696
+ <line number="4" hits="0"/>
697
+ <line number="5" hits="0"/>
698
+ <line number="7" hits="0"/>
699
+ <line number="8" hits="0"/>
700
+ <line number="10" hits="0"/>
701
+ <line number="11" hits="0"/>
702
+ <line number="12" hits="0"/>
703
+ <line number="13" hits="0"/>
704
+ <line number="15" hits="0"/>
705
+ <line number="17" hits="0"/>
706
+ <line number="19" hits="0"/>
707
+ <line number="20" hits="0"/>
708
+ <line number="22" hits="0"/>
709
+ <line number="23" hits="0"/>
710
+ <line number="24" hits="0"/>
711
+ <line number="25" hits="0"/>
712
+ <line number="27" hits="0"/>
713
+ <line number="28" hits="0"/>
714
+ <line number="29" hits="0"/>
715
+ <line number="31" hits="0"/>
716
+ <line number="32" hits="0"/>
717
+ </lines>
718
+ </class>
719
+ <class name="expiry_checker.py" filename="automation/expiry_checker.py" complexity="0" line-rate="0" branch-rate="0">
720
+ <methods/>
721
+ <lines>
722
+ <line number="1" hits="0"/>
723
+ <line number="2" hits="0"/>
724
+ <line number="3" hits="0"/>
725
+ <line number="4" hits="0"/>
726
+ <line number="5" hits="0"/>
727
+ <line number="6" hits="0"/>
728
+ <line number="8" hits="0"/>
729
+ <line number="9" hits="0"/>
730
+ <line number="11" hits="0"/>
731
+ <line number="12" hits="0"/>
732
+ <line number="13" hits="0"/>
733
+ <line number="14" hits="0"/>
734
+ <line number="16" hits="0"/>
735
+ <line number="17" hits="0"/>
736
+ <line number="19" hits="0"/>
737
+ <line number="21" hits="0"/>
738
+ <line number="23" hits="0"/>
739
+ <line number="29" hits="0"/>
740
+ <line number="30" hits="0"/>
741
+ <line number="33" hits="0"/>
742
+ <line number="34" hits="0"/>
743
+ <line number="36" hits="0"/>
744
+ <line number="43" hits="0"/>
745
+ <line number="44" hits="0"/>
746
+ <line number="45" hits="0"/>
747
+ <line number="46" hits="0"/>
748
+ <line number="48" hits="0"/>
749
+ <line number="50" hits="0"/>
750
+ <line number="51" hits="0"/>
751
+ <line number="53" hits="0"/>
752
+ <line number="54" hits="0"/>
753
+ </lines>
754
+ </class>
755
+ </classes>
756
+ </package>
757
+ <package name="eligibility" line-rate="0" branch-rate="0" complexity="0">
758
+ <classes>
759
+ <class name="__init__.py" filename="eligibility/__init__.py" complexity="0" line-rate="1" branch-rate="0">
760
+ <methods/>
761
+ <lines/>
762
+ </class>
763
+ <class name="engine.py" filename="eligibility/engine.py" complexity="0" line-rate="0" branch-rate="0">
764
+ <methods/>
765
+ <lines>
766
+ <line number="1" hits="0"/>
767
+ <line number="2" hits="0"/>
768
+ <line number="3" hits="0"/>
769
+ <line number="4" hits="0"/>
770
+ <line number="5" hits="0"/>
771
+ <line number="7" hits="0"/>
772
+ <line number="8" hits="0"/>
773
+ <line number="10" hits="0"/>
774
+ <line number="11" hits="0"/>
775
+ <line number="12" hits="0"/>
776
+ <line number="13" hits="0"/>
777
+ <line number="15" hits="0"/>
778
+ <line number="17" hits="0"/>
779
+ <line number="30" hits="0"/>
780
+ <line number="35" hits="0"/>
781
+ <line number="49" hits="0"/>
782
+ <line number="50" hits="0"/>
783
+ <line number="52" hits="0"/>
784
+ <line number="53" hits="0"/>
785
+ <line number="54" hits="0"/>
786
+ <line number="56" hits="0"/>
787
+ </lines>
788
+ </class>
789
+ <class name="entities.py" filename="eligibility/entities.py" complexity="0" line-rate="0" branch-rate="0">
790
+ <methods/>
791
+ <lines>
792
+ <line number="1" hits="0"/>
793
+ <line number="3" hits="0"/>
794
+ <line number="15" hits="0"/>
795
+ <line number="22" hits="0"/>
796
+ </lines>
797
+ </class>
798
+ <class name="variables.py" filename="eligibility/variables.py" complexity="0" line-rate="0" branch-rate="0">
799
+ <methods/>
800
+ <lines>
801
+ <line number="1" hits="0"/>
802
+ <line number="2" hits="0"/>
803
+ <line number="3" hits="0"/>
804
+ <line number="4" hits="0"/>
805
+ <line number="7" hits="0"/>
806
+ <line number="8" hits="0"/>
807
+ <line number="9" hits="0"/>
808
+ <line number="10" hits="0"/>
809
+ <line number="11" hits="0"/>
810
+ <line number="12" hits="0"/>
811
+ <line number="14" hits="0"/>
812
+ <line number="15" hits="0"/>
813
+ <line number="16" hits="0"/>
814
+ <line number="17" hits="0"/>
815
+ <line number="18" hits="0"/>
816
+ <line number="19" hits="0"/>
817
+ <line number="21" hits="0"/>
818
+ <line number="22" hits="0"/>
819
+ <line number="23" hits="0"/>
820
+ <line number="24" hits="0"/>
821
+ <line number="25" hits="0"/>
822
+ <line number="26" hits="0"/>
823
+ <line number="28" hits="0"/>
824
+ <line number="29" hits="0"/>
825
+ <line number="30" hits="0"/>
826
+ <line number="31" hits="0"/>
827
+ <line number="32" hits="0"/>
828
+ <line number="33" hits="0"/>
829
+ <line number="35" hits="0"/>
830
+ <line number="36" hits="0"/>
831
+ <line number="37" hits="0"/>
832
+ <line number="38" hits="0"/>
833
+ <line number="39" hits="0"/>
834
+ <line number="40" hits="0"/>
835
+ <line number="43" hits="0"/>
836
+ <line number="44" hits="0"/>
837
+ <line number="45" hits="0"/>
838
+ <line number="46" hits="0"/>
839
+ <line number="47" hits="0"/>
840
+ <line number="48" hits="0"/>
841
+ <line number="49" hits="0"/>
842
+ <line number="54" hits="0"/>
843
+ <line number="55" hits="0"/>
844
+ <line number="56" hits="0"/>
845
+ <line number="57" hits="0"/>
846
+ <line number="58" hits="0"/>
847
+ <line number="59" hits="0"/>
848
+ <line number="60" hits="0"/>
849
+ <line number="61" hits="0"/>
850
+ <line number="62" hits="0"/>
851
+ <line number="67" hits="0"/>
852
+ <line number="68" hits="0"/>
853
+ <line number="69" hits="0"/>
854
+ <line number="70" hits="0"/>
855
+ <line number="71" hits="0"/>
856
+ <line number="72" hits="0"/>
857
+ <line number="73" hits="0"/>
858
+ <line number="80" hits="0"/>
859
+ <line number="81" hits="0"/>
860
+ <line number="82" hits="0"/>
861
+ <line number="83" hits="0"/>
862
+ <line number="84" hits="0"/>
863
+ <line number="85" hits="0"/>
864
+ <line number="87" hits="0"/>
865
+ <line number="89" hits="0"/>
866
+ <line number="90" hits="0"/>
867
+ <line number="91" hits="0"/>
868
+ <line number="92" hits="0"/>
869
+ <line number="93" hits="0"/>
870
+ <line number="94" hits="0"/>
871
+ <line number="96" hits="0"/>
872
+ <line number="98" hits="0"/>
873
+ <line number="99" hits="0"/>
874
+ <line number="100" hits="0"/>
875
+ <line number="101" hits="0"/>
876
+ <line number="102" hits="0"/>
877
+ <line number="103" hits="0"/>
878
+ <line number="105" hits="0"/>
879
+ <line number="107" hits="0"/>
880
+ <line number="108" hits="0"/>
881
+ <line number="109" hits="0"/>
882
+ <line number="110" hits="0"/>
883
+ <line number="111" hits="0"/>
884
+ <line number="112" hits="0"/>
885
+ <line number="114" hits="0"/>
886
+ <line number="116" hits="0"/>
887
+ <line number="117" hits="0"/>
888
+ <line number="118" hits="0"/>
889
+ <line number="119" hits="0"/>
890
+ <line number="120" hits="0"/>
891
+ <line number="121" hits="0"/>
892
+ <line number="123" hits="0"/>
893
+ <line number="125" hits="0"/>
894
+ <line number="126" hits="0"/>
895
+ <line number="127" hits="0"/>
896
+ <line number="128" hits="0"/>
897
+ <line number="129" hits="0"/>
898
+ <line number="130" hits="0"/>
899
+ <line number="132" hits="0"/>
900
+ <line number="134" hits="0"/>
901
+ <line number="135" hits="0"/>
902
+ <line number="136" hits="0"/>
903
+ <line number="137" hits="0"/>
904
+ <line number="138" hits="0"/>
905
+ <line number="139" hits="0"/>
906
+ <line number="141" hits="0"/>
907
+ </lines>
908
+ </class>
909
+ </classes>
910
+ </package>
911
+ <package name="ingestion" line-rate="0" branch-rate="0" complexity="0">
912
+ <classes>
913
+ <class name="__init__.py" filename="ingestion/__init__.py" complexity="0" line-rate="1" branch-rate="0">
914
+ <methods/>
915
+ <lines/>
916
+ </class>
917
+ <class name="ocr_processor.py" filename="ingestion/ocr_processor.py" complexity="0" line-rate="0" branch-rate="0">
918
+ <methods/>
919
+ <lines>
920
+ <line number="1" hits="0"/>
921
+ <line number="2" hits="0"/>
922
+ <line number="3" hits="0"/>
923
+ <line number="4" hits="0"/>
924
+ <line number="5" hits="0"/>
925
+ <line number="7" hits="0"/>
926
+ <line number="12" hits="0"/>
927
+ <line number="14" hits="0"/>
928
+ <line number="15" hits="0"/>
929
+ <line number="16" hits="0"/>
930
+ <line number="17" hits="0"/>
931
+ <line number="18" hits="0"/>
932
+ <line number="19" hits="0"/>
933
+ <line number="20" hits="0"/>
934
+ <line number="21" hits="0"/>
935
+ <line number="23" hits="0"/>
936
+ <line number="25" hits="0"/>
937
+ <line number="26" hits="0"/>
938
+ <line number="32" hits="0"/>
939
+ <line number="33" hits="0"/>
940
+ <line number="34" hits="0"/>
941
+ <line number="35" hits="0"/>
942
+ <line number="37" hits="0"/>
943
+ <line number="38" hits="0"/>
944
+ <line number="39" hits="0"/>
945
+ <line number="40" hits="0"/>
946
+ <line number="41" hits="0"/>
947
+ <line number="42" hits="0"/>
948
+ <line number="49" hits="0"/>
949
+ </lines>
950
+ </class>
951
+ <class name="ocr_processor_runner.py" filename="ingestion/ocr_processor_runner.py" complexity="0" line-rate="0" branch-rate="0">
952
+ <methods/>
953
+ <lines>
954
+ <line number="1" hits="0"/>
955
+ <line number="2" hits="0"/>
956
+ <line number="3" hits="0"/>
957
+ <line number="4" hits="0"/>
958
+ <line number="5" hits="0"/>
959
+ <line number="6" hits="0"/>
960
+ <line number="8" hits="0"/>
961
+ <line number="9" hits="0"/>
962
+ <line number="12" hits="0"/>
963
+ <line number="13" hits="0"/>
964
+ <line number="14" hits="0"/>
965
+ <line number="16" hits="0"/>
966
+ <line number="18" hits="0"/>
967
+ <line number="19" hits="0"/>
968
+ <line number="20" hits="0"/>
969
+ <line number="21" hits="0"/>
970
+ <line number="22" hits="0"/>
971
+ <line number="23" hits="0"/>
972
+ <line number="24" hits="0"/>
973
+ <line number="25" hits="0"/>
974
+ <line number="26" hits="0"/>
975
+ <line number="28" hits="0"/>
976
+ <line number="36" hits="0"/>
977
+ <line number="37" hits="0"/>
978
+ <line number="41" hits="0"/>
979
+ <line number="52" hits="0"/>
980
+ <line number="53" hits="0"/>
981
+ <line number="60" hits="0"/>
982
+ <line number="61" hits="0"/>
983
+ <line number="62" hits="0"/>
984
+ <line number="64" hits="0"/>
985
+ <line number="65" hits="0"/>
986
+ <line number="66" hits="0"/>
987
+ <line number="67" hits="0"/>
988
+ <line number="68" hits="0"/>
989
+ <line number="70" hits="0"/>
990
+ <line number="72" hits="0"/>
991
+ <line number="73" hits="0"/>
992
+ <line number="74" hits="0"/>
993
+ <line number="78" hits="0"/>
994
+ <line number="80" hits="0"/>
995
+ <line number="81" hits="0"/>
996
+ <line number="82" hits="0"/>
997
+ <line number="83" hits="0"/>
998
+ <line number="84" hits="0"/>
999
+ <line number="85" hits="0"/>
1000
+ <line number="87" hits="0"/>
1001
+ <line number="88" hits="0"/>
1002
+ <line number="89" hits="0"/>
1003
+ <line number="90" hits="0"/>
1004
+ <line number="92" hits="0"/>
1005
+ <line number="93" hits="0"/>
1006
+ <line number="94" hits="0"/>
1007
+ <line number="96" hits="0"/>
1008
+ <line number="98" hits="0"/>
1009
+ <line number="99" hits="0"/>
1010
+ <line number="100" hits="0"/>
1011
+ <line number="101" hits="0"/>
1012
+ <line number="102" hits="0"/>
1013
+ <line number="104" hits="0"/>
1014
+ <line number="105" hits="0"/>
1015
+ <line number="108" hits="0"/>
1016
+ <line number="110" hits="0"/>
1017
+ <line number="119" hits="0"/>
1018
+ <line number="120" hits="0"/>
1019
+ <line number="121" hits="0"/>
1020
+ <line number="123" hits="0"/>
1021
+ <line number="124" hits="0"/>
1022
+ <line number="125" hits="0"/>
1023
+ <line number="127" hits="0"/>
1024
+ <line number="128" hits="0"/>
1025
+ </lines>
1026
+ </class>
1027
+ </classes>
1028
+ </package>
1029
+ <package name="scraper" line-rate="0" branch-rate="0" complexity="0">
1030
+ <classes>
1031
+ <class name="__init__.py" filename="scraper/__init__.py" complexity="0" line-rate="1" branch-rate="0">
1032
+ <methods/>
1033
+ <lines/>
1034
+ </class>
1035
+ <class name="national_scraper.py" filename="scraper/national_scraper.py" complexity="0" line-rate="0" branch-rate="0">
1036
+ <methods/>
1037
+ <lines>
1038
+ <line number="1" hits="0"/>
1039
+ <line number="2" hits="0"/>
1040
+ <line number="3" hits="0"/>
1041
+ <line number="4" hits="0"/>
1042
+ <line number="7" hits="0"/>
1043
+ <line number="10" hits="0"/>
1044
+ <line number="11" hits="0"/>
1045
+ <line number="13" hits="0"/>
1046
+ <line number="21" hits="0"/>
1047
+ <line number="22" hits="0"/>
1048
+ <line number="23" hits="0"/>
1049
+ <line number="24" hits="0"/>
1050
+ <line number="25" hits="0"/>
1051
+ <line number="27" hits="0"/>
1052
+ <line number="29" hits="0"/>
1053
+ <line number="31" hits="0"/>
1054
+ <line number="40" hits="0"/>
1055
+ <line number="41" hits="0"/>
1056
+ <line number="42" hits="0"/>
1057
+ <line number="47" hits="0"/>
1058
+ <line number="48" hits="0"/>
1059
+ <line number="50" hits="0"/>
1060
+ <line number="51" hits="0"/>
1061
+ <line number="52" hits="0"/>
1062
+ <line number="55" hits="0"/>
1063
+ <line number="56" hits="0"/>
1064
+ <line number="57" hits="0"/>
1065
+ <line number="59" hits="0"/>
1066
+ <line number="60" hits="0"/>
1067
+ <line number="61" hits="0"/>
1068
+ <line number="64" hits="0"/>
1069
+ <line number="65" hits="0"/>
1070
+ <line number="67" hits="0"/>
1071
+ <line number="68" hits="0"/>
1072
+ <line number="71" hits="0"/>
1073
+ <line number="72" hits="0"/>
1074
+ <line number="73" hits="0"/>
1075
+ <line number="74" hits="0"/>
1076
+ <line number="76" hits="0"/>
1077
+ <line number="77" hits="0"/>
1078
+ <line number="78" hits="0"/>
1079
+ <line number="79" hits="0"/>
1080
+ <line number="82" hits="0"/>
1081
+ <line number="83" hits="0"/>
1082
+ <line number="84" hits="0"/>
1083
+ <line number="86" hits="0"/>
1084
+ <line number="87" hits="0"/>
1085
+ <line number="89" hits="0"/>
1086
+ <line number="93" hits="0"/>
1087
+ <line number="95" hits="0"/>
1088
+ <line number="96" hits="0"/>
1089
+ <line number="98" hits="0"/>
1090
+ <line number="99" hits="0"/>
1091
+ <line number="100" hits="0"/>
1092
+ <line number="101" hits="0"/>
1093
+ <line number="103" hits="0"/>
1094
+ <line number="105" hits="0"/>
1095
+ <line number="106" hits="0"/>
1096
+ <line number="107" hits="0"/>
1097
+ <line number="108" hits="0"/>
1098
+ <line number="110" hits="0"/>
1099
+ <line number="111" hits="0"/>
1100
+ <line number="112" hits="0"/>
1101
+ <line number="113" hits="0"/>
1102
+ <line number="115" hits="0"/>
1103
+ <line number="116" hits="0"/>
1104
+ <line number="117" hits="0"/>
1105
+ <line number="119" hits="0"/>
1106
+ <line number="120" hits="0"/>
1107
+ <line number="121" hits="0"/>
1108
+ <line number="122" hits="0"/>
1109
+ <line number="130" hits="0"/>
1110
+ <line number="131" hits="0"/>
1111
+ <line number="132" hits="0"/>
1112
+ <line number="134" hits="0"/>
1113
+ <line number="135" hits="0"/>
1114
+ <line number="136" hits="0"/>
1115
+ <line number="137" hits="0"/>
1116
+ <line number="138" hits="0"/>
1117
+ <line number="139" hits="0"/>
1118
+ <line number="141" hits="0"/>
1119
+ </lines>
1120
+ </class>
1121
+ </classes>
1122
+ </package>
1123
+ <package name="scripts" line-rate="0" branch-rate="0" complexity="0">
1124
+ <classes>
1125
+ <class name="__init__.py" filename="scripts/__init__.py" complexity="0" line-rate="1" branch-rate="0">
1126
+ <methods/>
1127
+ <lines/>
1128
+ </class>
1129
+ <class name="ai_enrichment.py" filename="scripts/ai_enrichment.py" complexity="0" line-rate="0" branch-rate="0">
1130
+ <methods/>
1131
+ <lines>
1132
+ <line number="1" hits="0"/>
1133
+ <line number="2" hits="0"/>
1134
+ <line number="3" hits="0"/>
1135
+ <line number="4" hits="0"/>
1136
+ <line number="5" hits="0"/>
1137
+ <line number="6" hits="0"/>
1138
+ <line number="7" hits="0"/>
1139
+ <line number="8" hits="0"/>
1140
+ <line number="9" hits="0"/>
1141
+ <line number="14" hits="0"/>
1142
+ <line number="17" hits="0"/>
1143
+ <line number="19" hits="0"/>
1144
+ <line number="20" hits="0"/>
1145
+ <line number="21" hits="0"/>
1146
+ <line number="22" hits="0"/>
1147
+ <line number="24" hits="0"/>
1148
+ <line number="26" hits="0"/>
1149
+ <line number="28" hits="0"/>
1150
+ <line number="29" hits="0"/>
1151
+ <line number="30" hits="0"/>
1152
+ <line number="32" hits="0"/>
1153
+ <line number="33" hits="0"/>
1154
+ <line number="35" hits="0"/>
1155
+ <line number="36" hits="0"/>
1156
+ <line number="37" hits="0"/>
1157
+ <line number="39" hits="0"/>
1158
+ <line number="41" hits="0"/>
1159
+ <line number="57" hits="0"/>
1160
+ <line number="58" hits="0"/>
1161
+ <line number="63" hits="0"/>
1162
+ <line number="64" hits="0"/>
1163
+ <line number="65" hits="0"/>
1164
+ <line number="66" hits="0"/>
1165
+ <line number="68" hits="0"/>
1166
+ <line number="69" hits="0"/>
1167
+ <line number="70" hits="0"/>
1168
+ <line number="71" hits="0"/>
1169
+ <line number="73" hits="0"/>
1170
+ <line number="74" hits="0"/>
1171
+ <line number="75" hits="0"/>
1172
+ <line number="78" hits="0"/>
1173
+ <line number="79" hits="0"/>
1174
+ <line number="80" hits="0"/>
1175
+ <line number="82" hits="0"/>
1176
+ <line number="83" hits="0"/>
1177
+ <line number="85" hits="0"/>
1178
+ <line number="87" hits="0"/>
1179
+ <line number="88" hits="0"/>
1180
+ <line number="90" hits="0"/>
1181
+ <line number="92" hits="0"/>
1182
+ <line number="95" hits="0"/>
1183
+ <line number="98" hits="0"/>
1184
+ <line number="106" hits="0"/>
1185
+ <line number="107" hits="0"/>
1186
+ <line number="110" hits="0"/>
1187
+ <line number="112" hits="0"/>
1188
+ <line number="113" hits="0"/>
1189
+ <line number="114" hits="0"/>
1190
+ <line number="116" hits="0"/>
1191
+ <line number="117" hits="0"/>
1192
+ <line number="119" hits="0"/>
1193
+ <line number="120" hits="0"/>
1194
+ </lines>
1195
+ </class>
1196
+ <class name="check_cache.py" filename="scripts/check_cache.py" complexity="0" line-rate="0" branch-rate="0">
1197
+ <methods/>
1198
+ <lines>
1199
+ <line number="1" hits="0"/>
1200
+ <line number="2" hits="0"/>
1201
+ <line number="3" hits="0"/>
1202
+ <line number="4" hits="0"/>
1203
+ <line number="5" hits="0"/>
1204
+ <line number="7" hits="0"/>
1205
+ <line number="8" hits="0"/>
1206
+ <line number="10" hits="0"/>
1207
+ <line number="11" hits="0"/>
1208
+ <line number="12" hits="0"/>
1209
+ <line number="13" hits="0"/>
1210
+ <line number="14" hits="0"/>
1211
+ <line number="15" hits="0"/>
1212
+ <line number="16" hits="0"/>
1213
+ <line number="17" hits="0"/>
1214
+ <line number="18" hits="0"/>
1215
+ <line number="19" hits="0"/>
1216
+ <line number="21" hits="0"/>
1217
+ <line number="22" hits="0"/>
1218
+ </lines>
1219
+ </class>
1220
+ <class name="clear_cache.py" filename="scripts/clear_cache.py" complexity="0" line-rate="0" branch-rate="0">
1221
+ <methods/>
1222
+ <lines>
1223
+ <line number="1" hits="0"/>
1224
+ <line number="2" hits="0"/>
1225
+ <line number="3" hits="0"/>
1226
+ <line number="4" hits="0"/>
1227
+ <line number="5" hits="0"/>
1228
+ <line number="7" hits="0"/>
1229
+ <line number="8" hits="0"/>
1230
+ <line number="10" hits="0"/>
1231
+ <line number="11" hits="0"/>
1232
+ <line number="12" hits="0"/>
1233
+ <line number="13" hits="0"/>
1234
+ <line number="15" hits="0"/>
1235
+ <line number="16" hits="0"/>
1236
+ </lines>
1237
+ </class>
1238
+ <class name="forensic_audit.py" filename="scripts/forensic_audit.py" complexity="0" line-rate="0" branch-rate="0">
1239
+ <methods/>
1240
+ <lines>
1241
+ <line number="1" hits="0"/>
1242
+ <line number="2" hits="0"/>
1243
+ <line number="3" hits="0"/>
1244
+ <line number="4" hits="0"/>
1245
+ <line number="5" hits="0"/>
1246
+ <line number="7" hits="0"/>
1247
+ <line number="8" hits="0"/>
1248
+ <line number="10" hits="0"/>
1249
+ <line number="11" hits="0"/>
1250
+ <line number="13" hits="0"/>
1251
+ <line number="14" hits="0"/>
1252
+ <line number="15" hits="0"/>
1253
+ <line number="16" hits="0"/>
1254
+ <line number="18" hits="0"/>
1255
+ <line number="19" hits="0"/>
1256
+ <line number="20" hits="0"/>
1257
+ <line number="22" hits="0"/>
1258
+ <line number="23" hits="0"/>
1259
+ <line number="24" hits="0"/>
1260
+ <line number="25" hits="0"/>
1261
+ <line number="26" hits="0"/>
1262
+ <line number="27" hits="0"/>
1263
+ <line number="29" hits="0"/>
1264
+ <line number="30" hits="0"/>
1265
+ </lines>
1266
+ </class>
1267
+ <class name="ingest_tor_stealth.py" filename="scripts/ingest_tor_stealth.py" complexity="0" line-rate="0" branch-rate="0">
1268
+ <methods/>
1269
+ <lines>
1270
+ <line number="1" hits="0"/>
1271
+ <line number="2" hits="0"/>
1272
+ <line number="3" hits="0"/>
1273
+ <line number="4" hits="0"/>
1274
+ <line number="5" hits="0"/>
1275
+ <line number="6" hits="0"/>
1276
+ <line number="7" hits="0"/>
1277
+ <line number="8" hits="0"/>
1278
+ <line number="9" hits="0"/>
1279
+ <line number="12" hits="0"/>
1280
+ <line number="13" hits="0"/>
1281
+ <line number="14" hits="0"/>
1282
+ <line number="15" hits="0"/>
1283
+ <line number="16" hits="0"/>
1284
+ <line number="17" hits="0"/>
1285
+ <line number="18" hits="0"/>
1286
+ <line number="19" hits="0"/>
1287
+ <line number="20" hits="0"/>
1288
+ <line number="21" hits="0"/>
1289
+ <line number="24" hits="0"/>
1290
+ <line number="25" hits="0"/>
1291
+ <line number="26" hits="0"/>
1292
+ <line number="27" hits="0"/>
1293
+ <line number="29" hits="0"/>
1294
+ <line number="31" hits="0"/>
1295
+ <line number="32" hits="0"/>
1296
+ <line number="33" hits="0"/>
1297
+ <line number="35" hits="0"/>
1298
+ <line number="40" hits="0"/>
1299
+ <line number="43" hits="0"/>
1300
+ <line number="46" hits="0"/>
1301
+ <line number="47" hits="0"/>
1302
+ <line number="48" hits="0"/>
1303
+ <line number="49" hits="0"/>
1304
+ <line number="50" hits="0"/>
1305
+ <line number="51" hits="0"/>
1306
+ <line number="53" hits="0"/>
1307
+ <line number="54" hits="0"/>
1308
+ <line number="56" hits="0"/>
1309
+ <line number="58" hits="0"/>
1310
+ <line number="59" hits="0"/>
1311
+ <line number="60" hits="0"/>
1312
+ <line number="61" hits="0"/>
1313
+ <line number="62" hits="0"/>
1314
+ <line number="63" hits="0"/>
1315
+ <line number="64" hits="0"/>
1316
+ <line number="66" hits="0"/>
1317
+ <line number="67" hits="0"/>
1318
+ <line number="69" hits="0"/>
1319
+ <line number="70" hits="0"/>
1320
+ <line number="71" hits="0"/>
1321
+ <line number="72" hits="0"/>
1322
+ <line number="74" hits="0"/>
1323
+ <line number="83" hits="0"/>
1324
+ <line number="85" hits="0"/>
1325
+ <line number="86" hits="0"/>
1326
+ <line number="87" hits="0"/>
1327
+ <line number="88" hits="0"/>
1328
+ <line number="89" hits="0"/>
1329
+ <line number="91" hits="0"/>
1330
+ <line number="92" hits="0"/>
1331
+ <line number="93" hits="0"/>
1332
+ <line number="95" hits="0"/>
1333
+ <line number="96" hits="0"/>
1334
+ <line number="100" hits="0"/>
1335
+ <line number="101" hits="0"/>
1336
+ <line number="103" hits="0"/>
1337
+ <line number="104" hits="0"/>
1338
+ <line number="105" hits="0"/>
1339
+ <line number="106" hits="0"/>
1340
+ <line number="108" hits="0"/>
1341
+ <line number="118" hits="0"/>
1342
+ <line number="119" hits="0"/>
1343
+ <line number="120" hits="0"/>
1344
+ <line number="121" hits="0"/>
1345
+ <line number="122" hits="0"/>
1346
+ <line number="124" hits="0"/>
1347
+ <line number="125" hits="0"/>
1348
+ <line number="126" hits="0"/>
1349
+ </lines>
1350
+ </class>
1351
+ <class name="populate_schemes_from_chunks.py" filename="scripts/populate_schemes_from_chunks.py" complexity="0" line-rate="0" branch-rate="0">
1352
+ <methods/>
1353
+ <lines>
1354
+ <line number="7" hits="0"/>
1355
+ <line number="8" hits="0"/>
1356
+ <line number="9" hits="0"/>
1357
+ <line number="10" hits="0"/>
1358
+ <line number="12" hits="0"/>
1359
+ <line number="13" hits="0"/>
1360
+ <line number="14" hits="0"/>
1361
+ <line number="15" hits="0"/>
1362
+ <line number="16" hits="0"/>
1363
+ <line number="18" hits="0"/>
1364
+ <line number="20" hits="0"/>
1365
+ <line number="21" hits="0"/>
1366
+ <line number="22" hits="0"/>
1367
+ <line number="23" hits="0"/>
1368
+ <line number="26" hits="0"/>
1369
+ <line number="27" hits="0"/>
1370
+ <line number="29" hits="0"/>
1371
+ <line number="30" hits="0"/>
1372
+ <line number="36" hits="0"/>
1373
+ <line number="37" hits="0"/>
1374
+ <line number="38" hits="0"/>
1375
+ <line number="40" hits="0"/>
1376
+ <line number="41" hits="0"/>
1377
+ <line number="50" hits="0"/>
1378
+ <line number="52" hits="0"/>
1379
+ <line number="53" hits="0"/>
1380
+ <line number="55" hits="0"/>
1381
+ <line number="66" hits="0"/>
1382
+ <line number="68" hits="0"/>
1383
+ <line number="70" hits="0"/>
1384
+ <line number="71" hits="0"/>
1385
+ <line number="72" hits="0"/>
1386
+ <line number="73" hits="0"/>
1387
+ <line number="74" hits="0"/>
1388
+ <line number="78" hits="0"/>
1389
+ <line number="79" hits="0"/>
1390
+ <line number="80" hits="0"/>
1391
+ <line number="82" hits="0"/>
1392
+ </lines>
1393
+ </class>
1394
+ <class name="reembed_all.py" filename="scripts/reembed_all.py" complexity="0" line-rate="0" branch-rate="0">
1395
+ <methods/>
1396
+ <lines>
1397
+ <line number="7" hits="0"/>
1398
+ <line number="8" hits="0"/>
1399
+ <line number="9" hits="0"/>
1400
+ <line number="10" hits="0"/>
1401
+ <line number="11" hits="0"/>
1402
+ <line number="12" hits="0"/>
1403
+ <line number="13" hits="0"/>
1404
+ <line number="16" hits="0"/>
1405
+ <line number="17" hits="0"/>
1406
+ <line number="18" hits="0"/>
1407
+ <line number="20" hits="0"/>
1408
+ <line number="21" hits="0"/>
1409
+ <line number="22" hits="0"/>
1410
+ <line number="23" hits="0"/>
1411
+ <line number="25" hits="0"/>
1412
+ <line number="26" hits="0"/>
1413
+ <line number="30" hits="0"/>
1414
+ <line number="32" hits="0"/>
1415
+ <line number="35" hits="0"/>
1416
+ <line number="41" hits="0"/>
1417
+ <line number="42" hits="0"/>
1418
+ <line number="43" hits="0"/>
1419
+ <line number="44" hits="0"/>
1420
+ <line number="46" hits="0"/>
1421
+ <line number="48" hits="0"/>
1422
+ <line number="49" hits="0"/>
1423
+ <line number="51" hits="0"/>
1424
+ <line number="56" hits="0"/>
1425
+ <line number="57" hits="0"/>
1426
+ <line number="63" hits="0"/>
1427
+ <line number="64" hits="0"/>
1428
+ <line number="69" hits="0"/>
1429
+ <line number="70" hits="0"/>
1430
+ <line number="72" hits="0"/>
1431
+ <line number="74" hits="0"/>
1432
+ <line number="75" hits="0"/>
1433
+ </lines>
1434
+ </class>
1435
+ </classes>
1436
+ </package>
1437
+ <package name="tests" line-rate="0.9184" branch-rate="0" complexity="0">
1438
+ <classes>
1439
+ <class name="__init__.py" filename="tests/__init__.py" complexity="0" line-rate="1" branch-rate="0">
1440
+ <methods/>
1441
+ <lines/>
1442
+ </class>
1443
+ <class name="test_core.py" filename="tests/test_core.py" complexity="0" line-rate="0.9184" branch-rate="0">
1444
+ <methods/>
1445
+ <lines>
1446
+ <line number="6" hits="1"/>
1447
+ <line number="7" hits="1"/>
1448
+ <line number="8" hits="1"/>
1449
+ <line number="15" hits="1"/>
1450
+ <line number="18" hits="1"/>
1451
+ <line number="20" hits="1"/>
1452
+ <line number="21" hits="1"/>
1453
+ <line number="22" hits="1"/>
1454
+ <line number="24" hits="1"/>
1455
+ <line number="25" hits="1"/>
1456
+ <line number="26" hits="1"/>
1457
+ <line number="27" hits="1"/>
1458
+ <line number="29" hits="1"/>
1459
+ <line number="30" hits="1"/>
1460
+ <line number="31" hits="1"/>
1461
+ <line number="33" hits="1"/>
1462
+ <line number="35" hits="1"/>
1463
+ <line number="39" hits="1"/>
1464
+ <line number="40" hits="1"/>
1465
+ <line number="42" hits="1"/>
1466
+ <line number="43" hits="1"/>
1467
+ <line number="44" hits="1"/>
1468
+ <line number="45" hits="1"/>
1469
+ <line number="47" hits="1"/>
1470
+ <line number="48" hits="1"/>
1471
+ <line number="49" hits="1"/>
1472
+ <line number="56" hits="1"/>
1473
+ <line number="59" hits="1"/>
1474
+ <line number="61" hits="1"/>
1475
+ <line number="62" hits="1"/>
1476
+ <line number="64" hits="1"/>
1477
+ <line number="65" hits="1"/>
1478
+ <line number="66" hits="1"/>
1479
+ <line number="68" hits="1"/>
1480
+ <line number="69" hits="1"/>
1481
+ <line number="70" hits="1"/>
1482
+ <line number="71" hits="1"/>
1483
+ <line number="73" hits="1"/>
1484
+ <line number="74" hits="0"/>
1485
+ <line number="75" hits="1"/>
1486
+ <line number="77" hits="1"/>
1487
+ <line number="78" hits="1"/>
1488
+ <line number="79" hits="1"/>
1489
+ <line number="80" hits="1"/>
1490
+ <line number="81" hits="1"/>
1491
+ <line number="82" hits="1"/>
1492
+ <line number="83" hits="0"/>
1493
+ <line number="84" hits="1"/>
1494
+ <line number="86" hits="1"/>
1495
+ <line number="87" hits="1"/>
1496
+ <line number="88" hits="1"/>
1497
+ <line number="90" hits="1"/>
1498
+ <line number="92" hits="1"/>
1499
+ <line number="93" hits="1"/>
1500
+ <line number="95" hits="1"/>
1501
+ <line number="96" hits="1"/>
1502
+ <line number="97" hits="1"/>
1503
+ <line number="99" hits="1"/>
1504
+ <line number="100" hits="1"/>
1505
+ <line number="101" hits="1"/>
1506
+ <line number="102" hits="1"/>
1507
+ <line number="103" hits="1"/>
1508
+ <line number="104" hits="1"/>
1509
+ <line number="105" hits="0"/>
1510
+ <line number="106" hits="1"/>
1511
+ <line number="108" hits="1"/>
1512
+ <line number="109" hits="1"/>
1513
+ <line number="110" hits="1"/>
1514
+ <line number="112" hits="1"/>
1515
+ <line number="114" hits="1"/>
1516
+ <line number="116" hits="1"/>
1517
+ <line number="117" hits="1"/>
1518
+ <line number="118" hits="1"/>
1519
+ <line number="120" hits="1"/>
1520
+ <line number="121" hits="1"/>
1521
+ <line number="122" hits="1"/>
1522
+ <line number="123" hits="1"/>
1523
+ <line number="125" hits="1"/>
1524
+ <line number="126" hits="1"/>
1525
+ <line number="127" hits="0"/>
1526
+ <line number="129" hits="1"/>
1527
+ <line number="130" hits="1"/>
1528
+ <line number="132" hits="1"/>
1529
+ <line number="134" hits="1"/>
1530
+ <line number="136" hits="1"/>
1531
+ <line number="137" hits="1"/>
1532
+ <line number="139" hits="1"/>
1533
+ <line number="140" hits="1"/>
1534
+ <line number="142" hits="1"/>
1535
+ <line number="144" hits="1"/>
1536
+ <line number="145" hits="1"/>
1537
+ <line number="147" hits="1"/>
1538
+ <line number="148" hits="1"/>
1539
+ <line number="150" hits="1"/>
1540
+ <line number="151" hits="1"/>
1541
+ <line number="152" hits="1"/>
1542
+ <line number="153" hits="1"/>
1543
+ <line number="154" hits="1"/>
1544
+ <line number="155" hits="1"/>
1545
+ <line number="156" hits="1"/>
1546
+ <line number="157" hits="0"/>
1547
+ <line number="159" hits="1"/>
1548
+ <line number="160" hits="1"/>
1549
+ <line number="163" hits="1"/>
1550
+ <line number="166" hits="1"/>
1551
+ <line number="168" hits="1"/>
1552
+ <line number="169" hits="1"/>
1553
+ <line number="171" hits="1"/>
1554
+ <line number="172" hits="1"/>
1555
+ <line number="173" hits="1"/>
1556
+ <line number="174" hits="1"/>
1557
+ <line number="175" hits="1"/>
1558
+ <line number="177" hits="1"/>
1559
+ <line number="178" hits="1"/>
1560
+ <line number="179" hits="1"/>
1561
+ <line number="180" hits="1"/>
1562
+ <line number="182" hits="1"/>
1563
+ <line number="184" hits="1"/>
1564
+ <line number="185" hits="1"/>
1565
+ <line number="187" hits="1"/>
1566
+ <line number="188" hits="1"/>
1567
+ <line number="189" hits="1"/>
1568
+ <line number="190" hits="1"/>
1569
+ <line number="191" hits="1"/>
1570
+ <line number="192" hits="1"/>
1571
+ <line number="193" hits="1"/>
1572
+ <line number="195" hits="1"/>
1573
+ <line number="203" hits="1"/>
1574
+ <line number="204" hits="1"/>
1575
+ <line number="205" hits="1"/>
1576
+ <line number="208" hits="1"/>
1577
+ <line number="211" hits="1"/>
1578
+ <line number="213" hits="1"/>
1579
+ <line number="215" hits="1"/>
1580
+ <line number="216" hits="1"/>
1581
+ <line number="217" hits="1"/>
1582
+ <line number="218" hits="1"/>
1583
+ <line number="219" hits="1"/>
1584
+ <line number="220" hits="1"/>
1585
+ <line number="222" hits="1"/>
1586
+ <line number="223" hits="1"/>
1587
+ <line number="224" hits="1"/>
1588
+ <line number="225" hits="1"/>
1589
+ <line number="227" hits="1"/>
1590
+ <line number="229" hits="1"/>
1591
+ <line number="231" hits="1"/>
1592
+ <line number="232" hits="1"/>
1593
+ <line number="233" hits="1"/>
1594
+ <line number="235" hits="1"/>
1595
+ <line number="236" hits="1"/>
1596
+ <line number="238" hits="1"/>
1597
+ <line number="240" hits="1"/>
1598
+ <line number="242" hits="1"/>
1599
+ <line number="243" hits="1"/>
1600
+ <line number="244" hits="1"/>
1601
+ <line number="246" hits="1"/>
1602
+ <line number="247" hits="1"/>
1603
+ <line number="254" hits="1"/>
1604
+ <line number="257" hits="1"/>
1605
+ <line number="258" hits="1"/>
1606
+ <line number="260" hits="1"/>
1607
+ <line number="261" hits="1"/>
1608
+ <line number="262" hits="1"/>
1609
+ <line number="263" hits="1"/>
1610
+ <line number="264" hits="1"/>
1611
+ <line number="265" hits="1"/>
1612
+ <line number="267" hits="1"/>
1613
+ <line number="268" hits="1"/>
1614
+ <line number="269" hits="1"/>
1615
+ <line number="270" hits="1"/>
1616
+ <line number="271" hits="1"/>
1617
+ <line number="272" hits="1"/>
1618
+ <line number="273" hits="1"/>
1619
+ <line number="274" hits="1"/>
1620
+ <line number="275" hits="1"/>
1621
+ <line number="276" hits="1"/>
1622
+ <line number="277" hits="1"/>
1623
+ <line number="278" hits="1"/>
1624
+ <line number="280" hits="1"/>
1625
+ <line number="282" hits="1"/>
1626
+ <line number="284" hits="1"/>
1627
+ <line number="286" hits="1"/>
1628
+ <line number="287" hits="1"/>
1629
+ <line number="288" hits="1"/>
1630
+ <line number="290" hits="1"/>
1631
+ <line number="292" hits="1"/>
1632
+ <line number="293" hits="1"/>
1633
+ <line number="294" hits="1"/>
1634
+ <line number="295" hits="1"/>
1635
+ <line number="297" hits="1"/>
1636
+ <line number="299" hits="1"/>
1637
+ <line number="300" hits="1"/>
1638
+ <line number="301" hits="1"/>
1639
+ <line number="302" hits="1"/>
1640
+ <line number="303" hits="1"/>
1641
+ <line number="305" hits="1"/>
1642
+ <line number="307" hits="1"/>
1643
+ <line number="309" hits="1"/>
1644
+ <line number="310" hits="1"/>
1645
+ <line number="311" hits="1"/>
1646
+ <line number="312" hits="1"/>
1647
+ <line number="313" hits="1"/>
1648
+ <line number="320" hits="1"/>
1649
+ <line number="323" hits="1"/>
1650
+ <line number="324" hits="1"/>
1651
+ <line number="326" hits="1"/>
1652
+ <line number="327" hits="1"/>
1653
+ <line number="328" hits="1"/>
1654
+ <line number="330" hits="1"/>
1655
+ <line number="357" hits="1"/>
1656
+ <line number="359" hits="1"/>
1657
+ <line number="364" hits="1"/>
1658
+ <line number="366" hits="1"/>
1659
+ <line number="367" hits="1"/>
1660
+ <line number="368" hits="1"/>
1661
+ <line number="369" hits="1"/>
1662
+ <line number="370" hits="1"/>
1663
+ <line number="372" hits="1"/>
1664
+ <line number="374" hits="1"/>
1665
+ <line number="375" hits="1"/>
1666
+ <line number="376" hits="1"/>
1667
+ <line number="377" hits="1"/>
1668
+ <line number="379" hits="1"/>
1669
+ <line number="381" hits="1"/>
1670
+ <line number="382" hits="1"/>
1671
+ <line number="383" hits="1"/>
1672
+ <line number="384" hits="1"/>
1673
+ <line number="386" hits="1"/>
1674
+ <line number="388" hits="1"/>
1675
+ <line number="389" hits="1"/>
1676
+ <line number="390" hits="1"/>
1677
+ <line number="391" hits="1"/>
1678
+ <line number="393" hits="1"/>
1679
+ <line number="395" hits="1"/>
1680
+ <line number="396" hits="1"/>
1681
+ <line number="397" hits="1"/>
1682
+ <line number="398" hits="1"/>
1683
+ <line number="405" hits="1"/>
1684
+ <line number="408" hits="1"/>
1685
+ <line number="409" hits="1"/>
1686
+ <line number="411" hits="1"/>
1687
+ <line number="412" hits="1"/>
1688
+ <line number="413" hits="0"/>
1689
+ <line number="414" hits="1"/>
1690
+ <line number="415" hits="1"/>
1691
+ <line number="417" hits="1"/>
1692
+ <line number="419" hits="0"/>
1693
+ <line number="426" hits="0"/>
1694
+ <line number="427" hits="0"/>
1695
+ <line number="428" hits="0"/>
1696
+ <line number="430" hits="1"/>
1697
+ <line number="432" hits="0"/>
1698
+ <line number="439" hits="0"/>
1699
+ <line number="440" hits="0"/>
1700
+ <line number="442" hits="1"/>
1701
+ <line number="444" hits="0"/>
1702
+ <line number="451" hits="0"/>
1703
+ <line number="452" hits="0"/>
1704
+ <line number="464" hits="0"/>
1705
+ <line number="465" hits="0"/>
1706
+ <line number="466" hits="0"/>
1707
+ <line number="468" hits="1"/>
1708
+ <line number="470" hits="0"/>
1709
+ <line number="477" hits="0"/>
1710
+ <line number="479" hits="0"/>
1711
+ <line number="480" hits="0"/>
1712
+ <line number="487" hits="1"/>
1713
+ <line number="490" hits="1"/>
1714
+ <line number="492" hits="1"/>
1715
+ <line number="498" hits="1"/>
1716
+ <line number="499" hits="1"/>
1717
+ <line number="500" hits="1"/>
1718
+ <line number="501" hits="1"/>
1719
+ <line number="503" hits="1"/>
1720
+ <line number="505" hits="1"/>
1721
+ <line number="518" hits="1"/>
1722
+ <line number="519" hits="1"/>
1723
+ <line number="521" hits="1"/>
1724
+ <line number="522" hits="1"/>
1725
+ <line number="523" hits="1"/>
1726
+ <line number="524" hits="1"/>
1727
+ <line number="525" hits="1"/>
1728
+ </lines>
1729
+ </class>
1730
+ </classes>
1731
+ </package>
1732
+ <package name="whatsapp" line-rate="0" branch-rate="0" complexity="0">
1733
+ <classes>
1734
+ <class name="__init__.py" filename="whatsapp/__init__.py" complexity="0" line-rate="1" branch-rate="0">
1735
+ <methods/>
1736
+ <lines/>
1737
+ </class>
1738
+ <class name="expiry_alerts.py" filename="whatsapp/expiry_alerts.py" complexity="0" line-rate="0" branch-rate="0">
1739
+ <methods/>
1740
+ <lines>
1741
+ <line number="1" hits="0"/>
1742
+ <line number="2" hits="0"/>
1743
+ <line number="3" hits="0"/>
1744
+ <line number="4" hits="0"/>
1745
+ <line number="5" hits="0"/>
1746
+ <line number="6" hits="0"/>
1747
+ <line number="8" hits="0"/>
1748
+ <line number="9" hits="0"/>
1749
+ <line number="11" hits="0"/>
1750
+ <line number="12" hits="0"/>
1751
+ <line number="15" hits="0"/>
1752
+ <line number="19" hits="0"/>
1753
+ <line number="20" hits="0"/>
1754
+ <line number="21" hits="0"/>
1755
+ <line number="23" hits="0"/>
1756
+ <line number="61" hits="0"/>
1757
+ <line number="62" hits="0"/>
1758
+ <line number="63" hits="0"/>
1759
+ <line number="64" hits="0"/>
1760
+ <line number="66" hits="0"/>
1761
+ <line number="67" hits="0"/>
1762
+ <line number="68" hits="0"/>
1763
+ <line number="69" hits="0"/>
1764
+ <line number="71" hits="0"/>
1765
+ <line number="73" hits="0"/>
1766
+ <line number="74" hits="0"/>
1767
+ <line number="81" hits="0"/>
1768
+ <line number="83" hits="0"/>
1769
+ <line number="84" hits="0"/>
1770
+ <line number="85" hits="0"/>
1771
+ <line number="87" hits="0"/>
1772
+ <line number="90" hits="0"/>
1773
+ <line number="92" hits="0"/>
1774
+ <line number="93" hits="0"/>
1775
+ <line number="95" hits="0"/>
1776
+ <line number="96" hits="0"/>
1777
+ <line number="98" hits="0"/>
1778
+ <line number="100" hits="0"/>
1779
+ <line number="101" hits="0"/>
1780
+ <line number="103" hits="0"/>
1781
+ <line number="104" hits="0"/>
1782
+ </lines>
1783
+ </class>
1784
+ <class name="webhook.py" filename="whatsapp/webhook.py" complexity="0" line-rate="0" branch-rate="0">
1785
+ <methods/>
1786
+ <lines>
1787
+ <line number="1" hits="0"/>
1788
+ <line number="2" hits="0"/>
1789
+ <line number="3" hits="0"/>
1790
+ <line number="4" hits="0"/>
1791
+ <line number="5" hits="0"/>
1792
+ <line number="6" hits="0"/>
1793
+ <line number="7" hits="0"/>
1794
+ <line number="8" hits="0"/>
1795
+ <line number="9" hits="0"/>
1796
+ <line number="10" hits="0"/>
1797
+ <line number="12" hits="0"/>
1798
+ <line number="15" hits="0"/>
1799
+ <line number="17" hits="0"/>
1800
+ <line number="20" hits="0"/>
1801
+ <line number="21" hits="0"/>
1802
+ <line number="22" hits="0"/>
1803
+ <line number="23" hits="0"/>
1804
+ <line number="24" hits="0"/>
1805
+ <line number="25" hits="0"/>
1806
+ <line number="26" hits="0"/>
1807
+ <line number="29" hits="0"/>
1808
+ <line number="30" hits="0"/>
1809
+ <line number="31" hits="0"/>
1810
+ <line number="32" hits="0"/>
1811
+ <line number="33" hits="0"/>
1812
+ <line number="35" hits="0"/>
1813
+ <line number="36" hits="0"/>
1814
+ <line number="37" hits="0"/>
1815
+ <line number="39" hits="0"/>
1816
+ <line number="40" hits="0"/>
1817
+ <line number="41" hits="0"/>
1818
+ <line number="42" hits="0"/>
1819
+ <line number="43" hits="0"/>
1820
+ <line number="45" hits="0"/>
1821
+ <line number="46" hits="0"/>
1822
+ <line number="47" hits="0"/>
1823
+ <line number="49" hits="0"/>
1824
+ <line number="50" hits="0"/>
1825
+ <line number="51" hits="0"/>
1826
+ <line number="52" hits="0"/>
1827
+ <line number="53" hits="0"/>
1828
+ <line number="54" hits="0"/>
1829
+ <line number="56" hits="0"/>
1830
+ <line number="57" hits="0"/>
1831
+ <line number="59" hits="0"/>
1832
+ <line number="62" hits="0"/>
1833
+ <line number="63" hits="0"/>
1834
+ <line number="64" hits="0"/>
1835
+ <line number="66" hits="0"/>
1836
+ <line number="67" hits="0"/>
1837
+ <line number="69" hits="0"/>
1838
+ <line number="70" hits="0"/>
1839
+ <line number="71" hits="0"/>
1840
+ <line number="73" hits="0"/>
1841
+ <line number="74" hits="0"/>
1842
+ <line number="80" hits="0"/>
1843
+ <line number="85" hits="0"/>
1844
+ <line number="87" hits="0"/>
1845
+ <line number="88" hits="0"/>
1846
+ <line number="89" hits="0"/>
1847
+ <line number="90" hits="0"/>
1848
+ <line number="91" hits="0"/>
1849
+ <line number="93" hits="0"/>
1850
+ <line number="94" hits="0"/>
1851
+ <line number="97" hits="0"/>
1852
+ <line number="98" hits="0"/>
1853
+ <line number="99" hits="0"/>
1854
+ <line number="100" hits="0"/>
1855
+ <line number="101" hits="0"/>
1856
+ <line number="103" hits="0"/>
1857
+ <line number="104" hits="0"/>
1858
+ <line number="105" hits="0"/>
1859
+ <line number="106" hits="0"/>
1860
+ <line number="107" hits="0"/>
1861
+ <line number="109" hits="0"/>
1862
+ <line number="110" hits="0"/>
1863
+ <line number="111" hits="0"/>
1864
+ <line number="113" hits="0"/>
1865
+ <line number="114" hits="0"/>
1866
+ <line number="116" hits="0"/>
1867
+ <line number="117" hits="0"/>
1868
+ <line number="118" hits="0"/>
1869
+ <line number="119" hits="0"/>
1870
+ <line number="120" hits="0"/>
1871
+ <line number="121" hits="0"/>
1872
+ <line number="123" hits="0"/>
1873
+ <line number="125" hits="0"/>
1874
+ <line number="128" hits="0"/>
1875
+ <line number="129" hits="0"/>
1876
+ <line number="130" hits="0"/>
1877
+ <line number="131" hits="0"/>
1878
+ <line number="134" hits="0"/>
1879
+ <line number="137" hits="0"/>
1880
+ <line number="142" hits="0"/>
1881
+ <line number="143" hits="0"/>
1882
+ <line number="144" hits="0"/>
1883
+ <line number="145" hits="0"/>
1884
+ <line number="148" hits="0"/>
1885
+ <line number="150" hits="0"/>
1886
+ <line number="152" hits="0"/>
1887
+ <line number="153" hits="0"/>
1888
+ <line number="154" hits="0"/>
1889
+ <line number="156" hits="0"/>
1890
+ <line number="158" hits="0"/>
1891
+ <line number="159" hits="0"/>
1892
+ <line number="161" hits="0"/>
1893
+ <line number="162" hits="0"/>
1894
+ <line number="164" hits="0"/>
1895
+ <line number="165" hits="0"/>
1896
+ <line number="167" hits="0"/>
1897
+ <line number="168" hits="0"/>
1898
+ <line number="169" hits="0"/>
1899
+ <line number="170" hits="0"/>
1900
+ <line number="172" hits="0"/>
1901
+ <line number="173" hits="0"/>
1902
+ <line number="174" hits="0"/>
1903
+ <line number="175" hits="0"/>
1904
+ <line number="177" hits="0"/>
1905
+ <line number="178" hits="0"/>
1906
+ <line number="180" hits="0"/>
1907
+ <line number="181" hits="0"/>
1908
+ <line number="182" hits="0"/>
1909
+ <line number="184" hits="0"/>
1910
+ <line number="185" hits="0"/>
1911
+ <line number="189" hits="0"/>
1912
+ <line number="190" hits="0"/>
1913
+ <line number="191" hits="0"/>
1914
+ <line number="193" hits="0"/>
1915
+ <line number="194" hits="0"/>
1916
+ <line number="195" hits="0"/>
1917
+ <line number="197" hits="0"/>
1918
+ <line number="203" hits="0"/>
1919
+ <line number="205" hits="0"/>
1920
+ <line number="206" hits="0"/>
1921
+ <line number="208" hits="0"/>
1922
+ </lines>
1923
+ </class>
1924
+ </classes>
1925
+ </package>
1926
+ </packages>
1927
+ </coverage>
reset_pib.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from supabase import create_client
3
+ from dotenv import load_dotenv
4
+
5
+ load_dotenv('/workspaces/govbridge/.env')
6
+ sb = create_client(os.getenv('SUPABASE_URL'), os.getenv('SUPABASE_KEY'))
7
+
8
+ res = sb.table('schemes').select('id, title').execute()
9
+ for r in res.data:
10
+ if "PIB:" in r['title'] or "Press Release" in r.get('category', ''):
11
+ sb.table('schemes').update({'is_verified': False, 'benefits': '', 'eligibility_text': ''}).eq('id', r['id']).execute()
12
+
13
+ print("Reset PIB records for re-enrichment")
scripts/ingest_tor_stealth.py CHANGED
@@ -169,46 +169,7 @@ class MultiSourceIngestor:
169
  )
170
  await asyncio.sleep(5)
171
 
172
- # Try to extract scheme cards from rendered page
173
- scheme_titles = []
174
- selectors = [
175
- "[class*='scheme'] h2, [class*='scheme'] h3",
176
- "a[href*='/schemes/'] h2, a[href*='/schemes/'] h3",
177
- ".card-title, .scheme-name, .scheme-title",
178
- "h2, h3"
179
- ]
180
-
181
- for selector in selectors:
182
- try:
183
- elements = await page.query_selector_all(selector)
184
- for el in elements[:50]:
185
- text = (await el.inner_text()).strip()
186
- if len(text) > 10 and len(text) < 300:
187
- if not any(skip in text.lower() for skip in [
188
- "filter", "search", "quick links", "useful links",
189
- "about us", "contact", "faq", "sign in", "scheme",
190
- "powered by", "connect", "disclaimer", "terms"
191
- ]):
192
- scheme_titles.append(text)
193
- if scheme_titles:
194
- break
195
- except Exception:
196
- continue
197
-
198
- # Build scheme records from page data
199
- for title in scheme_titles:
200
- if title in self.protected_titles:
201
- self.stats.skipped_enriched += 1
202
- continue
203
- self.all_schemes.append(SchemeRecord(
204
- title=title,
205
- category="Central Government",
206
- ministry="Government of India",
207
- summary=f"Central government scheme listed on MyScheme.gov.in portal.",
208
- source_url="https://www.myscheme.gov.in/search",
209
- ).model_dump())
210
-
211
- # Also process XHR-intercepted schemes
212
  for s in captured_schemes:
213
  title = s.get("schemeName") or s.get("title") or s.get("name", "")
214
  if not title or len(title) < 5:
@@ -227,7 +188,6 @@ class MultiSourceIngestor:
227
  source_url=s.get("schemeUrl", s.get("url", f"https://www.myscheme.gov.in/schemes/{title.lower().replace(' ', '-')}")),
228
  ).model_dump())
229
 
230
- print(f" ๐Ÿ“„ Page titles: {len(scheme_titles)}")
231
  print(f" ๐Ÿ”— XHR captures: {len(captured_schemes)}")
232
 
233
  except Exception as e:
 
169
  )
170
  await asyncio.sleep(5)
171
 
172
+ # Process XHR-intercepted schemes
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  for s in captured_schemes:
174
  title = s.get("schemeName") or s.get("title") or s.get("name", "")
175
  if not title or len(title) < 5:
 
188
  source_url=s.get("schemeUrl", s.get("url", f"https://www.myscheme.gov.in/schemes/{title.lower().replace(' ', '-')}")),
189
  ).model_dump())
190
 
 
191
  print(f" ๐Ÿ”— XHR captures: {len(captured_schemes)}")
192
 
193
  except Exception as e:
test_db.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from supabase import create_client
3
+ from dotenv import load_dotenv
4
+
5
+ load_dotenv('/workspaces/govbridge/.env')
6
+ sb = create_client(os.getenv('SUPABASE_URL'), os.getenv('SUPABASE_KEY'))
7
+
8
+ res = sb.table('schemes').select('id, title').execute()
9
+ to_delete = []
10
+ for r in res.data:
11
+ t = r['title'].lower()
12
+ if "something went wrong" in t or "sign out" in t or "accessibility" in t or "ministry of " in t:
13
+ to_delete.append(r['id'])
14
+
15
+ for id in to_delete:
16
+ up_res = sb.table('schemes').update({'is_active': False, 'title': f'DELETED_GHOST_{id}'}).eq('id', id).execute()
17
+ print(f"Disabled {id}")
test_db_fix.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from supabase import create_client
3
+ from dotenv import load_dotenv
4
+
5
+ load_dotenv('/workspaces/govbridge/.env')
6
+ sb = create_client(os.getenv('SUPABASE_URL'), os.getenv('SUPABASE_KEY'))
7
+
8
+ res = sb.table('schemes').select('id, title, full_description').execute()
9
+ for r in res.data:
10
+ if r['full_description'] and "Key Benefits:" in r['full_description']:
11
+ new_desc = r['full_description'].replace("Key Benefits:", "").strip()
12
+ sb.table('schemes').update({'full_description': new_desc}).eq('id', r['id']).execute()
13
+ print(f"Fixed {r['title']}")
test_get_id.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from supabase import create_client
3
+ from dotenv import load_dotenv
4
+
5
+ load_dotenv('/workspaces/govbridge/.env')
6
+ sb = create_client(os.getenv('SUPABASE_URL'), os.getenv('SUPABASE_KEY'))
7
+
8
+ res = sb.table('schemes').select('id, title, is_verified').limit(5).execute()
9
+ for r in res.data:
10
+ print(f"{r['title']} -> ID: {r['id']} (Verified: {r['is_verified']})")