1+ {
2+ "schema_version" : " 1.0.0" ,
3+ "repo" : " scittles" ,
4+ "repo_version" : " 0.1.0" ,
5+ "archetype" : " python-library" ,
6+ "generated_at" : " 2026-04-16T15:15:45.275282+00:00" ,
7+ "stats" : {
8+ "node_count" : 48 ,
9+ "edge_count" : 10
10+ },
11+ "nodes" : [
12+ {
13+ "id" : " dependency:pycose" ,
14+ "type" : " dependency" ,
15+ "name" : " pycose" ,
16+ "file" : " pyproject.toml"
17+ },
18+ {
19+ "id" : " dependency:cbor2" ,
20+ "type" : " dependency" ,
21+ "name" : " cbor2" ,
22+ "file" : " pyproject.toml"
23+ },
24+ {
25+ "id" : " dependency:cryptography" ,
26+ "type" : " dependency" ,
27+ "name" : " cryptography" ,
28+ "file" : " pyproject.toml"
29+ },
30+ {
31+ "id" : " dependency:fastapi" ,
32+ "type" : " dependency" ,
33+ "name" : " fastapi" ,
34+ "file" : " pyproject.toml"
35+ },
36+ {
37+ "id" : " dependency:uvicorn" ,
38+ "type" : " dependency" ,
39+ "name" : " uvicorn" ,
40+ "file" : " pyproject.toml"
41+ },
42+ {
43+ "id" : " dependency:pydantic" ,
44+ "type" : " dependency" ,
45+ "name" : " pydantic" ,
46+ "file" : " pyproject.toml"
47+ },
48+ {
49+ "id" : " dependency:pydantic-settings" ,
50+ "type" : " dependency" ,
51+ "name" : " pydantic-settings" ,
52+ "file" : " pyproject.toml"
53+ },
54+ {
55+ "id" : " dependency:aiosqlite" ,
56+ "type" : " dependency" ,
57+ "name" : " aiosqlite" ,
58+ "file" : " pyproject.toml"
59+ },
60+ {
61+ "id" : " dependency:asyncpg" ,
62+ "type" : " dependency" ,
63+ "name" : " asyncpg" ,
64+ "file" : " pyproject.toml"
65+ },
66+ {
67+ "id" : " dependency:opentelemetry-api" ,
68+ "type" : " dependency" ,
69+ "name" : " opentelemetry-api" ,
70+ "file" : " pyproject.toml"
71+ },
72+ {
73+ "id" : " dependency:opentelemetry-sdk" ,
74+ "type" : " dependency" ,
75+ "name" : " opentelemetry-sdk" ,
76+ "file" : " pyproject.toml"
77+ },
78+ {
79+ "id" : " dependency:opentelemetry-instrumentation-fastapi" ,
80+ "type" : " dependency" ,
81+ "name" : " opentelemetry-instrumentation-fastapi" ,
82+ "file" : " pyproject.toml"
83+ },
84+ {
85+ "id" : " dependency:opentelemetry-instrumentation-sqlite3" ,
86+ "type" : " dependency" ,
87+ "name" : " opentelemetry-instrumentation-sqlite3" ,
88+ "file" : " pyproject.toml"
89+ },
90+ {
91+ "id" : " dependency:opentelemetry-exporter-otlp-proto-grpc" ,
92+ "type" : " dependency" ,
93+ "name" : " opentelemetry-exporter-otlp-proto-grpc" ,
94+ "file" : " pyproject.toml"
95+ },
96+ {
97+ "id" : " dependency:opentelemetry-exporter-prometheus" ,
98+ "type" : " dependency" ,
99+ "name" : " opentelemetry-exporter-prometheus" ,
100+ "file" : " pyproject.toml"
101+ },
102+ {
103+ "id" : " dependency:structlog" ,
104+ "type" : " dependency" ,
105+ "name" : " structlog" ,
106+ "file" : " pyproject.toml"
107+ },
108+ {
109+ "id" : " class:TransparencyServiceAPI" ,
110+ "type" : " class" ,
111+ "name" : " TransparencyServiceAPI" ,
112+ "file" : " src/api/endpoints.py" ,
113+ "line" : 19
114+ },
115+ {
116+ "id" : " class:TransparencyConfiguration" ,
117+ "type" : " class" ,
118+ "name" : " TransparencyConfiguration" ,
119+ "file" : " src/api/models.py" ,
120+ "line" : 6
121+ },
122+ {
123+ "id" : " class:RegistrationResponse" ,
124+ "type" : " class" ,
125+ "name" : " RegistrationResponse" ,
126+ "file" : " src/api/models.py" ,
127+ "line" : 15
128+ },
129+ {
130+ "id" : " class:RegistrationPending" ,
131+ "type" : " class" ,
132+ "name" : " RegistrationPending" ,
133+ "file" : " src/api/models.py" ,
134+ "line" : 23
135+ },
136+ {
137+ "id" : " class:ReceiptResponse" ,
138+ "type" : " class" ,
139+ "name" : " ReceiptResponse" ,
140+ "file" : " src/api/models.py" ,
141+ "line" : 30
142+ },
143+ {
144+ "id" : " class:ErrorResponse" ,
145+ "type" : " class" ,
146+ "name" : " ErrorResponse" ,
147+ "file" : " src/api/models.py" ,
148+ "line" : 40
149+ },
150+ {
151+ "id" : " class:Settings" ,
152+ "type" : " class" ,
153+ "name" : " Settings" ,
154+ "file" : " src/config.py" ,
155+ "line" : 5
156+ },
157+ {
158+ "id" : " class:MerkleTree" ,
159+ "type" : " class" ,
160+ "name" : " MerkleTree" ,
161+ "file" : " src/core/merkle.py" ,
162+ "line" : 14
163+ },
164+ {
165+ "id" : " class:MerkleTreeBuilder" ,
166+ "type" : " class" ,
167+ "name" : " MerkleTreeBuilder" ,
168+ "file" : " src/core/merkle.py" ,
169+ "line" : 189
170+ },
171+ {
172+ "id" : " class:ReceiptGenerator" ,
173+ "type" : " class" ,
174+ "name" : " ReceiptGenerator" ,
175+ "file" : " src/core/receipts.py" ,
176+ "line" : 20
177+ },
178+ {
179+ "id" : " class:StatementValidator" ,
180+ "type" : " class" ,
181+ "name" : " StatementValidator" ,
182+ "file" : " src/core/receipts.py" ,
183+ "line" : 195
184+ },
185+ {
186+ "id" : " function:verify_inclusion" ,
187+ "type" : " function" ,
188+ "name" : " verify_inclusion" ,
189+ "file" : " src/core/verification.py" ,
190+ "line" : 7
191+ },
192+ {
193+ "id" : " function:create_app" ,
194+ "type" : " function" ,
195+ "name" : " create_app" ,
196+ "file" : " src/main.py" ,
197+ "line" : 14
198+ },
199+ {
200+ "id" : " function:main" ,
201+ "type" : " function" ,
202+ "name" : " main" ,
203+ "file" : " src/main.py" ,
204+ "line" : 75
205+ },
206+ {
207+ "id" : " function:add_trace_context" ,
208+ "type" : " function" ,
209+ "name" : " add_trace_context" ,
210+ "file" : " src/observability/logging.py" ,
211+ "line" : 14
212+ },
213+ {
214+ "id" : " function:setup_logging" ,
215+ "type" : " function" ,
216+ "name" : " setup_logging" ,
217+ "file" : " src/observability/logging.py" ,
218+ "line" : 26
219+ },
220+ {
221+ "id" : " function:get_logger" ,
222+ "type" : " function" ,
223+ "name" : " get_logger" ,
224+ "file" : " src/observability/logging.py" ,
225+ "line" : 62
226+ },
227+ {
228+ "id" : " class:Metrics" ,
229+ "type" : " class" ,
230+ "name" : " Metrics" ,
231+ "file" : " src/observability/metrics.py" ,
232+ "line" : 7
233+ },
234+ {
235+ "id" : " function:get_metrics" ,
236+ "type" : " function" ,
237+ "name" : " get_metrics" ,
238+ "file" : " src/observability/metrics.py" ,
239+ "line" : 89
240+ },
241+ {
242+ "id" : " class:ObservabilityMiddleware" ,
243+ "type" : " class" ,
244+ "name" : " ObservabilityMiddleware" ,
245+ "file" : " src/observability/middleware.py" ,
246+ "line" : 20
247+ },
248+ {
249+ "id" : " function:setup_opentelemetry" ,
250+ "type" : " function" ,
251+ "name" : " setup_opentelemetry" ,
252+ "file" : " src/observability/otel.py" ,
253+ "line" : 35
254+ },
255+ {
256+ "id" : " function:get_tracer" ,
257+ "type" : " function" ,
258+ "name" : " get_tracer" ,
259+ "file" : " src/observability/otel.py" ,
260+ "line" : 98
261+ },
262+ {
263+ "id" : " function:get_meter" ,
264+ "type" : " function" ,
265+ "name" : " get_meter" ,
266+ "file" : " src/observability/otel.py" ,
267+ "line" : 103
268+ },
269+ {
270+ "id" : " function:setup_prometheus_exporter" ,
271+ "type" : " function" ,
272+ "name" : " setup_prometheus_exporter" ,
273+ "file" : " src/observability/prometheus.py" ,
274+ "line" : 15
275+ },
276+ {
277+ "id" : " function:get_metrics_endpoint" ,
278+ "type" : " function" ,
279+ "name" : " get_metrics_endpoint" ,
280+ "file" : " src/observability/prometheus.py" ,
281+ "line" : 46
282+ },
283+ {
284+ "id" : " class:StorageBackend" ,
285+ "type" : " class" ,
286+ "name" : " StorageBackend" ,
287+ "file" : " src/storage/base.py" ,
288+ "line" : 5
289+ },
290+ {
291+ "id" : " class:PostgresStore" ,
292+ "type" : " class" ,
293+ "name" : " PostgresStore" ,
294+ "file" : " src/storage/postgres_store.py" ,
295+ "line" : 19
296+ },
297+ {
298+ "id" : " class:SQLiteStore" ,
299+ "type" : " class" ,
300+ "name" : " SQLiteStore" ,
301+ "file" : " src/storage/sqlite_store.py" ,
302+ "line" : 16
303+ },
304+ {
305+ "id" : " interface:scittles" ,
306+ "type" : " interface" ,
307+ "name" : " scittles" ,
308+ "description" : " CLI: src.main:main" ,
309+ "file" : " pyproject.toml"
310+ },
311+ {
312+ "id" : " config:OTEL_EXPORTER_OTLP_ENDPOINT" ,
313+ "type" : " config" ,
314+ "name" : " OTEL_EXPORTER_OTLP_ENDPOINT" ,
315+ "file" : " src/observability/otel.py"
316+ },
317+ {
318+ "id" : " artifact:docker-image" ,
319+ "type" : " artifact" ,
320+ "name" : " Docker image" ,
321+ "file" : " Dockerfile"
322+ },
323+ {
324+ "id" : " document:readme-md" ,
325+ "type" : " document" ,
326+ "name" : " README.md" ,
327+ "file" : " README.md"
328+ }
329+ ],
330+ "edges" : [
331+ {
332+ "from" : " class:TransparencyConfiguration" ,
333+ "to" : " class:BaseModel" ,
334+ "type" : " inherits"
335+ },
336+ {
337+ "from" : " class:RegistrationResponse" ,
338+ "to" : " class:BaseModel" ,
339+ "type" : " inherits"
340+ },
341+ {
342+ "from" : " class:RegistrationPending" ,
343+ "to" : " class:BaseModel" ,
344+ "type" : " inherits"
345+ },
346+ {
347+ "from" : " class:ReceiptResponse" ,
348+ "to" : " class:BaseModel" ,
349+ "type" : " inherits"
350+ },
351+ {
352+ "from" : " class:ErrorResponse" ,
353+ "to" : " class:BaseModel" ,
354+ "type" : " inherits"
355+ },
356+ {
357+ "from" : " class:Settings" ,
358+ "to" : " class:BaseSettings" ,
359+ "type" : " inherits"
360+ },
361+ {
362+ "from" : " class:ObservabilityMiddleware" ,
363+ "to" : " class:BaseHTTPMiddleware" ,
364+ "type" : " inherits"
365+ },
366+ {
367+ "from" : " class:StorageBackend" ,
368+ "to" : " class:ABC" ,
369+ "type" : " inherits"
370+ },
371+ {
372+ "from" : " class:PostgresStore" ,
373+ "to" : " class:StorageBackend" ,
374+ "type" : " inherits"
375+ },
376+ {
377+ "from" : " class:SQLiteStore" ,
378+ "to" : " class:StorageBackend" ,
379+ "type" : " inherits"
380+ }
381+ ],
382+ "subsystems" : []
383+ }
0 commit comments