fincore-py 0.1.0.dev4__tar.gz → 0.1.0.dev5__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.
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/.github/workflows/ci.yml +5 -1
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/MANIFEST.in +1 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/PKG-INFO +34 -34
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/README.md +23 -7
- fincore_py-0.1.0.dev5/docs/_static/fincore-wordmark.svg +29 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/conf.py +2 -2
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/index.rst +5 -3
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/schemas.rst +1 -1
- fincore_py-0.1.0.dev5/examples/01_data_discovery.py +31 -0
- fincore_py-0.1.0.dev5/examples/02_batch_analytics.py +31 -0
- fincore_py-0.1.0.dev5/examples/03_streaming_metrics.py +27 -0
- fincore_py-0.1.0.dev5/examples/04_external_rows.py +37 -0
- fincore_py-0.1.0.dev5/examples/05_kafka_publish.py +25 -0
- fincore_py-0.1.0.dev5/examples/README.md +31 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/pyproject.toml +24 -5
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/_version.py +2 -2
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore_py.egg-info/PKG-INFO +34 -34
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore_py.egg-info/SOURCES.txt +6 -0
- fincore_py-0.1.0.dev4/docs/_static/fincore-wordmark.svg +0 -14
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/.github/workflows/docs.yml +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/.github/workflows/publish.yml +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/.gitignore +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/Cargo.toml +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/LICENSE +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/_static/brand.css +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/analytics_calculations.rst +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/api.rst +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/brand.rst +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/concepts.rst +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/finance_concepts.rst +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/getting_started.rst +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/docs/streaming.rst +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/__init__.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/analytics/__init__.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/analytics/engine.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/analytics/models.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/analytics/normalize.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/data/__init__.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/data/client.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/data/events.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/data/kafka.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/data/sources.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore/data/utils.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore_py.egg-info/dependency_links.txt +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore_py.egg-info/not-zip-safe +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore_py.egg-info/requires.txt +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore_py.egg-info/top_level.txt +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/requirements-docs.txt +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/requirements-kafka.txt +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/requirements.txt +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/setup.cfg +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/setup.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/src/analytics.rs +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/src/errors.rs +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/src/lib.rs +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/src/models.rs +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/src/pyconvert.rs +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/src/sources.rs +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/tests/conftest.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/tests/test_analytics.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/tests/test_data_client.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/tests/test_events.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/tests/test_utils.py +0 -0
- {fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/tox.ini +0 -0
|
@@ -9,6 +9,7 @@ on:
|
|
|
9
9
|
|
|
10
10
|
permissions:
|
|
11
11
|
contents: read
|
|
12
|
+
id-token: write
|
|
12
13
|
|
|
13
14
|
jobs:
|
|
14
15
|
test:
|
|
@@ -35,9 +36,12 @@ jobs:
|
|
|
35
36
|
PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1"
|
|
36
37
|
|
|
37
38
|
- name: Upload coverage to Codecov
|
|
38
|
-
uses: codecov/codecov-action@
|
|
39
|
+
uses: codecov/codecov-action@v7
|
|
39
40
|
with:
|
|
40
41
|
files: coverage.xml
|
|
42
|
+
flags: python
|
|
43
|
+
name: fincore-python
|
|
44
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
41
45
|
fail_ci_if_error: false
|
|
42
46
|
|
|
43
47
|
- name: Check Rust formatting
|
|
@@ -1,36 +1,20 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fincore-py
|
|
3
|
-
Version: 0.1.0.
|
|
4
|
-
Summary:
|
|
5
|
-
Author:
|
|
6
|
-
License: MIT
|
|
7
|
-
|
|
8
|
-
Copyright (c) 2026 Avinash
|
|
9
|
-
|
|
10
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
-
in the Software without restriction, including without limitation the rights
|
|
13
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
-
furnished to do so, subject to the following conditions:
|
|
16
|
-
|
|
17
|
-
The above copyright notice and this permission notice shall be included in all
|
|
18
|
-
copies or substantial portions of the Software.
|
|
19
|
-
|
|
20
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
-
SOFTWARE.
|
|
27
|
-
|
|
3
|
+
Version: 0.1.0.dev5
|
|
4
|
+
Summary: Event-driven financial data and analytics framework for real-time market infrastructure.
|
|
5
|
+
Author: Avinash Chandra
|
|
6
|
+
License-Expression: MIT
|
|
28
7
|
Project-URL: Documentation, https://avi2413.github.io/fincore/
|
|
29
8
|
Project-URL: Repository, https://github.com/avi2413/fincore
|
|
30
|
-
|
|
31
|
-
|
|
9
|
+
Project-URL: Issues, https://github.com/avi2413/fincore/issues
|
|
10
|
+
Keywords: analytics,event-driven,finance,financial-data,kafka,market-data,metrics,python,quant,real-time,rust,streaming
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
32
14
|
Classifier: Programming Language :: Python :: 3
|
|
33
15
|
Classifier: Programming Language :: Rust
|
|
16
|
+
Classifier: Topic :: Database
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
34
18
|
Classifier: Topic :: Office/Business :: Financial
|
|
35
19
|
Requires-Python: >=3.10
|
|
36
20
|
Description-Content-Type: text/markdown
|
|
@@ -47,12 +31,13 @@ Requires-Dist: tox>=4; extra == "test"
|
|
|
47
31
|
Dynamic: license-file
|
|
48
32
|
|
|
49
33
|
<p align="center">
|
|
50
|
-
<img src="https://raw.githubusercontent.com/avi2413/fincore/main/docs/_static/fincore-wordmark.svg" alt="fincore wordmark" width="
|
|
34
|
+
<img src="https://raw.githubusercontent.com/avi2413/fincore/main/docs/_static/fincore-wordmark.svg" alt="fincore wordmark" width="100%">
|
|
51
35
|
</p>
|
|
52
36
|
|
|
53
37
|
<p align="center">
|
|
54
38
|
<a href="https://pypi.org/project/fincore-py/"><img src="https://img.shields.io/pypi/v/fincore-py.svg?color=111111&label=PyPI" alt="PyPI version"></a>
|
|
55
39
|
<a href="https://pypi.org/project/fincore-py/#history"><img src="https://img.shields.io/badge/PyPI-dev%20builds-7A1E1E" alt="PyPI dev builds"></a>
|
|
40
|
+
<a href="https://pypi.org/project/fincore-py/"><img src="https://img.shields.io/pypi/pyversions/fincore-py.svg?color=111111" alt="Python versions"></a>
|
|
56
41
|
<a href="https://github.com/avi2413/fincore/actions/workflows/ci.yml"><img src="https://github.com/avi2413/fincore/actions/workflows/ci.yml/badge.svg" alt="CI workflow"></a>
|
|
57
42
|
<a href="https://codecov.io/gh/avi2413/fincore"><img src="https://codecov.io/gh/avi2413/fincore/branch/main/graph/badge.svg" alt="Codecov coverage"></a>
|
|
58
43
|
<a href="https://github.com/avi2413/fincore/actions/workflows/publish.yml"><img src="https://github.com/avi2413/fincore/actions/workflows/publish.yml/badge.svg" alt="Publish workflow"></a>
|
|
@@ -63,17 +48,17 @@ Dynamic: license-file
|
|
|
63
48
|
|
|
64
49
|
# fincore
|
|
65
50
|
|
|
66
|
-
`fincore` is
|
|
51
|
+
`fincore` is an event-driven financial data and analytics framework for building real-time market infrastructure.
|
|
67
52
|
|
|
68
|
-
The package is designed for software and data engineers who
|
|
53
|
+
The package is designed for software and data engineers who think in streams, schemas, event envelopes, metrics, and downstream storage. It provides a low-barrier way to build market-data pipelines: resolve `"Apple"` to `AAPL`, fetch or replay bars, emit Kafka-ready events, derive normalized analytics events, and feed those events into notebooks, databases, stream processors, or future inference systems.
|
|
69
54
|
|
|
70
|
-
This is a personal research project and
|
|
55
|
+
This is a personal research project by Avinash Chandra and a beta-stage package. It is not a production-grade market data client, trading system, investment tool, or source of financial advice. Free public data sources can be delayed, incomplete, rate limited, schema-changing, or unavailable.
|
|
71
56
|
|
|
72
57
|
The Python import name is `fincore`. The PyPI distribution name is `fincore-py`.
|
|
73
58
|
|
|
74
59
|
## Current Scope
|
|
75
60
|
|
|
76
|
-
`fincore-py` currently focuses on data access, not trading
|
|
61
|
+
`fincore-py` currently focuses on data access, event streams, and metrics. It does not do trading, order execution, portfolio construction, or investment recommendations.
|
|
77
62
|
|
|
78
63
|
Implemented today:
|
|
79
64
|
|
|
@@ -117,6 +102,7 @@ Rust extension
|
|
|
117
102
|
Yahoo Finance bar fetching
|
|
118
103
|
Nasdaq Trader, ASX, and NSE directory parsing
|
|
119
104
|
FRED yield fetching
|
|
105
|
+
metric calculations
|
|
120
106
|
normalized Python dict conversion
|
|
121
107
|
```
|
|
122
108
|
|
|
@@ -176,6 +162,8 @@ client.search_instruments("apple", limit=5)
|
|
|
176
162
|
client.resolve_symbol("Apple")
|
|
177
163
|
```
|
|
178
164
|
|
|
165
|
+
More complete examples live in [`examples/`](examples/).
|
|
166
|
+
|
|
179
167
|
Choose a market context:
|
|
180
168
|
|
|
181
169
|
```python
|
|
@@ -497,7 +485,7 @@ The docs explain:
|
|
|
497
485
|
- market data concepts for non-finance developers
|
|
498
486
|
- streaming and Kafka concepts
|
|
499
487
|
- the current API surface
|
|
500
|
-
-
|
|
488
|
+
- analytics calculations and metric events
|
|
501
489
|
|
|
502
490
|
Docs are deployed to GitHub Pages from `.github/workflows/docs.yml` on pushes to `main`, version tags, and manual dispatch.
|
|
503
491
|
|
|
@@ -586,6 +574,18 @@ async for metric_event in engine.run(client.stream_bars(["Apple"], interval="1m"
|
|
|
586
574
|
|
|
587
575
|
Python package versions are derived from git tags through `setuptools-scm`.
|
|
588
576
|
|
|
577
|
+
Install the latest beta/dev package from PyPI:
|
|
578
|
+
|
|
579
|
+
```bash
|
|
580
|
+
python -m pip install fincore-py
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
Kafka extras:
|
|
584
|
+
|
|
585
|
+
```bash
|
|
586
|
+
python -m pip install "fincore-py[kafka]"
|
|
587
|
+
```
|
|
588
|
+
|
|
589
589
|
For a beta pre-release:
|
|
590
590
|
|
|
591
591
|
```bash
|
|
@@ -609,4 +609,4 @@ Environment: pypi
|
|
|
609
609
|
|
|
610
610
|
## Status
|
|
611
611
|
|
|
612
|
-
|
|
612
|
+
Beta implementation stage. The data client is usable for discovery, historical bars, yield series, replay streams, polling streams, and Kafka publishing for personal research and prototyping. The analytics layer emits normalized metric events for batch and streaming workflows.
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://raw.githubusercontent.com/avi2413/fincore/main/docs/_static/fincore-wordmark.svg" alt="fincore wordmark" width="
|
|
2
|
+
<img src="https://raw.githubusercontent.com/avi2413/fincore/main/docs/_static/fincore-wordmark.svg" alt="fincore wordmark" width="100%">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<a href="https://pypi.org/project/fincore-py/"><img src="https://img.shields.io/pypi/v/fincore-py.svg?color=111111&label=PyPI" alt="PyPI version"></a>
|
|
7
7
|
<a href="https://pypi.org/project/fincore-py/#history"><img src="https://img.shields.io/badge/PyPI-dev%20builds-7A1E1E" alt="PyPI dev builds"></a>
|
|
8
|
+
<a href="https://pypi.org/project/fincore-py/"><img src="https://img.shields.io/pypi/pyversions/fincore-py.svg?color=111111" alt="Python versions"></a>
|
|
8
9
|
<a href="https://github.com/avi2413/fincore/actions/workflows/ci.yml"><img src="https://github.com/avi2413/fincore/actions/workflows/ci.yml/badge.svg" alt="CI workflow"></a>
|
|
9
10
|
<a href="https://codecov.io/gh/avi2413/fincore"><img src="https://codecov.io/gh/avi2413/fincore/branch/main/graph/badge.svg" alt="Codecov coverage"></a>
|
|
10
11
|
<a href="https://github.com/avi2413/fincore/actions/workflows/publish.yml"><img src="https://github.com/avi2413/fincore/actions/workflows/publish.yml/badge.svg" alt="Publish workflow"></a>
|
|
@@ -15,17 +16,17 @@
|
|
|
15
16
|
|
|
16
17
|
# fincore
|
|
17
18
|
|
|
18
|
-
`fincore` is
|
|
19
|
+
`fincore` is an event-driven financial data and analytics framework for building real-time market infrastructure.
|
|
19
20
|
|
|
20
|
-
The package is designed for software and data engineers who
|
|
21
|
+
The package is designed for software and data engineers who think in streams, schemas, event envelopes, metrics, and downstream storage. It provides a low-barrier way to build market-data pipelines: resolve `"Apple"` to `AAPL`, fetch or replay bars, emit Kafka-ready events, derive normalized analytics events, and feed those events into notebooks, databases, stream processors, or future inference systems.
|
|
21
22
|
|
|
22
|
-
This is a personal research project and
|
|
23
|
+
This is a personal research project by Avinash Chandra and a beta-stage package. It is not a production-grade market data client, trading system, investment tool, or source of financial advice. Free public data sources can be delayed, incomplete, rate limited, schema-changing, or unavailable.
|
|
23
24
|
|
|
24
25
|
The Python import name is `fincore`. The PyPI distribution name is `fincore-py`.
|
|
25
26
|
|
|
26
27
|
## Current Scope
|
|
27
28
|
|
|
28
|
-
`fincore-py` currently focuses on data access, not trading
|
|
29
|
+
`fincore-py` currently focuses on data access, event streams, and metrics. It does not do trading, order execution, portfolio construction, or investment recommendations.
|
|
29
30
|
|
|
30
31
|
Implemented today:
|
|
31
32
|
|
|
@@ -69,6 +70,7 @@ Rust extension
|
|
|
69
70
|
Yahoo Finance bar fetching
|
|
70
71
|
Nasdaq Trader, ASX, and NSE directory parsing
|
|
71
72
|
FRED yield fetching
|
|
73
|
+
metric calculations
|
|
72
74
|
normalized Python dict conversion
|
|
73
75
|
```
|
|
74
76
|
|
|
@@ -128,6 +130,8 @@ client.search_instruments("apple", limit=5)
|
|
|
128
130
|
client.resolve_symbol("Apple")
|
|
129
131
|
```
|
|
130
132
|
|
|
133
|
+
More complete examples live in [`examples/`](examples/).
|
|
134
|
+
|
|
131
135
|
Choose a market context:
|
|
132
136
|
|
|
133
137
|
```python
|
|
@@ -449,7 +453,7 @@ The docs explain:
|
|
|
449
453
|
- market data concepts for non-finance developers
|
|
450
454
|
- streaming and Kafka concepts
|
|
451
455
|
- the current API surface
|
|
452
|
-
-
|
|
456
|
+
- analytics calculations and metric events
|
|
453
457
|
|
|
454
458
|
Docs are deployed to GitHub Pages from `.github/workflows/docs.yml` on pushes to `main`, version tags, and manual dispatch.
|
|
455
459
|
|
|
@@ -538,6 +542,18 @@ async for metric_event in engine.run(client.stream_bars(["Apple"], interval="1m"
|
|
|
538
542
|
|
|
539
543
|
Python package versions are derived from git tags through `setuptools-scm`.
|
|
540
544
|
|
|
545
|
+
Install the latest beta/dev package from PyPI:
|
|
546
|
+
|
|
547
|
+
```bash
|
|
548
|
+
python -m pip install fincore-py
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
Kafka extras:
|
|
552
|
+
|
|
553
|
+
```bash
|
|
554
|
+
python -m pip install "fincore-py[kafka]"
|
|
555
|
+
```
|
|
556
|
+
|
|
541
557
|
For a beta pre-release:
|
|
542
558
|
|
|
543
559
|
```bash
|
|
@@ -561,4 +577,4 @@ Environment: pypi
|
|
|
561
577
|
|
|
562
578
|
## Status
|
|
563
579
|
|
|
564
|
-
|
|
580
|
+
Beta implementation stage. The data client is usable for discovery, historical bars, yield series, replay streams, polling streams, and Kafka publishing for personal research and prototyping. The analytics layer emits normalized metric events for batch and streaming workflows.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="300" viewBox="0 0 1440 300" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">fincore wordmark</title>
|
|
3
|
+
<desc id="desc">Noir brutalist fincore wordmark showing event streams, normalized data, and analytics signals.</desc>
|
|
4
|
+
<rect width="1440" height="300" fill="#0B0B0B"/>
|
|
5
|
+
<path d="M0 246H1440" stroke="#191919" stroke-width="2"/>
|
|
6
|
+
<path d="M0 68H1440" stroke="#151515" stroke-width="2"/>
|
|
7
|
+
<g transform="translate(82 70)">
|
|
8
|
+
<rect x="0" y="0" width="160" height="160" fill="none" stroke="#D9D2C3" stroke-width="3"/>
|
|
9
|
+
<path d="M24 40H66M94 40H136M24 80H52M80 80H136M24 120H70M98 120H136" stroke="#6F6A61" stroke-width="5" stroke-linecap="square"/>
|
|
10
|
+
<circle cx="76" cy="40" r="8" fill="#8F1D1D"/>
|
|
11
|
+
<circle cx="66" cy="80" r="8" fill="#D9D2C3"/>
|
|
12
|
+
<circle cx="84" cy="120" r="8" fill="#8F1D1D"/>
|
|
13
|
+
<path d="M32 136L58 108L82 116L112 72L132 88" fill="none" stroke="#D9D2C3" stroke-width="4" stroke-linecap="square" stroke-linejoin="miter"/>
|
|
14
|
+
<path d="M32 136L58 108L82 116L112 72L132 88" fill="none" stroke="#8F1D1D" stroke-width="2" stroke-linecap="square" stroke-linejoin="miter"/>
|
|
15
|
+
</g>
|
|
16
|
+
<text x="282" y="144" fill="#EFE8D8" font-family="'Arial Narrow', 'Helvetica Neue Condensed Bold', 'Roboto Condensed', Arial, sans-serif" font-size="102" font-weight="800" letter-spacing="10">FINCORE</text>
|
|
17
|
+
<path d="M286 166H934" stroke="#8F1D1D" stroke-width="5"/>
|
|
18
|
+
<text x="288" y="212" fill="#A8A096" font-family="'Arial Narrow', 'Roboto Condensed', Arial, sans-serif" font-size="28" font-weight="700" letter-spacing="5">EVENT-DRIVEN DATA + ANALYTICS INFRASTRUCTURE</text>
|
|
19
|
+
<g transform="translate(1058 86)" stroke-linecap="square">
|
|
20
|
+
<path d="M0 32H245" stroke="#2A2A2A" stroke-width="3"/>
|
|
21
|
+
<path d="M0 76H245" stroke="#2A2A2A" stroke-width="3"/>
|
|
22
|
+
<path d="M0 120H245" stroke="#2A2A2A" stroke-width="3"/>
|
|
23
|
+
<path d="M22 32H66L94 76H146L174 120H226" stroke="#8F1D1D" stroke-width="5" fill="none"/>
|
|
24
|
+
<path d="M22 120H70L102 76H150L182 32H226" stroke="#D9D2C3" stroke-width="4" fill="none"/>
|
|
25
|
+
<circle cx="94" cy="76" r="7" fill="#D9D2C3"/>
|
|
26
|
+
<circle cx="174" cy="120" r="7" fill="#8F1D1D"/>
|
|
27
|
+
<circle cx="182" cy="32" r="7" fill="#D9D2C3"/>
|
|
28
|
+
</g>
|
|
29
|
+
</svg>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
fincore-py documentation
|
|
2
2
|
========================
|
|
3
3
|
|
|
4
|
-
``fincore-py`` is
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
``fincore-py`` is an event-driven financial data and analytics framework for
|
|
5
|
+
building real-time market infrastructure. It is designed for engineers who
|
|
6
|
+
understand data systems, streams, schemas, and downstream storage, but may not
|
|
7
|
+
yet know market conventions or financial terminology.
|
|
7
8
|
|
|
8
9
|
The package imports as ``fincore`` and currently focuses on:
|
|
9
10
|
|
|
@@ -14,6 +15,7 @@ The package imports as ``fincore`` and currently focuses on:
|
|
|
14
15
|
* historical replay streams
|
|
15
16
|
* delayed polling streams for latest bars
|
|
16
17
|
* Kafka-ready event envelopes
|
|
18
|
+
* normalized analytics metric events
|
|
17
19
|
|
|
18
20
|
.. toctree::
|
|
19
21
|
:maxdepth: 2
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Discover instruments and fetch normalized data."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from fincore.data import DataClient
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def main() -> None:
|
|
9
|
+
client = DataClient(market="US")
|
|
10
|
+
print("US matches for Apple:")
|
|
11
|
+
print(client.search_instruments("apple", limit=3))
|
|
12
|
+
|
|
13
|
+
au = DataClient(market="AU")
|
|
14
|
+
print("Australia matches for BHP:")
|
|
15
|
+
print(au.search_instruments("bhp", limit=3))
|
|
16
|
+
|
|
17
|
+
india = DataClient(market="IN")
|
|
18
|
+
print("India matches for Reliance:")
|
|
19
|
+
print(india.search_instruments("reliance", limit=3))
|
|
20
|
+
|
|
21
|
+
print("Daily Apple bars:")
|
|
22
|
+
bars = client.fetch_bars("Apple", "2024-01-01", "2024-01-10", interval="1d")
|
|
23
|
+
print(bars[:2])
|
|
24
|
+
|
|
25
|
+
print("US 10Y Treasury yield observations:")
|
|
26
|
+
yields = client.fetch_bond_yields("10 year treasury", start="2024-01-01", end="2024-01-10")
|
|
27
|
+
print(yields[:2])
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
if __name__ == "__main__":
|
|
31
|
+
main()
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Compute batch analytics from historical bars."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from fincore.analytics import MetricEngine, MetricSpec
|
|
6
|
+
from fincore.data import DataClient
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def main() -> None:
|
|
10
|
+
client = DataClient()
|
|
11
|
+
bars = client.fetch_bars("Apple", "2024-01-01", "2024-02-15", interval="1d")
|
|
12
|
+
|
|
13
|
+
engine = MetricEngine()
|
|
14
|
+
metric_events = engine.compute(
|
|
15
|
+
bars,
|
|
16
|
+
metrics=[
|
|
17
|
+
"return.simple",
|
|
18
|
+
"return.log",
|
|
19
|
+
MetricSpec("momentum.roc", window=3),
|
|
20
|
+
MetricSpec("volatility.rolling", window=5),
|
|
21
|
+
MetricSpec("drawdown.current"),
|
|
22
|
+
MetricSpec("auc.window", window=5),
|
|
23
|
+
],
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
for event in metric_events[:10]:
|
|
27
|
+
print(event)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
if __name__ == "__main__":
|
|
31
|
+
main()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""Replay historical bars and derive metrics on the fly."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
|
|
7
|
+
from fincore.analytics import MetricEngine, MetricSpec
|
|
8
|
+
from fincore.data import DataClient
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
async def main() -> None:
|
|
12
|
+
client = DataClient()
|
|
13
|
+
engine = MetricEngine(
|
|
14
|
+
metrics=[
|
|
15
|
+
"return.simple",
|
|
16
|
+
MetricSpec("momentum.roc", window=3),
|
|
17
|
+
MetricSpec("volatility.rolling", window=5),
|
|
18
|
+
]
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
async for event in client.replay_bars("Apple", "2024-01-01", "2024-01-31", interval="1d"):
|
|
22
|
+
for metric_event in engine.update(event):
|
|
23
|
+
print(metric_event)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
if __name__ == "__main__":
|
|
27
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""Compute metrics from external database-style rows."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from fincore.analytics import MetricEngine, MetricSpec
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def main() -> None:
|
|
9
|
+
db_rows = [
|
|
10
|
+
{"ticker": "aapl", "ts": "2024-01-01T00:00:00+00:00", "close_price": 100.0, "share_volume": 1000},
|
|
11
|
+
{"ticker": "aapl", "ts": "2024-01-02T00:00:00+00:00", "close_price": 104.0, "share_volume": 1100},
|
|
12
|
+
{"ticker": "aapl", "ts": "2024-01-03T00:00:00+00:00", "close_price": 102.0, "share_volume": 1200},
|
|
13
|
+
{"ticker": "aapl", "ts": "2024-01-04T00:00:00+00:00", "close_price": 108.0, "share_volume": 1300},
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
engine = MetricEngine()
|
|
17
|
+
events = engine.compute(
|
|
18
|
+
db_rows,
|
|
19
|
+
metrics=[
|
|
20
|
+
"return.simple",
|
|
21
|
+
MetricSpec("momentum.acceleration"),
|
|
22
|
+
MetricSpec("auc.window", window=3),
|
|
23
|
+
],
|
|
24
|
+
field_map={
|
|
25
|
+
"symbol": "ticker",
|
|
26
|
+
"event_time": "ts",
|
|
27
|
+
"close": "close_price",
|
|
28
|
+
"volume": "share_volume",
|
|
29
|
+
},
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
for event in events:
|
|
33
|
+
print(event)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
if __name__ == "__main__":
|
|
37
|
+
main()
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Publish fincore stream events to Kafka."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
|
|
7
|
+
from fincore.data import DataClient
|
|
8
|
+
from fincore.data.kafka import KafkaSink
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
async def main() -> None:
|
|
12
|
+
client = DataClient()
|
|
13
|
+
sink = KafkaSink(
|
|
14
|
+
bootstrap_servers="localhost:9092",
|
|
15
|
+
topic="fincore.market.bars",
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
count = await sink.publish_stream(
|
|
19
|
+
client.replay_bars("Apple", "2024-01-01", "2024-01-05", interval="1d")
|
|
20
|
+
)
|
|
21
|
+
print(f"published {count} events")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if __name__ == "__main__":
|
|
25
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# fincore examples
|
|
2
|
+
|
|
3
|
+
These examples are small scripts showing the current beta surface.
|
|
4
|
+
|
|
5
|
+
Run them after installing the package:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
python -m pip install fincore-py
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
For local development:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
python -m pip install -e .
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Kafka examples require the optional extra:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
python -m pip install "fincore-py[kafka]"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Examples:
|
|
24
|
+
|
|
25
|
+
- `01_data_discovery.py`: market contexts, fuzzy symbol resolution, bars, and bond yields
|
|
26
|
+
- `02_batch_analytics.py`: batch metric events from historical bars
|
|
27
|
+
- `03_streaming_metrics.py`: historical replay plus on-the-fly metrics
|
|
28
|
+
- `04_external_rows.py`: analytics from database-style rows with a field map
|
|
29
|
+
- `05_kafka_publish.py`: publishing replay events to Kafka
|
|
30
|
+
|
|
31
|
+
The examples use free public sources, so live fetches can fail or return empty results when an upstream source is unavailable, rate-limited, or outside its retention window.
|
|
@@ -10,18 +10,36 @@ build-backend = "setuptools.build_meta"
|
|
|
10
10
|
[project]
|
|
11
11
|
name = "fincore-py"
|
|
12
12
|
dynamic = ["version"]
|
|
13
|
-
description = "
|
|
13
|
+
description = "Event-driven financial data and analytics framework for real-time market infrastructure."
|
|
14
14
|
readme = "README.md"
|
|
15
15
|
requires-python = ">=3.10"
|
|
16
|
-
license =
|
|
16
|
+
license = "MIT"
|
|
17
|
+
license-files = ["LICENSE"]
|
|
17
18
|
authors = [
|
|
18
|
-
{ name = "
|
|
19
|
+
{ name = "Avinash Chandra" }
|
|
20
|
+
]
|
|
21
|
+
keywords = [
|
|
22
|
+
"analytics",
|
|
23
|
+
"event-driven",
|
|
24
|
+
"finance",
|
|
25
|
+
"financial-data",
|
|
26
|
+
"kafka",
|
|
27
|
+
"market-data",
|
|
28
|
+
"metrics",
|
|
29
|
+
"python",
|
|
30
|
+
"quant",
|
|
31
|
+
"real-time",
|
|
32
|
+
"rust",
|
|
33
|
+
"streaming",
|
|
19
34
|
]
|
|
20
|
-
keywords = ["finance", "market-data", "rust", "python"]
|
|
21
35
|
classifiers = [
|
|
22
|
-
"Development Status ::
|
|
36
|
+
"Development Status :: 4 - Beta",
|
|
37
|
+
"Intended Audience :: Developers",
|
|
38
|
+
"Intended Audience :: Financial and Insurance Industry",
|
|
23
39
|
"Programming Language :: Python :: 3",
|
|
24
40
|
"Programming Language :: Rust",
|
|
41
|
+
"Topic :: Database",
|
|
42
|
+
"Topic :: Scientific/Engineering :: Information Analysis",
|
|
25
43
|
"Topic :: Office/Business :: Financial",
|
|
26
44
|
]
|
|
27
45
|
|
|
@@ -42,6 +60,7 @@ test = [
|
|
|
42
60
|
[project.urls]
|
|
43
61
|
Documentation = "https://avi2413.github.io/fincore/"
|
|
44
62
|
Repository = "https://github.com/avi2413/fincore"
|
|
63
|
+
Issues = "https://github.com/avi2413/fincore/issues"
|
|
45
64
|
|
|
46
65
|
[tool.setuptools]
|
|
47
66
|
package-dir = { "" = "python" }
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.1.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 1, 0, '
|
|
21
|
+
__version__ = version = '0.1.0.dev5'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 0, 'dev5')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1,36 +1,20 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fincore-py
|
|
3
|
-
Version: 0.1.0.
|
|
4
|
-
Summary:
|
|
5
|
-
Author:
|
|
6
|
-
License: MIT
|
|
7
|
-
|
|
8
|
-
Copyright (c) 2026 Avinash
|
|
9
|
-
|
|
10
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
-
in the Software without restriction, including without limitation the rights
|
|
13
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
-
furnished to do so, subject to the following conditions:
|
|
16
|
-
|
|
17
|
-
The above copyright notice and this permission notice shall be included in all
|
|
18
|
-
copies or substantial portions of the Software.
|
|
19
|
-
|
|
20
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
-
SOFTWARE.
|
|
27
|
-
|
|
3
|
+
Version: 0.1.0.dev5
|
|
4
|
+
Summary: Event-driven financial data and analytics framework for real-time market infrastructure.
|
|
5
|
+
Author: Avinash Chandra
|
|
6
|
+
License-Expression: MIT
|
|
28
7
|
Project-URL: Documentation, https://avi2413.github.io/fincore/
|
|
29
8
|
Project-URL: Repository, https://github.com/avi2413/fincore
|
|
30
|
-
|
|
31
|
-
|
|
9
|
+
Project-URL: Issues, https://github.com/avi2413/fincore/issues
|
|
10
|
+
Keywords: analytics,event-driven,finance,financial-data,kafka,market-data,metrics,python,quant,real-time,rust,streaming
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
32
14
|
Classifier: Programming Language :: Python :: 3
|
|
33
15
|
Classifier: Programming Language :: Rust
|
|
16
|
+
Classifier: Topic :: Database
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
34
18
|
Classifier: Topic :: Office/Business :: Financial
|
|
35
19
|
Requires-Python: >=3.10
|
|
36
20
|
Description-Content-Type: text/markdown
|
|
@@ -47,12 +31,13 @@ Requires-Dist: tox>=4; extra == "test"
|
|
|
47
31
|
Dynamic: license-file
|
|
48
32
|
|
|
49
33
|
<p align="center">
|
|
50
|
-
<img src="https://raw.githubusercontent.com/avi2413/fincore/main/docs/_static/fincore-wordmark.svg" alt="fincore wordmark" width="
|
|
34
|
+
<img src="https://raw.githubusercontent.com/avi2413/fincore/main/docs/_static/fincore-wordmark.svg" alt="fincore wordmark" width="100%">
|
|
51
35
|
</p>
|
|
52
36
|
|
|
53
37
|
<p align="center">
|
|
54
38
|
<a href="https://pypi.org/project/fincore-py/"><img src="https://img.shields.io/pypi/v/fincore-py.svg?color=111111&label=PyPI" alt="PyPI version"></a>
|
|
55
39
|
<a href="https://pypi.org/project/fincore-py/#history"><img src="https://img.shields.io/badge/PyPI-dev%20builds-7A1E1E" alt="PyPI dev builds"></a>
|
|
40
|
+
<a href="https://pypi.org/project/fincore-py/"><img src="https://img.shields.io/pypi/pyversions/fincore-py.svg?color=111111" alt="Python versions"></a>
|
|
56
41
|
<a href="https://github.com/avi2413/fincore/actions/workflows/ci.yml"><img src="https://github.com/avi2413/fincore/actions/workflows/ci.yml/badge.svg" alt="CI workflow"></a>
|
|
57
42
|
<a href="https://codecov.io/gh/avi2413/fincore"><img src="https://codecov.io/gh/avi2413/fincore/branch/main/graph/badge.svg" alt="Codecov coverage"></a>
|
|
58
43
|
<a href="https://github.com/avi2413/fincore/actions/workflows/publish.yml"><img src="https://github.com/avi2413/fincore/actions/workflows/publish.yml/badge.svg" alt="Publish workflow"></a>
|
|
@@ -63,17 +48,17 @@ Dynamic: license-file
|
|
|
63
48
|
|
|
64
49
|
# fincore
|
|
65
50
|
|
|
66
|
-
`fincore` is
|
|
51
|
+
`fincore` is an event-driven financial data and analytics framework for building real-time market infrastructure.
|
|
67
52
|
|
|
68
|
-
The package is designed for software and data engineers who
|
|
53
|
+
The package is designed for software and data engineers who think in streams, schemas, event envelopes, metrics, and downstream storage. It provides a low-barrier way to build market-data pipelines: resolve `"Apple"` to `AAPL`, fetch or replay bars, emit Kafka-ready events, derive normalized analytics events, and feed those events into notebooks, databases, stream processors, or future inference systems.
|
|
69
54
|
|
|
70
|
-
This is a personal research project and
|
|
55
|
+
This is a personal research project by Avinash Chandra and a beta-stage package. It is not a production-grade market data client, trading system, investment tool, or source of financial advice. Free public data sources can be delayed, incomplete, rate limited, schema-changing, or unavailable.
|
|
71
56
|
|
|
72
57
|
The Python import name is `fincore`. The PyPI distribution name is `fincore-py`.
|
|
73
58
|
|
|
74
59
|
## Current Scope
|
|
75
60
|
|
|
76
|
-
`fincore-py` currently focuses on data access, not trading
|
|
61
|
+
`fincore-py` currently focuses on data access, event streams, and metrics. It does not do trading, order execution, portfolio construction, or investment recommendations.
|
|
77
62
|
|
|
78
63
|
Implemented today:
|
|
79
64
|
|
|
@@ -117,6 +102,7 @@ Rust extension
|
|
|
117
102
|
Yahoo Finance bar fetching
|
|
118
103
|
Nasdaq Trader, ASX, and NSE directory parsing
|
|
119
104
|
FRED yield fetching
|
|
105
|
+
metric calculations
|
|
120
106
|
normalized Python dict conversion
|
|
121
107
|
```
|
|
122
108
|
|
|
@@ -176,6 +162,8 @@ client.search_instruments("apple", limit=5)
|
|
|
176
162
|
client.resolve_symbol("Apple")
|
|
177
163
|
```
|
|
178
164
|
|
|
165
|
+
More complete examples live in [`examples/`](examples/).
|
|
166
|
+
|
|
179
167
|
Choose a market context:
|
|
180
168
|
|
|
181
169
|
```python
|
|
@@ -497,7 +485,7 @@ The docs explain:
|
|
|
497
485
|
- market data concepts for non-finance developers
|
|
498
486
|
- streaming and Kafka concepts
|
|
499
487
|
- the current API surface
|
|
500
|
-
-
|
|
488
|
+
- analytics calculations and metric events
|
|
501
489
|
|
|
502
490
|
Docs are deployed to GitHub Pages from `.github/workflows/docs.yml` on pushes to `main`, version tags, and manual dispatch.
|
|
503
491
|
|
|
@@ -586,6 +574,18 @@ async for metric_event in engine.run(client.stream_bars(["Apple"], interval="1m"
|
|
|
586
574
|
|
|
587
575
|
Python package versions are derived from git tags through `setuptools-scm`.
|
|
588
576
|
|
|
577
|
+
Install the latest beta/dev package from PyPI:
|
|
578
|
+
|
|
579
|
+
```bash
|
|
580
|
+
python -m pip install fincore-py
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
Kafka extras:
|
|
584
|
+
|
|
585
|
+
```bash
|
|
586
|
+
python -m pip install "fincore-py[kafka]"
|
|
587
|
+
```
|
|
588
|
+
|
|
589
589
|
For a beta pre-release:
|
|
590
590
|
|
|
591
591
|
```bash
|
|
@@ -609,4 +609,4 @@ Environment: pypi
|
|
|
609
609
|
|
|
610
610
|
## Status
|
|
611
611
|
|
|
612
|
-
|
|
612
|
+
Beta implementation stage. The data client is usable for discovery, historical bars, yield series, replay streams, polling streams, and Kafka publishing for personal research and prototyping. The analytics layer emits normalized metric events for batch and streaming workflows.
|
|
@@ -24,6 +24,12 @@ docs/schemas.rst
|
|
|
24
24
|
docs/streaming.rst
|
|
25
25
|
docs/_static/brand.css
|
|
26
26
|
docs/_static/fincore-wordmark.svg
|
|
27
|
+
examples/01_data_discovery.py
|
|
28
|
+
examples/02_batch_analytics.py
|
|
29
|
+
examples/03_streaming_metrics.py
|
|
30
|
+
examples/04_external_rows.py
|
|
31
|
+
examples/05_kafka_publish.py
|
|
32
|
+
examples/README.md
|
|
27
33
|
python/fincore/__init__.py
|
|
28
34
|
python/fincore/_version.py
|
|
29
35
|
python/fincore/analytics/__init__.py
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="820" height="180" viewBox="0 0 820 180" role="img" aria-labelledby="title desc">
|
|
2
|
-
<title id="title">fincore wordmark</title>
|
|
3
|
-
<desc id="desc">Lean noir brutalist fincore wordmark with a restrained market signal mark.</desc>
|
|
4
|
-
<rect width="820" height="180" fill="#0D0D0D"/>
|
|
5
|
-
<g transform="translate(52 48)">
|
|
6
|
-
<rect x="0" y="0" width="84" height="84" fill="none" stroke="#B8B2A4" stroke-width="2"/>
|
|
7
|
-
<path d="M16 56 H31 L42 42 L53 48 L68 25" fill="none" stroke="#7A1E1E" stroke-width="4" stroke-linecap="square" stroke-linejoin="miter"/>
|
|
8
|
-
<path d="M16 68 H68" stroke="#2A2A2A" stroke-width="2"/>
|
|
9
|
-
<path d="M16 16 V68" stroke="#2A2A2A" stroke-width="2"/>
|
|
10
|
-
</g>
|
|
11
|
-
<text x="164" y="96" fill="#E7E0D0" font-family="'Arial Narrow', 'Helvetica Neue Condensed Bold', 'Roboto Condensed', Arial, sans-serif" font-size="58" font-weight="700" letter-spacing="6">FINCORE</text>
|
|
12
|
-
<path d="M166 111 H474" stroke="#7A1E1E" stroke-width="3"/>
|
|
13
|
-
<text x="166" y="139" fill="#8F8A80" font-family="'Arial Narrow', 'Roboto Condensed', Arial, sans-serif" font-size="17" letter-spacing="4">MARKET DATA INFRASTRUCTURE</text>
|
|
14
|
-
</svg>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fincore_py-0.1.0.dev4 → fincore_py-0.1.0.dev5}/python/fincore_py.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|