Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
A
ai-stock-analysis
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ai-solutions
ai-stock-analysis
Commits
c9374873
Commit
c9374873
authored
Aug 13, 2026
by
MD. SHAHIDUL ISLAM
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: introduce opportunity screener pipeline with scoring, repository, and UI integration
parent
338f7a0c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
24 additions
and
0 deletions
+24
-0
app.py
dohasecuritiesstockai/api/app.py
+24
-0
No files found.
dohasecuritiesstockai/api/app.py
View file @
c9374873
...
...
@@ -18,6 +18,12 @@ load_dotenv(_PROJECT_ROOT / ".env", override=False)
from
dohasecuritiesstockai.dataflows.dse
import
normalize_dse_symbol
# noqa: E402
from
dohasecuritiesstockai.default_config
import
DEFAULT_CONFIG
# noqa: E402
from
dohasecuritiesstockai.opportunity_screener.repository
import
(
# noqa: E402
OpportunityRepository
,
)
from
dohasecuritiesstockai.opportunity_screener.schema
import
(
# noqa: E402
OpportunityScanResult
,
)
from
dohasecuritiesstockai.timesfm_forecasting.repository
import
PredictionRepository
# noqa: E402
from
dohasecuritiesstockai.timesfm_forecasting.schema
import
TimesFMPredictionResult
# noqa: E402
...
...
@@ -72,6 +78,7 @@ def create_app() -> FastAPI:
repository
=
AnalysisRepository
(
DEFAULT_CONFIG
[
"results_dir"
])
prediction_repository
=
PredictionRepository
(
DEFAULT_CONFIG
[
"results_dir"
])
opportunity_repository
=
OpportunityRepository
(
DEFAULT_CONFIG
[
"results_dir"
])
service
=
AnalysisService
(
repository
,
max_workers
=
int
(
os
.
environ
.
get
(
"TRADINGAGENTS_API_WORKERS"
,
"1"
)),
...
...
@@ -125,6 +132,23 @@ def create_app() -> FastAPI:
raise
HTTPException
(
status_code
=
404
,
detail
=
"Prediction run not found."
)
return
result
@router.get
(
"/opportunities/latest"
,
response_model
=
OpportunityScanResult
)
def
latest_opportunity_scan
()
->
OpportunityScanResult
:
result
=
opportunity_repository
.
latest
()
if
result
is
None
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"No opportunity scan exists. Run dohasecuritiesstockai-opportunities first."
,
)
return
result
@router.get
(
"/opportunities/{scan_id}"
,
response_model
=
OpportunityScanResult
)
def
opportunity_scan
(
scan_id
:
str
)
->
OpportunityScanResult
:
result
=
opportunity_repository
.
get
(
scan_id
)
if
result
is
None
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"Opportunity scan not found."
)
return
result
@router.post
(
"/analyses"
,
response_model
=
AnalysisJob
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment