clevercx-security-master-types 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,50 @@
1
+ # Dependencies
2
+ node_modules/
3
+ __pycache__/
4
+ *.pyc
5
+ .venv/
6
+ venv/
7
+
8
+ # Build outputs
9
+ packages/typescript/dist/
10
+ packages/python/dist/
11
+ packages/python/*.egg-info/
12
+ packages/python/build/
13
+
14
+ # IDE
15
+ .idea/
16
+ .vscode/
17
+ *.swp
18
+ *.swo
19
+
20
+ # OS
21
+ .DS_Store
22
+ Thumbs.db
23
+
24
+ # Logs
25
+ *.log
26
+ npm-debug.log*
27
+
28
+ # Environment
29
+ .env
30
+ .env.local
31
+ .env.*.local
32
+
33
+ # Package lock files
34
+ # Note: package-lock.json is committed for CI (npm ci requires it)
35
+
36
+ # Python
37
+ *.egg
38
+ *.egg-info/
39
+ .eggs/
40
+ *.so
41
+ .Python
42
+ develop-eggs/
43
+ downloads/
44
+ eggs/
45
+ lib/
46
+ lib64/
47
+ parts/
48
+ sdist/
49
+ var/
50
+ wheels/
@@ -0,0 +1,77 @@
1
+ Metadata-Version: 2.4
2
+ Name: clevercx-security-master-types
3
+ Version: 0.1.0
4
+ Summary: Python type definitions for CleverCX Security Master database entities
5
+ Project-URL: Homepage, https://github.com/clevercx/level-api
6
+ Project-URL: Repository, https://github.com/clevercx/level-api.git
7
+ Author-email: CleverCX <dev@clevercx.com>
8
+ License-Expression: MIT
9
+ Keywords: clevercx,database,security-master,types
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Typing :: Typed
18
+ Requires-Python: >=3.10
19
+ Provides-Extra: dev
20
+ Requires-Dist: psycopg2-binary>=2.9.0; extra == 'dev'
21
+ Requires-Dist: sqlacodegen>=3.2.0; extra == 'dev'
22
+ Description-Content-Type: text/markdown
23
+
24
+ # clevercx-security-master-types
25
+
26
+ Python type definitions for CleverCX Security Master database entities.
27
+
28
+ **Generated from**: PostgreSQL database via `sqlacodegen`
29
+
30
+ ## Installation
31
+
32
+ ```bash
33
+ pip install clevercx-security-master-types
34
+ ```
35
+
36
+ ## Usage
37
+
38
+ ```python
39
+ from clevercx_security_master_types import (
40
+ Security,
41
+ SecurityHistoricalPrice,
42
+ SecurityCalculation,
43
+ SecurityReferenceVersion,
44
+ SecurityMetadataVersion,
45
+ SecuritySettingsVersion,
46
+ SecurityComposition,
47
+ VSecuritiesCurrent,
48
+ )
49
+
50
+ # Use with your database queries
51
+ def get_security(row: dict) -> Security:
52
+ return Security(**row)
53
+ ```
54
+
55
+ ## Available Types
56
+
57
+ - `Security` - Core security identity
58
+ - `SecurityHistoricalPrice` - Historical price data
59
+ - `SecurityCalculation` - Calculated metrics
60
+ - `SecurityReferenceVersion` - Vendor reference data
61
+ - `SecurityMetadataVersion` - Internal metadata
62
+ - `SecuritySettingsVersion` - Calculation settings
63
+ - `SecurityComposition` - Portfolio composition
64
+ - `SecurityReturn` - Return data
65
+ - `DataSource` - Data source definitions
66
+ - `VSecuritiesCurrent` - Current security view (denormalized)
67
+
68
+ ## Related Packages
69
+
70
+ | Package | Purpose |
71
+ |---------|---------|
72
+ | `@clevercx/security-master-types` (npm) | TypeScript types |
73
+ | `@clevercx/security-master-prisma` (npm) | Prisma schema for querying |
74
+
75
+ ## License
76
+
77
+ MIT
@@ -0,0 +1,54 @@
1
+ # clevercx-security-master-types
2
+
3
+ Python type definitions for CleverCX Security Master database entities.
4
+
5
+ **Generated from**: PostgreSQL database via `sqlacodegen`
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ pip install clevercx-security-master-types
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```python
16
+ from clevercx_security_master_types import (
17
+ Security,
18
+ SecurityHistoricalPrice,
19
+ SecurityCalculation,
20
+ SecurityReferenceVersion,
21
+ SecurityMetadataVersion,
22
+ SecuritySettingsVersion,
23
+ SecurityComposition,
24
+ VSecuritiesCurrent,
25
+ )
26
+
27
+ # Use with your database queries
28
+ def get_security(row: dict) -> Security:
29
+ return Security(**row)
30
+ ```
31
+
32
+ ## Available Types
33
+
34
+ - `Security` - Core security identity
35
+ - `SecurityHistoricalPrice` - Historical price data
36
+ - `SecurityCalculation` - Calculated metrics
37
+ - `SecurityReferenceVersion` - Vendor reference data
38
+ - `SecurityMetadataVersion` - Internal metadata
39
+ - `SecuritySettingsVersion` - Calculation settings
40
+ - `SecurityComposition` - Portfolio composition
41
+ - `SecurityReturn` - Return data
42
+ - `DataSource` - Data source definitions
43
+ - `VSecuritiesCurrent` - Current security view (denormalized)
44
+
45
+ ## Related Packages
46
+
47
+ | Package | Purpose |
48
+ |---------|---------|
49
+ | `@clevercx/security-master-types` (npm) | TypeScript types |
50
+ | `@clevercx/security-master-prisma` (npm) | Prisma schema for querying |
51
+
52
+ ## License
53
+
54
+ MIT
@@ -0,0 +1,44 @@
1
+ # Auto-generated - DO NOT EDIT
2
+ # Generated from PostgreSQL database via sqlacodegen
3
+
4
+ from .models import (
5
+ Security,
6
+ SecurityHistoricalPrice,
7
+ SecurityCalculation,
8
+ SecurityReferenceVersion,
9
+ SecurityMetadataVersion,
10
+ SecuritySettingsVersion,
11
+ SecurityComposition,
12
+ SecurityVersion,
13
+ SecurityReturn,
14
+ DataSource,
15
+ FactsetJobTracking,
16
+ FactsetFailedSecurity,
17
+ VSecuritiesCurrent,
18
+ VSecurityVersionHistory,
19
+ SecurityTypeEnum,
20
+ VersionChangeTypeEnum,
21
+ FactsetJobStatusEnum,
22
+ )
23
+
24
+ __all__ = [
25
+ "Security",
26
+ "SecurityHistoricalPrice",
27
+ "SecurityCalculation",
28
+ "SecurityReferenceVersion",
29
+ "SecurityMetadataVersion",
30
+ "SecuritySettingsVersion",
31
+ "SecurityComposition",
32
+ "SecurityVersion",
33
+ "SecurityReturn",
34
+ "DataSource",
35
+ "FactsetJobTracking",
36
+ "FactsetFailedSecurity",
37
+ "VSecuritiesCurrent",
38
+ "VSecurityVersionHistory",
39
+ "SecurityTypeEnum",
40
+ "VersionChangeTypeEnum",
41
+ "FactsetJobStatusEnum",
42
+ ]
43
+
44
+ __version__ = "0.1.0"
@@ -0,0 +1,419 @@
1
+ """
2
+ clevercx-security-master-types
3
+ Auto-generated Python type definitions for CleverCX Security Master database entities
4
+
5
+ DO NOT EDIT MANUALLY - Generated from PostgreSQL database via sqlacodegen
6
+ """
7
+
8
+ from dataclasses import dataclass, field
9
+ from datetime import datetime
10
+ from decimal import Decimal
11
+ from enum import Enum
12
+ from typing import Any, Dict, List, Optional
13
+
14
+
15
+ # ============================================================
16
+ # ENUMS
17
+ # ============================================================
18
+
19
+ class SecurityTypeEnum(str, Enum):
20
+ """Maps to security_type_enum in PostgreSQL"""
21
+ ETF = "ETF"
22
+ ETN = "ETN"
23
+ ETC = "ETC"
24
+ INDEX = "INDEX"
25
+ MODEL = "MODEL"
26
+ MUTUAL_FUND = "MUTUAL_FUND"
27
+
28
+
29
+ class VersionChangeTypeEnum(str, Enum):
30
+ """Maps to version_change_type in PostgreSQL"""
31
+ CREATED = "CREATED"
32
+ REFERENCE_UPDATE = "REFERENCE_UPDATE"
33
+ METADATA_UPDATE = "METADATA_UPDATE"
34
+ SETTINGS_UPDATE = "SETTINGS_UPDATE"
35
+ BULK_UPDATE = "BULK_UPDATE"
36
+ CORRECTION = "CORRECTION"
37
+ RESTATEMENT = "RESTATEMENT"
38
+ SYSTEM_MIGRATION = "SYSTEM_MIGRATION"
39
+
40
+
41
+ class FactsetJobStatusEnum(str, Enum):
42
+ """Maps to factset_job_status in PostgreSQL"""
43
+ QUEUED = "queued"
44
+ EXECUTING = "executing"
45
+ CREATED = "created"
46
+ SUCCEEDED = "succeeded"
47
+ FAILED = "failed"
48
+ CANCELLED = "cancelled"
49
+
50
+
51
+ # ============================================================
52
+ # CORE ENTITIES
53
+ # ============================================================
54
+
55
+ @dataclass
56
+ class Security:
57
+ """
58
+ Core security identity table.
59
+ Maps to: securities
60
+ """
61
+ security_id: int
62
+ internal_id: str
63
+ created_at: datetime
64
+ ticker: Optional[str] = None
65
+ isin: Optional[str] = None
66
+ cusip: Optional[str] = None
67
+ sedol: Optional[str] = None
68
+ security_type: Optional[SecurityTypeEnum] = None
69
+ authoritative_data_source_id: Optional[int] = None
70
+
71
+
72
+ @dataclass
73
+ class DataSource:
74
+ """
75
+ Master list of data providers.
76
+ Maps to: data_sources
77
+ """
78
+ data_source_id: int
79
+ source_name: str
80
+ source_code: str
81
+ is_active: bool
82
+ created_at: datetime
83
+ updated_at: datetime
84
+ source_type: Optional[str] = None
85
+ description: Optional[str] = None
86
+
87
+
88
+ # ============================================================
89
+ # VERSION TABLES
90
+ # ============================================================
91
+
92
+ @dataclass
93
+ class SecurityReferenceVersion:
94
+ """
95
+ Vendor reference data from FactSet and other providers.
96
+ Maps to: security_reference_versions
97
+ """
98
+ reference_version_id: int
99
+ security_id: int
100
+ internal_id: str
101
+ version_number: int
102
+ is_current: bool
103
+ created_at: datetime
104
+ data_frequencies: List[str] = field(default_factory=lambda: ["DAILY"])
105
+ name: Optional[str] = None
106
+ description: Optional[str] = None
107
+ asset_class_primary: Optional[str] = None
108
+ asset_class_secondary: Optional[str] = None
109
+ asset_class_tertiary: Optional[str] = None
110
+ assets_under_management: Optional[Decimal] = None
111
+ domicile_country_code: Optional[str] = None
112
+ primary_exposure_region: Optional[str] = None
113
+ primary_exposure_country: Optional[str] = None
114
+ trading_currency: Optional[str] = None
115
+ base_currency: Optional[str] = None
116
+ primary_listing_exchange: Optional[str] = None
117
+ status: Optional[str] = None
118
+ inception_date: Optional[datetime] = None
119
+ issuer_company: Optional[str] = None
120
+ asset_manager: Optional[str] = None
121
+ security_url: Optional[str] = None
122
+ data_source_id: Optional[int] = None
123
+ source_updated_at: Optional[datetime] = None
124
+ created_by: Optional[str] = None
125
+ change_reason: Optional[str] = None
126
+
127
+
128
+ @dataclass
129
+ class SecurityMetadataVersion:
130
+ """
131
+ Internal CleverCX metadata.
132
+ Maps to: security_metadata_versions
133
+ """
134
+ metadata_version_id: int
135
+ security_id: int
136
+ internal_id: str
137
+ version_number: int
138
+ is_current: bool
139
+ is_template: bool
140
+ is_company_model: bool
141
+ is_archived: bool
142
+ created_at: datetime
143
+ custom_attributes: Dict[str, Any] = field(default_factory=dict)
144
+ pdf_url: Optional[str] = None
145
+ planning_objective: Optional[str] = None
146
+ creator_id: Optional[str] = None
147
+ risk_type: Optional[str] = None
148
+ index_id: Optional[int] = None
149
+ mongo_id: Optional[str] = None
150
+ created_by: Optional[str] = None
151
+ change_reason: Optional[str] = None
152
+
153
+
154
+ @dataclass
155
+ class SecuritySettingsVersion:
156
+ """
157
+ Calculation configuration.
158
+ Maps to: security_settings_versions
159
+ """
160
+ settings_version_id: int
161
+ security_id: int
162
+ internal_id: str
163
+ version_number: int
164
+ is_current: bool
165
+ created_at: datetime
166
+ calculation_parameters: Dict[str, Any] = field(default_factory=dict)
167
+ data_frequency: Optional[str] = "DAILY"
168
+ stats_loopback_years: Optional[int] = 5
169
+ statistics_window: Optional[int] = None
170
+ risk_free_rate: Optional[Decimal] = None
171
+ created_by: Optional[str] = None
172
+ change_reason: Optional[str] = None
173
+
174
+
175
+ @dataclass
176
+ class SecurityVersion:
177
+ """
178
+ Composite snapshot pointing to all version tables.
179
+ Maps to: security_versions
180
+ """
181
+ security_version_id: int
182
+ security_id: int
183
+ internal_id: str
184
+ version_number: int
185
+ is_current: bool
186
+ reference_version_id: int
187
+ metadata_version_id: int
188
+ settings_version_id: int
189
+ change_type: VersionChangeTypeEnum
190
+ created_at: datetime
191
+ change_summary: Optional[str] = None
192
+ ticker_snapshot: Optional[str] = None
193
+ name_snapshot: Optional[str] = None
194
+ created_by: Optional[str] = None
195
+
196
+
197
+ # ============================================================
198
+ # DATA TABLES
199
+ # ============================================================
200
+
201
+ @dataclass
202
+ class SecurityComposition:
203
+ """
204
+ Portfolio structure and benchmarks.
205
+ Maps to: security_composition
206
+
207
+ composition_type: STRUCTURE (holdings) or BENCHMARK
208
+ """
209
+ composition_id: int
210
+ settings_version_id: int
211
+ composition_type: str # 'STRUCTURE' or 'BENCHMARK'
212
+ constituent_internal_id: str
213
+ weight: Decimal
214
+ position: int = 0
215
+ constituent_security_id: Optional[int] = None
216
+
217
+
218
+ @dataclass
219
+ class SecurityCalculation:
220
+ """
221
+ Point-in-time calculated metrics.
222
+ Maps to: security_calculations
223
+ """
224
+ calculation_id: int
225
+ security_id: int
226
+ internal_id: str
227
+ calculation_date: datetime
228
+ calculated_at: datetime
229
+ extended_metrics: Dict[str, Any] = field(default_factory=dict)
230
+ settings_version_id: Optional[int] = None
231
+ risk_number: Optional[Decimal] = None
232
+ return_value: Optional[Decimal] = None
233
+ risk_score: Optional[Decimal] = None
234
+ sharpe: Optional[Decimal] = None
235
+ sortino: Optional[Decimal] = None
236
+ standard_deviation: Optional[Decimal] = None
237
+ max_drawdown: Optional[Decimal] = None
238
+ cagr: Optional[Decimal] = None
239
+ beta: Optional[Decimal] = None
240
+ alpha: Optional[Decimal] = None
241
+ data_points_used: Optional[int] = None
242
+ calculation_start_date: Optional[datetime] = None
243
+ calculation_end_date: Optional[datetime] = None
244
+
245
+
246
+ @dataclass
247
+ class SecurityHistoricalPrice:
248
+ """
249
+ Historical price data.
250
+ Maps to: security_historical_prices
251
+ """
252
+ price_id: int
253
+ internal_id: str
254
+ data_source_id: int
255
+ price_date: datetime
256
+ is_latest: bool
257
+ ingested_at: datetime
258
+ security_id: Optional[int] = None
259
+ open_price: Optional[Decimal] = None
260
+ high_price: Optional[Decimal] = None
261
+ low_price: Optional[Decimal] = None
262
+ close_price: Optional[Decimal] = None
263
+ adjusted_close_price: Optional[Decimal] = None
264
+ volume: Optional[int] = None
265
+ turnover_value: Optional[Decimal] = None
266
+ dividend_currency: Optional[str] = None
267
+ currency: Optional[str] = None
268
+ price_type: Optional[str] = None
269
+
270
+
271
+ @dataclass
272
+ class SecurityReturn:
273
+ """
274
+ Return data.
275
+ Maps to: security_returns
276
+ """
277
+ return_id: int
278
+ internal_id: str
279
+ data_source_id: int
280
+ return_date: datetime
281
+ return_frequency: str
282
+ return_value_type: str
283
+ ingested_at: datetime
284
+ security_id: Optional[int] = None
285
+ return_value: Optional[Decimal] = None
286
+
287
+
288
+ # ============================================================
289
+ # FACTSET TRACKING
290
+ # ============================================================
291
+
292
+ @dataclass
293
+ class FactsetJobTracking:
294
+ """
295
+ Tracks FactSet batch jobs.
296
+ Maps to: factset_job_tracking
297
+ """
298
+ job_id: str
299
+ status: FactsetJobStatusEnum
300
+ submitted_at: datetime
301
+ created_at: datetime
302
+ updated_at: datetime
303
+ job_name: Optional[str] = None
304
+ securities_count: Optional[int] = None
305
+ records_retrieved: Optional[int] = None
306
+ error_message: Optional[str] = None
307
+ completed_at: Optional[datetime] = None
308
+
309
+
310
+ @dataclass
311
+ class FactsetFailedSecurity:
312
+ """
313
+ Failed security fetches.
314
+ Maps to: factset_failed_securities
315
+ """
316
+ id: int
317
+ failed_at: datetime
318
+ retry_count: int
319
+ resolved: bool
320
+ security_id: Optional[int] = None
321
+ internal_id: Optional[str] = None
322
+ ticker: Optional[str] = None
323
+ security_type: Optional[SecurityTypeEnum] = None
324
+ job_id: Optional[str] = None
325
+ failure_reason: Optional[str] = None
326
+ last_retry_at: Optional[datetime] = None
327
+ resolved_at: Optional[datetime] = None
328
+
329
+
330
+ # ============================================================
331
+ # VIEWS (Denormalized)
332
+ # ============================================================
333
+
334
+ @dataclass
335
+ class VSecuritiesCurrent:
336
+ """
337
+ Current state of all securities (denormalized view).
338
+ Maps to: v_securities_current
339
+ """
340
+ security_id: int
341
+ internal_id: str
342
+ security_created_at: datetime
343
+ ticker: Optional[str] = None
344
+ isin: Optional[str] = None
345
+ cusip: Optional[str] = None
346
+ sedol: Optional[str] = None
347
+ security_type: Optional[str] = None
348
+ authoritative_data_source_id: Optional[int] = None
349
+ data_source_name: Optional[str] = None
350
+ security_version_id: Optional[int] = None
351
+ version_number: Optional[int] = None
352
+ last_change_type: Optional[str] = None
353
+ version_created_at: Optional[datetime] = None
354
+ version_created_by: Optional[str] = None
355
+ name: Optional[str] = None
356
+ description: Optional[str] = None
357
+ asset_class_primary: Optional[str] = None
358
+ asset_class_secondary: Optional[str] = None
359
+ asset_class_tertiary: Optional[str] = None
360
+ assets_under_management: Optional[Decimal] = None
361
+ domicile_country_code: Optional[str] = None
362
+ primary_exposure_region: Optional[str] = None
363
+ primary_exposure_country: Optional[str] = None
364
+ trading_currency: Optional[str] = None
365
+ base_currency: Optional[str] = None
366
+ primary_listing_exchange: Optional[str] = None
367
+ status: Optional[str] = None
368
+ inception_date: Optional[datetime] = None
369
+ issuer_company: Optional[str] = None
370
+ asset_manager: Optional[str] = None
371
+ security_url: Optional[str] = None
372
+ data_frequencies: Optional[List[str]] = None
373
+ pdf_url: Optional[str] = None
374
+ planning_objective: Optional[str] = None
375
+ creator_id: Optional[str] = None
376
+ is_template: Optional[bool] = None
377
+ is_company_model: Optional[bool] = None
378
+ risk_type: Optional[str] = None
379
+ is_archived: Optional[bool] = None
380
+ mongo_id: Optional[str] = None
381
+ custom_attributes: Optional[Dict[str, Any]] = None
382
+ data_frequency: Optional[str] = None
383
+ stats_loopback_years: Optional[int] = None
384
+ statistics_window: Optional[int] = None
385
+ settings_version_id: Optional[int] = None
386
+
387
+
388
+ @dataclass
389
+ class VSecurityVersionHistory:
390
+ """
391
+ Complete version history for audit.
392
+ Maps to: v_security_version_history
393
+ """
394
+ security_id: int
395
+ internal_id: str
396
+ security_version_id: int
397
+ version_number: int
398
+ change_type: str
399
+ is_current: bool
400
+ version_created_at: datetime
401
+ reference_version_id: int
402
+ reference_version: int
403
+ metadata_version_id: int
404
+ metadata_version: int
405
+ settings_version_id: int
406
+ settings_version: int
407
+ ticker: Optional[str] = None
408
+ change_summary: Optional[str] = None
409
+ created_by: Optional[str] = None
410
+ name: Optional[str] = None
411
+ asset_class_primary: Optional[str] = None
412
+ status: Optional[str] = None
413
+ reference_change_reason: Optional[str] = None
414
+ is_archived: Optional[bool] = None
415
+ is_template: Optional[bool] = None
416
+ metadata_change_reason: Optional[str] = None
417
+ data_frequency: Optional[str] = None
418
+ stats_loopback_years: Optional[int] = None
419
+ settings_change_reason: Optional[str] = None
@@ -0,0 +1,38 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "clevercx-security-master-types"
7
+ version = "0.1.0"
8
+ description = "Python type definitions for CleverCX Security Master database entities"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ authors = [
12
+ { name = "CleverCX", email = "dev@clevercx.com" }
13
+ ]
14
+ keywords = ["clevercx", "security-master", "types", "database"]
15
+ classifiers = [
16
+ "Development Status :: 4 - Beta",
17
+ "Intended Audience :: Developers",
18
+ "License :: OSI Approved :: MIT License",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3.10",
21
+ "Programming Language :: Python :: 3.11",
22
+ "Programming Language :: Python :: 3.12",
23
+ "Typing :: Typed",
24
+ ]
25
+ requires-python = ">=3.10"
26
+
27
+ [project.optional-dependencies]
28
+ dev = [
29
+ "sqlacodegen>=3.2.0",
30
+ "psycopg2-binary>=2.9.0",
31
+ ]
32
+
33
+ [project.urls]
34
+ Homepage = "https://github.com/clevercx/level-api"
35
+ Repository = "https://github.com/clevercx/level-api.git"
36
+
37
+ [tool.hatch.build.targets.wheel]
38
+ packages = ["clevercx_security_master_types"]