66from fds .analyticsapi .engines import ApiException
77from fds .analyticsapi .engines .api .pa_calculations_api import PACalculationsApi
88from fds .analyticsapi .engines .api .components_api import ComponentsApi
9+ from fds .analyticsapi .engines .api .pricing_sources_api import PricingSourcesApi
910from fds .analyticsapi .engines .api_client import ApiClient
1011from fds .analyticsapi .engines .configuration import Configuration
1112from fds .analyticsapi .engines .model .component_summary import ComponentSummary
1213from fds .analyticsapi .engines .model .pa_calculation_parameters_root import PACalculationParametersRoot
1314from fds .analyticsapi .engines .model .pa_calculation_parameters import PACalculationParameters
1415from fds .analyticsapi .engines .model .pa_date_parameters import PADateParameters
1516from fds .analyticsapi .engines .model .pa_identifier import PAIdentifier
17+ from fds .analyticsapi .engines .model .pa_calculation_data_sources import PACalculationDataSources
18+ from fds .analyticsapi .engines .model .pa_calculation_pricing_source import PACalculationPricingSource
1619from fds .protobuf .stach .extensions .StachVersion import StachVersion
1720from fds .protobuf .stach .extensions .StachExtensionFactory import StachExtensionFactory
1821
2225fds_username = os .environ ['FACTSET_USERNAME' ]
2326fds_api_key = os .environ ['FACTSET_API_KEY' ]
2427
28+
2529def main ():
2630 config = Configuration ()
2731 config .host = host
@@ -39,6 +43,7 @@ def main():
3943 api_client = ApiClient (config )
4044
4145 components_api = ComponentsApi (api_client )
46+ pricingsources_api = PricingSourcesApi (api_client )
4247
4348 try :
4449 pa_document_name = "PA_DOCUMENTS:DEFAULT"
@@ -51,26 +56,48 @@ def main():
5156 frequency = "Monthly"
5257 holdings = "B&H"
5358 currency = "USD"
59+ pricing_source_name = "MSCI - Gross"
60+ pricing_source_category = "MSCI"
61+ pricing_source_directory = "Equity"
5462 # uncomment the below code line to setup cache control; max-stale=0 will be a fresh adhoc run and the max-stale value is in seconds.
55- # Results are by default cached for 12 hours; Setting max-stale=300 will fetch a cached result which is 5 minutes older.
63+ # Results are by default cached for 12 hours; Setting max-stale=300 will fetch a cached result which is 5 minutes older.
5664 # cache_control = "max-stale=0"
5765 get_components_response = components_api .get_pa_components (document = pa_document_name )
5866 component_id = [id for id in list (
59- get_components_response [0 ].data .keys ()) if get_components_response [0 ].data [id ].name == pa_component_name and get_components_response [0 ].data [id ].category == pa_component_category ][0 ]
67+ get_components_response [0 ].data .keys ()) if get_components_response [0 ].data [id ].name == pa_component_name and
68+ get_components_response [0 ].data [id ].category == pa_component_category ][0 ]
6069 print ("PA Component Id: " + component_id )
6170 pa_accounts = [PAIdentifier (id = portfolio , holdingsmode = holdings )]
6271 pa_benchmarks = [PAIdentifier (id = benchmark , holdingsmode = holdings )]
6372 pa_dates = PADateParameters (
6473 startdate = startdate , enddate = enddate , frequency = frequency )
6574
75+ get_pricing_sources_response = pricingsources_api .get_pa_pricing_sources (name = pricing_source_name ,
76+ category = pricing_source_category ,
77+ directory = pricing_source_directory )
78+ pricing_source_id = [id for id in list (
79+ get_pricing_sources_response [0 ].data .keys ()) if
80+ get_pricing_sources_response [0 ].data [id ].name == pricing_source_name
81+ and get_pricing_sources_response [0 ].data [id ].category == pricing_source_category
82+ and get_pricing_sources_response [0 ].data [id ].directory == pricing_source_directory ][0 ]
83+
84+ print ("PA Pricing Source Id: " + pricing_source_id )
85+
86+ pa_pricing_sources = [PACalculationPricingSource (id = pricing_source_id )]
87+
88+ pa_datasources = PACalculationDataSources (portfoliopricingsources = pa_pricing_sources ,
89+ useportfoliopricingsourcesforbenchmark = True )
90+
6691 pa_calculation_parameters = {"1" : PACalculationParameters (componentid = component_id , accounts = pa_accounts ,
67- benchmarks = pa_benchmarks , dates = pa_dates , currencyisocode = currency ),
92+ benchmarks = pa_benchmarks , dates = pa_dates ,
93+ currencyisocode = currency , datasources = pa_datasources ),
6894 "2" : PACalculationParameters (componentid = component_id , accounts = pa_accounts ,
69- benchmarks = pa_benchmarks , dates = pa_dates , currencyisocode = currency )}
95+ benchmarks = pa_benchmarks , dates = pa_dates ,
96+ currencyisocode = currency , datasources = pa_datasources )}
7097
7198 pa_calculation_parameter_root = PACalculationParametersRoot (
7299 data = pa_calculation_parameters )
73-
100+
74101 pa_calculations_api = PACalculationsApi (api_client )
75102
76103 post_and_calculate_response = pa_calculations_api .post_and_calculate (
@@ -134,4 +161,4 @@ def generate_excel(data_frames_list):
134161
135162
136163if __name__ == '__main__' :
137- main ()
164+ main ()
0 commit comments