fds.sdk.ProposalGenerationEngine 0.1.0__py3-none-any.whl
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.
- fds/__init__.py +0 -0
- fds/sdk/ProposalGenerationEngine/__init__.py +28 -0
- fds/sdk/ProposalGenerationEngine/api/__init__.py +3 -0
- fds/sdk/ProposalGenerationEngine/api/ex_post_api.py +1451 -0
- fds/sdk/ProposalGenerationEngine/api/lookup_api.py +333 -0
- fds/sdk/ProposalGenerationEngine/api_client.py +939 -0
- fds/sdk/ProposalGenerationEngine/apis/__init__.py +18 -0
- fds/sdk/ProposalGenerationEngine/configuration.py +500 -0
- fds/sdk/ProposalGenerationEngine/exceptions.py +160 -0
- fds/sdk/ProposalGenerationEngine/model/__init__.py +5 -0
- fds/sdk/ProposalGenerationEngine/model/array.py +279 -0
- fds/sdk/ProposalGenerationEngine/model/backfill_data.py +264 -0
- fds/sdk/ProposalGenerationEngine/model/base_settings.py +264 -0
- fds/sdk/ProposalGenerationEngine/model/boxplot.py +266 -0
- fds/sdk/ProposalGenerationEngine/model/boxplot_boxplot_summary.py +284 -0
- fds/sdk/ProposalGenerationEngine/model/cl_pair.py +252 -0
- fds/sdk/ProposalGenerationEngine/model/correlation_matrix.py +260 -0
- fds/sdk/ProposalGenerationEngine/model/correlation_stats.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/dated_correlation_stats.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/dated_correlation_stats_per_time_window.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/dated_node_stats.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/drawdown.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/drawdown_stats.py +290 -0
- fds/sdk/ProposalGenerationEngine/model/entity.py +256 -0
- fds/sdk/ProposalGenerationEngine/model/entity_stats.py +292 -0
- fds/sdk/ProposalGenerationEngine/model/error.py +274 -0
- fds/sdk/ProposalGenerationEngine/model/errors.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_period_stats.py +333 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_period_stats_all_of.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_portfolio.py +343 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_portfolio_all_of.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_portfolio_investment.py +329 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_portfolio_investment_all_of.py +266 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_portfolio_investment_response.py +357 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_portfolio_investment_response_all_of.py +284 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_portfolio_investment_series_response.py +353 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_portfolio_investment_series_response_all_of.py +280 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_rolling_settings.py +338 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_rolling_settings_all_of.py +280 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_data.py +280 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_response.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_response_data.py +272 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_response_meta.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_rolling.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_rolling_data.py +278 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_rolling_response.py +274 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_rolling_response_data.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_rolling_response_meta.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_rolling_settings.py +341 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_settings.py +353 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_series_settings_all_of.py +267 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_settings.py +355 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_settings_all_of.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_correlations.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_correlations_data.py +280 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_correlations_response.py +274 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_correlations_response_meta.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_correlations_settings.py +346 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_correlations_settings_all_of.py +275 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_data.py +280 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_factor_exposure.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_factor_exposure_data.py +280 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_factor_exposure_response.py +274 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_factor_exposure_response_meta.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_factor_exposure_settings.py +338 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_factor_exposure_settings_all_of.py +267 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_response.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_response_data.py +272 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_response_meta.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_rolling.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_rolling_data.py +280 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_rolling_response.py +274 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_rolling_response_data.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_rolling_response_meta.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_rolling_settings.py +339 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_rolling_settings_all_of.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_settings.py +360 -0
- fds/sdk/ProposalGenerationEngine/model/ex_post_stats_settings_all_of.py +256 -0
- fds/sdk/ProposalGenerationEngine/model/exposure.py +282 -0
- fds/sdk/ProposalGenerationEngine/model/investment.py +343 -0
- fds/sdk/ProposalGenerationEngine/model/investment_all_of.py +280 -0
- fds/sdk/ProposalGenerationEngine/model/key_value_pair.py +260 -0
- fds/sdk/ProposalGenerationEngine/model/level.py +256 -0
- fds/sdk/ProposalGenerationEngine/model/paged_securities.py +276 -0
- fds/sdk/ProposalGenerationEngine/model/paged_securities_meta.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/paged_securities_meta_pagination.py +260 -0
- fds/sdk/ProposalGenerationEngine/model/performance_stats.py +264 -0
- fds/sdk/ProposalGenerationEngine/model/period.py +260 -0
- fds/sdk/ProposalGenerationEngine/model/period_correlation_stats.py +333 -0
- fds/sdk/ProposalGenerationEngine/model/period_correlation_stats_all_of.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/period_info.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/period_series.py +333 -0
- fds/sdk/ProposalGenerationEngine/model/period_series_all_of.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/periods.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio.py +331 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_all_of.py +266 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_correlation_matrix.py +260 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_entity.py +266 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_entity_details.py +256 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_investment.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_with_ex_post_series.py +333 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_with_ex_post_series_all_of.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_with_ex_post_stats.py +337 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_with_ex_post_stats_all_of.py +272 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_with_rolling_series.py +327 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_with_rolling_series_all_of.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_with_rolling_stats.py +327 -0
- fds/sdk/ProposalGenerationEngine/model/portfolio_with_rolling_stats_all_of.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/rebalancing.py +270 -0
- fds/sdk/ProposalGenerationEngine/model/relative_risk_stats.py +280 -0
- fds/sdk/ProposalGenerationEngine/model/return_stats.py +264 -0
- fds/sdk/ProposalGenerationEngine/model/risk_node_stats.py +304 -0
- fds/sdk/ProposalGenerationEngine/model/risk_stats.py +290 -0
- fds/sdk/ProposalGenerationEngine/model/rolling_series.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/rolling_series_per_time_window.py +266 -0
- fds/sdk/ProposalGenerationEngine/model/rolling_series_per_time_window_returns.py +266 -0
- fds/sdk/ProposalGenerationEngine/model/rolling_stats.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/rolling_stats_per_time_window.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/rolling_stats_per_time_window_rolling.py +256 -0
- fds/sdk/ProposalGenerationEngine/model/serie_stats.py +282 -0
- fds/sdk/ProposalGenerationEngine/model/series_stats.py +266 -0
- fds/sdk/ProposalGenerationEngine/model/settings.py +338 -0
- fds/sdk/ProposalGenerationEngine/model/settings_all_of.py +269 -0
- fds/sdk/ProposalGenerationEngine/model/stats.py +311 -0
- fds/sdk/ProposalGenerationEngine/model/time_window.py +256 -0
- fds/sdk/ProposalGenerationEngine/model/time_window_series.py +262 -0
- fds/sdk/ProposalGenerationEngine/model/time_window_stats.py +268 -0
- fds/sdk/ProposalGenerationEngine/model/time_window_stats_generic.py +256 -0
- fds/sdk/ProposalGenerationEngine/model/transaction_rule.py +334 -0
- fds/sdk/ProposalGenerationEngine/model/ui_value_object.py +264 -0
- fds/sdk/ProposalGenerationEngine/model_utils.py +2062 -0
- fds/sdk/ProposalGenerationEngine/models/__init__.py +133 -0
- fds/sdk/ProposalGenerationEngine/rest.py +347 -0
- fds/sdk/__init__.py +0 -0
- fds_sdk_proposalgenerationengine-0.1.0.dist-info/METADATA +456 -0
- fds_sdk_proposalgenerationengine-0.1.0.dist-info/RECORD +141 -0
- fds_sdk_proposalgenerationengine-0.1.0.dist-info/WHEEL +5 -0
- fds_sdk_proposalgenerationengine-0.1.0.dist-info/licenses/LICENSE +202 -0
- fds_sdk_proposalgenerationengine-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# flake8: noqa
|
|
2
|
+
|
|
3
|
+
# import all models into this package
|
|
4
|
+
# if you have many models here with many references from one model to another this may
|
|
5
|
+
# raise a RecursionError
|
|
6
|
+
# to avoid this, import only the models that you directly need like:
|
|
7
|
+
# from from fds.sdk.ProposalGenerationEngine.model.pet import Pet
|
|
8
|
+
# or import this package, but before doing it, use:
|
|
9
|
+
# import sys
|
|
10
|
+
# sys.setrecursionlimit(n)
|
|
11
|
+
|
|
12
|
+
from fds.sdk.ProposalGenerationEngine.model.array import Array
|
|
13
|
+
from fds.sdk.ProposalGenerationEngine.model.backfill_data import BackfillData
|
|
14
|
+
from fds.sdk.ProposalGenerationEngine.model.base_settings import BaseSettings
|
|
15
|
+
from fds.sdk.ProposalGenerationEngine.model.boxplot import Boxplot
|
|
16
|
+
from fds.sdk.ProposalGenerationEngine.model.boxplot_boxplot_summary import BoxplotBoxplotSummary
|
|
17
|
+
from fds.sdk.ProposalGenerationEngine.model.cl_pair import CLPair
|
|
18
|
+
from fds.sdk.ProposalGenerationEngine.model.correlation_matrix import CorrelationMatrix
|
|
19
|
+
from fds.sdk.ProposalGenerationEngine.model.correlation_stats import CorrelationStats
|
|
20
|
+
from fds.sdk.ProposalGenerationEngine.model.dated_correlation_stats import DatedCorrelationStats
|
|
21
|
+
from fds.sdk.ProposalGenerationEngine.model.dated_correlation_stats_per_time_window import DatedCorrelationStatsPerTimeWindow
|
|
22
|
+
from fds.sdk.ProposalGenerationEngine.model.dated_node_stats import DatedNodeStats
|
|
23
|
+
from fds.sdk.ProposalGenerationEngine.model.drawdown import Drawdown
|
|
24
|
+
from fds.sdk.ProposalGenerationEngine.model.drawdown_stats import DrawdownStats
|
|
25
|
+
from fds.sdk.ProposalGenerationEngine.model.entity import Entity
|
|
26
|
+
from fds.sdk.ProposalGenerationEngine.model.entity_stats import EntityStats
|
|
27
|
+
from fds.sdk.ProposalGenerationEngine.model.error import Error
|
|
28
|
+
from fds.sdk.ProposalGenerationEngine.model.errors import Errors
|
|
29
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_period_stats import ExPostPeriodStats
|
|
30
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_period_stats_all_of import ExPostPeriodStatsAllOf
|
|
31
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_portfolio import ExPostPortfolio
|
|
32
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_portfolio_all_of import ExPostPortfolioAllOf
|
|
33
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_portfolio_investment import ExPostPortfolioInvestment
|
|
34
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_portfolio_investment_all_of import ExPostPortfolioInvestmentAllOf
|
|
35
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_portfolio_investment_response import ExPostPortfolioInvestmentResponse
|
|
36
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_portfolio_investment_response_all_of import ExPostPortfolioInvestmentResponseAllOf
|
|
37
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_portfolio_investment_series_response import ExPostPortfolioInvestmentSeriesResponse
|
|
38
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_portfolio_investment_series_response_all_of import ExPostPortfolioInvestmentSeriesResponseAllOf
|
|
39
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_rolling_settings import ExPostRollingSettings
|
|
40
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_rolling_settings_all_of import ExPostRollingSettingsAllOf
|
|
41
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series import ExPostSeries
|
|
42
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_data import ExPostSeriesData
|
|
43
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_response import ExPostSeriesResponse
|
|
44
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_response_data import ExPostSeriesResponseData
|
|
45
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_response_meta import ExPostSeriesResponseMeta
|
|
46
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_rolling import ExPostSeriesRolling
|
|
47
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_rolling_data import ExPostSeriesRollingData
|
|
48
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_rolling_response import ExPostSeriesRollingResponse
|
|
49
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_rolling_response_data import ExPostSeriesRollingResponseData
|
|
50
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_rolling_response_meta import ExPostSeriesRollingResponseMeta
|
|
51
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_rolling_settings import ExPostSeriesRollingSettings
|
|
52
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_settings import ExPostSeriesSettings
|
|
53
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_series_settings_all_of import ExPostSeriesSettingsAllOf
|
|
54
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_settings import ExPostSettings
|
|
55
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_settings_all_of import ExPostSettingsAllOf
|
|
56
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats import ExPostStats
|
|
57
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_correlations import ExPostStatsCorrelations
|
|
58
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_correlations_data import ExPostStatsCorrelationsData
|
|
59
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_correlations_response import ExPostStatsCorrelationsResponse
|
|
60
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_correlations_response_meta import ExPostStatsCorrelationsResponseMeta
|
|
61
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_correlations_settings import ExPostStatsCorrelationsSettings
|
|
62
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_correlations_settings_all_of import ExPostStatsCorrelationsSettingsAllOf
|
|
63
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_data import ExPostStatsData
|
|
64
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_factor_exposure import ExPostStatsFactorExposure
|
|
65
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_factor_exposure_data import ExPostStatsFactorExposureData
|
|
66
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_factor_exposure_response import ExPostStatsFactorExposureResponse
|
|
67
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_factor_exposure_response_meta import ExPostStatsFactorExposureResponseMeta
|
|
68
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_factor_exposure_settings import ExPostStatsFactorExposureSettings
|
|
69
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_factor_exposure_settings_all_of import ExPostStatsFactorExposureSettingsAllOf
|
|
70
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_response import ExPostStatsResponse
|
|
71
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_response_data import ExPostStatsResponseData
|
|
72
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_response_meta import ExPostStatsResponseMeta
|
|
73
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_rolling import ExPostStatsRolling
|
|
74
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_rolling_data import ExPostStatsRollingData
|
|
75
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_rolling_response import ExPostStatsRollingResponse
|
|
76
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_rolling_response_data import ExPostStatsRollingResponseData
|
|
77
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_rolling_response_meta import ExPostStatsRollingResponseMeta
|
|
78
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_rolling_settings import ExPostStatsRollingSettings
|
|
79
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_rolling_settings_all_of import ExPostStatsRollingSettingsAllOf
|
|
80
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_settings import ExPostStatsSettings
|
|
81
|
+
from fds.sdk.ProposalGenerationEngine.model.ex_post_stats_settings_all_of import ExPostStatsSettingsAllOf
|
|
82
|
+
from fds.sdk.ProposalGenerationEngine.model.exposure import Exposure
|
|
83
|
+
from fds.sdk.ProposalGenerationEngine.model.investment import Investment
|
|
84
|
+
from fds.sdk.ProposalGenerationEngine.model.investment_all_of import InvestmentAllOf
|
|
85
|
+
from fds.sdk.ProposalGenerationEngine.model.key_value_pair import KeyValuePair
|
|
86
|
+
from fds.sdk.ProposalGenerationEngine.model.level import Level
|
|
87
|
+
from fds.sdk.ProposalGenerationEngine.model.paged_securities import PagedSecurities
|
|
88
|
+
from fds.sdk.ProposalGenerationEngine.model.paged_securities_meta import PagedSecuritiesMeta
|
|
89
|
+
from fds.sdk.ProposalGenerationEngine.model.paged_securities_meta_pagination import PagedSecuritiesMetaPagination
|
|
90
|
+
from fds.sdk.ProposalGenerationEngine.model.performance_stats import PerformanceStats
|
|
91
|
+
from fds.sdk.ProposalGenerationEngine.model.period import Period
|
|
92
|
+
from fds.sdk.ProposalGenerationEngine.model.period_correlation_stats import PeriodCorrelationStats
|
|
93
|
+
from fds.sdk.ProposalGenerationEngine.model.period_correlation_stats_all_of import PeriodCorrelationStatsAllOf
|
|
94
|
+
from fds.sdk.ProposalGenerationEngine.model.period_info import PeriodInfo
|
|
95
|
+
from fds.sdk.ProposalGenerationEngine.model.period_series import PeriodSeries
|
|
96
|
+
from fds.sdk.ProposalGenerationEngine.model.period_series_all_of import PeriodSeriesAllOf
|
|
97
|
+
from fds.sdk.ProposalGenerationEngine.model.periods import Periods
|
|
98
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio import Portfolio
|
|
99
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_all_of import PortfolioAllOf
|
|
100
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_correlation_matrix import PortfolioCorrelationMatrix
|
|
101
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_entity import PortfolioEntity
|
|
102
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_entity_details import PortfolioEntityDetails
|
|
103
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_investment import PortfolioInvestment
|
|
104
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_with_ex_post_series import PortfolioWithExPostSeries
|
|
105
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_with_ex_post_series_all_of import PortfolioWithExPostSeriesAllOf
|
|
106
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_with_ex_post_stats import PortfolioWithExPostStats
|
|
107
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_with_ex_post_stats_all_of import PortfolioWithExPostStatsAllOf
|
|
108
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_with_rolling_series import PortfolioWithRollingSeries
|
|
109
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_with_rolling_series_all_of import PortfolioWithRollingSeriesAllOf
|
|
110
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_with_rolling_stats import PortfolioWithRollingStats
|
|
111
|
+
from fds.sdk.ProposalGenerationEngine.model.portfolio_with_rolling_stats_all_of import PortfolioWithRollingStatsAllOf
|
|
112
|
+
from fds.sdk.ProposalGenerationEngine.model.rebalancing import Rebalancing
|
|
113
|
+
from fds.sdk.ProposalGenerationEngine.model.relative_risk_stats import RelativeRiskStats
|
|
114
|
+
from fds.sdk.ProposalGenerationEngine.model.return_stats import ReturnStats
|
|
115
|
+
from fds.sdk.ProposalGenerationEngine.model.risk_node_stats import RiskNodeStats
|
|
116
|
+
from fds.sdk.ProposalGenerationEngine.model.risk_stats import RiskStats
|
|
117
|
+
from fds.sdk.ProposalGenerationEngine.model.rolling_series import RollingSeries
|
|
118
|
+
from fds.sdk.ProposalGenerationEngine.model.rolling_series_per_time_window import RollingSeriesPerTimeWindow
|
|
119
|
+
from fds.sdk.ProposalGenerationEngine.model.rolling_series_per_time_window_returns import RollingSeriesPerTimeWindowReturns
|
|
120
|
+
from fds.sdk.ProposalGenerationEngine.model.rolling_stats import RollingStats
|
|
121
|
+
from fds.sdk.ProposalGenerationEngine.model.rolling_stats_per_time_window import RollingStatsPerTimeWindow
|
|
122
|
+
from fds.sdk.ProposalGenerationEngine.model.rolling_stats_per_time_window_rolling import RollingStatsPerTimeWindowRolling
|
|
123
|
+
from fds.sdk.ProposalGenerationEngine.model.serie_stats import SerieStats
|
|
124
|
+
from fds.sdk.ProposalGenerationEngine.model.series_stats import SeriesStats
|
|
125
|
+
from fds.sdk.ProposalGenerationEngine.model.settings import Settings
|
|
126
|
+
from fds.sdk.ProposalGenerationEngine.model.settings_all_of import SettingsAllOf
|
|
127
|
+
from fds.sdk.ProposalGenerationEngine.model.stats import Stats
|
|
128
|
+
from fds.sdk.ProposalGenerationEngine.model.time_window import TimeWindow
|
|
129
|
+
from fds.sdk.ProposalGenerationEngine.model.time_window_series import TimeWindowSeries
|
|
130
|
+
from fds.sdk.ProposalGenerationEngine.model.time_window_stats import TimeWindowStats
|
|
131
|
+
from fds.sdk.ProposalGenerationEngine.model.time_window_stats_generic import TimeWindowStatsGeneric
|
|
132
|
+
from fds.sdk.ProposalGenerationEngine.model.transaction_rule import TransactionRule
|
|
133
|
+
from fds.sdk.ProposalGenerationEngine.model.ui_value_object import UiValueObject
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Proposal Generation Engine API
|
|
3
|
+
|
|
4
|
+
Documentation on all available end points in the Proposal Generation API # noqa: E501
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 0.0.1
|
|
7
|
+
Contact: api@factset.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
import io
|
|
13
|
+
import json
|
|
14
|
+
import logging
|
|
15
|
+
import re
|
|
16
|
+
import ssl
|
|
17
|
+
from urllib.parse import urlencode
|
|
18
|
+
from urllib.parse import urlparse
|
|
19
|
+
from urllib.request import proxy_bypass_environment
|
|
20
|
+
import urllib3
|
|
21
|
+
import ipaddress
|
|
22
|
+
|
|
23
|
+
from fds.sdk.ProposalGenerationEngine.exceptions import ApiException, UnauthorizedException, ForbiddenException, NotFoundException, ServiceException, ApiValueError
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
logger = logging.getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class RESTResponse(io.IOBase):
|
|
30
|
+
|
|
31
|
+
def __init__(self, resp):
|
|
32
|
+
self.urllib3_response = resp
|
|
33
|
+
self.status = resp.status
|
|
34
|
+
self.reason = resp.reason
|
|
35
|
+
self.data = resp.data
|
|
36
|
+
|
|
37
|
+
def getheaders(self):
|
|
38
|
+
"""Returns a dictionary of the response headers."""
|
|
39
|
+
return self.urllib3_response.headers
|
|
40
|
+
|
|
41
|
+
def getheader(self, name, default=None):
|
|
42
|
+
"""Returns a given response header."""
|
|
43
|
+
return self.urllib3_response.headers.get(name, default)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class RESTClientObject(object):
|
|
47
|
+
|
|
48
|
+
def __init__(self, configuration, pools_size=4, maxsize=None):
|
|
49
|
+
# urllib3.PoolManager will pass all kw parameters to connectionpool
|
|
50
|
+
# https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501
|
|
51
|
+
# https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501
|
|
52
|
+
# maxsize is the number of requests to host that are allowed in parallel # noqa: E501
|
|
53
|
+
# Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501
|
|
54
|
+
|
|
55
|
+
# cert_reqs
|
|
56
|
+
if configuration.verify_ssl:
|
|
57
|
+
cert_reqs = ssl.CERT_REQUIRED
|
|
58
|
+
else:
|
|
59
|
+
cert_reqs = ssl.CERT_NONE
|
|
60
|
+
|
|
61
|
+
addition_pool_args = {}
|
|
62
|
+
if configuration.assert_hostname is not None:
|
|
63
|
+
addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E501
|
|
64
|
+
|
|
65
|
+
if configuration.retries is not None:
|
|
66
|
+
addition_pool_args['retries'] = configuration.retries
|
|
67
|
+
|
|
68
|
+
if configuration.socket_options is not None:
|
|
69
|
+
addition_pool_args['socket_options'] = configuration.socket_options
|
|
70
|
+
|
|
71
|
+
if maxsize is None:
|
|
72
|
+
if configuration.connection_pool_maxsize is not None:
|
|
73
|
+
maxsize = configuration.connection_pool_maxsize
|
|
74
|
+
else:
|
|
75
|
+
maxsize = 4
|
|
76
|
+
|
|
77
|
+
# https pool manager
|
|
78
|
+
if configuration.proxy and not should_bypass_proxies(configuration.host, no_proxy=configuration.no_proxy or ''):
|
|
79
|
+
self.pool_manager = urllib3.ProxyManager(
|
|
80
|
+
num_pools=pools_size,
|
|
81
|
+
maxsize=maxsize,
|
|
82
|
+
cert_reqs=cert_reqs,
|
|
83
|
+
ca_certs=configuration.ssl_ca_cert,
|
|
84
|
+
cert_file=configuration.cert_file,
|
|
85
|
+
key_file=configuration.key_file,
|
|
86
|
+
proxy_url=configuration.proxy,
|
|
87
|
+
proxy_headers=configuration.proxy_headers,
|
|
88
|
+
**addition_pool_args
|
|
89
|
+
)
|
|
90
|
+
else:
|
|
91
|
+
self.pool_manager = urllib3.PoolManager(
|
|
92
|
+
num_pools=pools_size,
|
|
93
|
+
maxsize=maxsize,
|
|
94
|
+
cert_reqs=cert_reqs,
|
|
95
|
+
ca_certs=configuration.ssl_ca_cert,
|
|
96
|
+
cert_file=configuration.cert_file,
|
|
97
|
+
key_file=configuration.key_file,
|
|
98
|
+
**addition_pool_args
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
def request(self, method, url, query_params=None, headers=None,
|
|
102
|
+
body=None, post_params=None, _preload_content=True,
|
|
103
|
+
_request_timeout=None):
|
|
104
|
+
"""Perform requests.
|
|
105
|
+
|
|
106
|
+
:param method: http request method
|
|
107
|
+
:param url: http request url
|
|
108
|
+
:param query_params: query parameters in the url
|
|
109
|
+
:param headers: http request headers
|
|
110
|
+
:param body: request json body, for `application/json`
|
|
111
|
+
:param post_params: request post parameters,
|
|
112
|
+
`application/x-www-form-urlencoded`
|
|
113
|
+
and `multipart/form-data`
|
|
114
|
+
:param _preload_content: if False, the urllib3.HTTPResponse object will
|
|
115
|
+
be returned without reading/decoding response
|
|
116
|
+
data. Default is True.
|
|
117
|
+
:param _request_timeout: timeout setting for this request. If one
|
|
118
|
+
number provided, it will be total request
|
|
119
|
+
timeout. It can also be a pair (tuple) of
|
|
120
|
+
(connection, read) timeouts.
|
|
121
|
+
"""
|
|
122
|
+
method = method.upper()
|
|
123
|
+
assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT',
|
|
124
|
+
'PATCH', 'OPTIONS']
|
|
125
|
+
|
|
126
|
+
if post_params and body:
|
|
127
|
+
raise ApiValueError(
|
|
128
|
+
"body parameter cannot be used with post_params parameter."
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
post_params = post_params or {}
|
|
132
|
+
headers = headers or {}
|
|
133
|
+
|
|
134
|
+
timeout = None
|
|
135
|
+
if _request_timeout:
|
|
136
|
+
if isinstance(_request_timeout, (int, float)): # noqa: E501,F821
|
|
137
|
+
timeout = urllib3.Timeout(total=_request_timeout)
|
|
138
|
+
elif (isinstance(_request_timeout, tuple) and
|
|
139
|
+
len(_request_timeout) == 2):
|
|
140
|
+
timeout = urllib3.Timeout(
|
|
141
|
+
connect=_request_timeout[0], read=_request_timeout[1])
|
|
142
|
+
|
|
143
|
+
try:
|
|
144
|
+
# For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
|
|
145
|
+
if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:
|
|
146
|
+
# Only set a default Content-Type for POST, PUT, PATCH and OPTIONS requests
|
|
147
|
+
if (method != 'DELETE') and ('Content-Type' not in headers):
|
|
148
|
+
headers['Content-Type'] = 'application/json'
|
|
149
|
+
if query_params:
|
|
150
|
+
url += '?' + urlencode(query_params)
|
|
151
|
+
if ('Content-Type' not in headers) or (re.search('json', headers['Content-Type'], re.IGNORECASE)):
|
|
152
|
+
request_body = None
|
|
153
|
+
if body is not None:
|
|
154
|
+
request_body = json.dumps(body)
|
|
155
|
+
r = self.pool_manager.request(
|
|
156
|
+
method, url,
|
|
157
|
+
body=request_body,
|
|
158
|
+
preload_content=_preload_content,
|
|
159
|
+
timeout=timeout,
|
|
160
|
+
headers=headers)
|
|
161
|
+
elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501
|
|
162
|
+
r = self.pool_manager.request(
|
|
163
|
+
method, url,
|
|
164
|
+
fields=post_params,
|
|
165
|
+
encode_multipart=False,
|
|
166
|
+
preload_content=_preload_content,
|
|
167
|
+
timeout=timeout,
|
|
168
|
+
headers=headers)
|
|
169
|
+
elif headers['Content-Type'] == 'multipart/form-data':
|
|
170
|
+
# must del headers['Content-Type'], or the correct
|
|
171
|
+
# Content-Type which generated by urllib3 will be
|
|
172
|
+
# overwritten.
|
|
173
|
+
del headers['Content-Type']
|
|
174
|
+
r = self.pool_manager.request(
|
|
175
|
+
method, url,
|
|
176
|
+
fields=post_params,
|
|
177
|
+
encode_multipart=True,
|
|
178
|
+
preload_content=_preload_content,
|
|
179
|
+
timeout=timeout,
|
|
180
|
+
headers=headers)
|
|
181
|
+
# Pass a `string` parameter directly in the body to support
|
|
182
|
+
# other content types than Json when `body` argument is
|
|
183
|
+
# provided in serialized form
|
|
184
|
+
elif isinstance(body, str) or isinstance(body, bytes):
|
|
185
|
+
request_body = body
|
|
186
|
+
r = self.pool_manager.request(
|
|
187
|
+
method, url,
|
|
188
|
+
body=request_body,
|
|
189
|
+
preload_content=_preload_content,
|
|
190
|
+
timeout=timeout,
|
|
191
|
+
headers=headers)
|
|
192
|
+
else:
|
|
193
|
+
# Cannot generate the request from given parameters
|
|
194
|
+
msg = """Cannot prepare a request message for provided
|
|
195
|
+
arguments. Please check that your arguments match
|
|
196
|
+
declared content type."""
|
|
197
|
+
raise ApiException(status=0, reason=msg)
|
|
198
|
+
# For `GET`, `HEAD`
|
|
199
|
+
else:
|
|
200
|
+
r = self.pool_manager.request(method, url,
|
|
201
|
+
fields=query_params,
|
|
202
|
+
preload_content=_preload_content,
|
|
203
|
+
timeout=timeout,
|
|
204
|
+
headers=headers)
|
|
205
|
+
except urllib3.exceptions.SSLError as e:
|
|
206
|
+
msg = "{0}\n{1}".format(type(e).__name__, str(e))
|
|
207
|
+
raise ApiException(status=0, reason=msg)
|
|
208
|
+
|
|
209
|
+
if _preload_content:
|
|
210
|
+
r = RESTResponse(r)
|
|
211
|
+
|
|
212
|
+
# log response body
|
|
213
|
+
logger.debug("response body: %s", r.data)
|
|
214
|
+
|
|
215
|
+
if not 200 <= r.status <= 299:
|
|
216
|
+
if r.status == 401:
|
|
217
|
+
raise UnauthorizedException(http_resp=r)
|
|
218
|
+
|
|
219
|
+
if r.status == 403:
|
|
220
|
+
raise ForbiddenException(http_resp=r)
|
|
221
|
+
|
|
222
|
+
if r.status == 404:
|
|
223
|
+
raise NotFoundException(http_resp=r)
|
|
224
|
+
|
|
225
|
+
if 500 <= r.status <= 599:
|
|
226
|
+
raise ServiceException(http_resp=r)
|
|
227
|
+
|
|
228
|
+
raise ApiException(http_resp=r)
|
|
229
|
+
|
|
230
|
+
return r
|
|
231
|
+
|
|
232
|
+
def GET(self, url, headers=None, query_params=None, _preload_content=True,
|
|
233
|
+
_request_timeout=None):
|
|
234
|
+
return self.request("GET", url,
|
|
235
|
+
headers=headers,
|
|
236
|
+
_preload_content=_preload_content,
|
|
237
|
+
_request_timeout=_request_timeout,
|
|
238
|
+
query_params=query_params)
|
|
239
|
+
|
|
240
|
+
def HEAD(self, url, headers=None, query_params=None, _preload_content=True,
|
|
241
|
+
_request_timeout=None):
|
|
242
|
+
return self.request("HEAD", url,
|
|
243
|
+
headers=headers,
|
|
244
|
+
_preload_content=_preload_content,
|
|
245
|
+
_request_timeout=_request_timeout,
|
|
246
|
+
query_params=query_params)
|
|
247
|
+
|
|
248
|
+
def OPTIONS(self, url, headers=None, query_params=None, post_params=None,
|
|
249
|
+
body=None, _preload_content=True, _request_timeout=None):
|
|
250
|
+
return self.request("OPTIONS", url,
|
|
251
|
+
headers=headers,
|
|
252
|
+
query_params=query_params,
|
|
253
|
+
post_params=post_params,
|
|
254
|
+
_preload_content=_preload_content,
|
|
255
|
+
_request_timeout=_request_timeout,
|
|
256
|
+
body=body)
|
|
257
|
+
|
|
258
|
+
def DELETE(self, url, headers=None, query_params=None, body=None,
|
|
259
|
+
_preload_content=True, _request_timeout=None):
|
|
260
|
+
return self.request("DELETE", url,
|
|
261
|
+
headers=headers,
|
|
262
|
+
query_params=query_params,
|
|
263
|
+
_preload_content=_preload_content,
|
|
264
|
+
_request_timeout=_request_timeout,
|
|
265
|
+
body=body)
|
|
266
|
+
|
|
267
|
+
def POST(self, url, headers=None, query_params=None, post_params=None,
|
|
268
|
+
body=None, _preload_content=True, _request_timeout=None):
|
|
269
|
+
return self.request("POST", url,
|
|
270
|
+
headers=headers,
|
|
271
|
+
query_params=query_params,
|
|
272
|
+
post_params=post_params,
|
|
273
|
+
_preload_content=_preload_content,
|
|
274
|
+
_request_timeout=_request_timeout,
|
|
275
|
+
body=body)
|
|
276
|
+
|
|
277
|
+
def PUT(self, url, headers=None, query_params=None, post_params=None,
|
|
278
|
+
body=None, _preload_content=True, _request_timeout=None):
|
|
279
|
+
return self.request("PUT", url,
|
|
280
|
+
headers=headers,
|
|
281
|
+
query_params=query_params,
|
|
282
|
+
post_params=post_params,
|
|
283
|
+
_preload_content=_preload_content,
|
|
284
|
+
_request_timeout=_request_timeout,
|
|
285
|
+
body=body)
|
|
286
|
+
|
|
287
|
+
def PATCH(self, url, headers=None, query_params=None, post_params=None,
|
|
288
|
+
body=None, _preload_content=True, _request_timeout=None):
|
|
289
|
+
return self.request("PATCH", url,
|
|
290
|
+
headers=headers,
|
|
291
|
+
query_params=query_params,
|
|
292
|
+
post_params=post_params,
|
|
293
|
+
_preload_content=_preload_content,
|
|
294
|
+
_request_timeout=_request_timeout,
|
|
295
|
+
body=body)
|
|
296
|
+
|
|
297
|
+
# end of class RESTClientObject
|
|
298
|
+
def is_ipv4(target):
|
|
299
|
+
""" Test if IPv4 address or not
|
|
300
|
+
"""
|
|
301
|
+
try:
|
|
302
|
+
chk = ipaddress.IPv4Address(target)
|
|
303
|
+
return True
|
|
304
|
+
except ipaddress.AddressValueError:
|
|
305
|
+
return False
|
|
306
|
+
|
|
307
|
+
def in_ipv4net(target, net):
|
|
308
|
+
""" Test if target belongs to given IPv4 network
|
|
309
|
+
"""
|
|
310
|
+
try:
|
|
311
|
+
nw = ipaddress.IPv4Network(net)
|
|
312
|
+
ip = ipaddress.IPv4Address(target)
|
|
313
|
+
if ip in nw:
|
|
314
|
+
return True
|
|
315
|
+
return False
|
|
316
|
+
except ipaddress.AddressValueError:
|
|
317
|
+
return False
|
|
318
|
+
except ipaddress.NetmaskValueError:
|
|
319
|
+
return False
|
|
320
|
+
|
|
321
|
+
def should_bypass_proxies(url, no_proxy=None):
|
|
322
|
+
""" Yet another requests.should_bypass_proxies
|
|
323
|
+
Test if proxies should not be used for a particular url.
|
|
324
|
+
"""
|
|
325
|
+
|
|
326
|
+
parsed = urlparse(url)
|
|
327
|
+
|
|
328
|
+
# special cases
|
|
329
|
+
if parsed.hostname in [None, '']:
|
|
330
|
+
return True
|
|
331
|
+
|
|
332
|
+
# special cases
|
|
333
|
+
if no_proxy in [None , '']:
|
|
334
|
+
return False
|
|
335
|
+
if no_proxy == '*':
|
|
336
|
+
return True
|
|
337
|
+
|
|
338
|
+
no_proxy = no_proxy.lower().replace(' ','');
|
|
339
|
+
entries = (
|
|
340
|
+
host for host in no_proxy.split(',') if host
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
if is_ipv4(parsed.hostname):
|
|
344
|
+
for item in entries:
|
|
345
|
+
if in_ipv4net(parsed.hostname, item):
|
|
346
|
+
return True
|
|
347
|
+
return proxy_bypass_environment(parsed.hostname, {'no': no_proxy} )
|
fds/sdk/__init__.py
ADDED
|
File without changes
|