22import requests
33
44from data_retrieval_app .external_data_retrieval .config import settings
5- from data_retrieval_app .external_data_retrieval .data_retrieval .poe_ninja_currency_api_handler import (
6- PoENinjaCurrencyAPIHandler ,
5+ from data_retrieval_app .external_data_retrieval .data_retrieval .currency_api_handler import (
6+ CurrencyAPIHandler ,
77)
88from data_retrieval_app .logs .logger import transform_logger as logger
99from data_retrieval_app .pom_api_authentication import get_superuser_token_headers
@@ -14,7 +14,7 @@ def load_currency_data():
1414 """
1515 Loads data from the poe.ninja currency API.
1616 """
17- poe_ninja_currency_api_handler = PoENinjaCurrencyAPIHandler (
17+ poe_ninja_currency_api_handler = CurrencyAPIHandler (
1818 url = f"https://poe.ninja/api/data/currencyoverview?league={ settings .CURRENT_SOFTCORE_LEAGUE } &type=Currency"
1919 )
2020
@@ -23,37 +23,67 @@ def load_currency_data():
2323 return currencies_df
2424
2525
26- class TransformPoENinjaCurrencyAPIData :
26+ class TransformCurrencyAPIData :
2727 def __init__ (self ) -> None :
28- logger .debug ("Initializing TransformPoENinjaCurrencyAPIData ." )
28+ logger .debug ("Initializing TransformCurrencyAPIData ." )
2929 self .base_url = settings .BACKEND_BASE_URL
3030 logger .debug (f"Url set to: { self .base_url } " )
3131 self .pom_api_headers = get_superuser_token_headers (self .base_url )
3232 logger .debug ("Headers set to: " + str (self .pom_api_headers ))
33- logger .debug ("Initializing TransformPoENinjaCurrencyAPIData done." )
33+ logger .debug ("Initializing TransformCurrencyAPIData done." )
3434
35- def _create_currency_table (self , currency_df : pd .DataFrame ) -> pd .DataFrame :
35+ self .name_to_trade_name = self ._get_name_to_trade_name_dict ()
36+
37+ def _get_name_to_trade_name_dict (self ) -> dict :
3638 """
37- Creates the currency table .
39+ Retrieves a map for "fancy" currency names, as used in the API, to their trade names, which we need .
3840 """
39- currency_df .rename (
40- columns = {
41- "tradeId" : "tradeName" ,
42- "chaosEquivalent" : "valueInChaos" ,
43- },
44- inplace = True ,
45- )
46- return currency_df
41+ headers = {
42+ "User-Agent" : f"OAuth pathofmodifiers/0.1.0 (contact: { settings .OATH_ACC_TOKEN_CONTACT_EMAIL } ) StrictMode"
43+ }
44+ try :
45+ response = requests .get (
46+ "https://www.pathofexile.com/api/trade/data/static" , headers = headers
47+ )
48+ response .raise_for_status ()
49+ except Exception as e :
50+ logger .error (
51+ f"The following error occurred while making request _get_latest_change_id: { e } "
52+ )
53+ raise e
54+
55+ response_json = response .json ()
56+ result = response_json ["result" ]
57+ currencies = {}
58+ for category in result :
59+ if category ["id" ] == "Currency" :
60+ for entry in category ["entries" ]:
61+ name = entry ["text" ]
62+ trade_name = entry ["id" ]
63+ currencies [name ] = trade_name
64+
65+ return currencies
4766
4867 def _transform_currency_table (
4968 self , currency_df : pd .DataFrame , hours_since_launch : int
5069 ) -> pd .DataFrame :
5170 """
5271 Since a chaos orb is always worth one chaos orb, ninja does not include it in its price api.
5372 """
73+
74+ currency_df ["chaos.chaosValue" ] = currency_df ["chaos.chaosValue" ].where (
75+ (currency_df ["chaos.chaosValue" ] == 0 )
76+ | (currency_df ["chaos.chaosValue" ].isna ()),
77+ currency_df ["divine.chaosValue" ],
78+ )
79+
80+ currency_df ["tradeName" ] = currency_df ["name" ].map (
81+ lambda name : self .name_to_trade_name .get (name , pd .NA )
82+ )
83+
5484 chaos_dict = {
55- "tradeName " : ["chaos " ],
56- "valueInChaos " : [1 ],
85+ "name " : ["Chaos Orb " ],
86+ "chaos.chaosValue " : [1 ],
5787 }
5888 chaos_df = pd .DataFrame .from_dict (chaos_dict )
5989 currency_df = pd .concat ((currency_df , chaos_df ), ignore_index = True )
@@ -65,15 +95,17 @@ def _clean_currency_table(self, currency_df: pd.DataFrame) -> pd.DataFrame:
6595 """
6696 Cleans the currency table of unnecessary columns.
6797 """
98+ currency_df = currency_df .rename (columns = {"chaos.chaosValue" : "valueInChaos" })
6899
69- currency_df .drop (
100+ currency_df = currency_df .drop (
70101 currency_df .columns .difference (
71102 ["tradeName" , "valueInChaos" , "createdHoursSinceLaunch" ]
72103 ),
73104 axis = 1 ,
74- inplace = True ,
75105 )
76- currency_df = currency_df .loc [~ currency_df ["tradeName" ].isna ()].reset_index ()
106+ currency_df = currency_df .loc [~ currency_df ["tradeName" ].isna ()].reset_index (
107+ drop = True
108+ )
77109 return currency_df
78110
79111 def _get_latest_currency_id_series (self , currency_df : pd .DataFrame ) -> pd .Series :
@@ -102,7 +134,6 @@ def transform_into_tables(self, currency_df: pd.DataFrame) -> pd.DataFrame:
102134 """
103135 hours_since_launch = find_hours_since_launch ()
104136 logger .debug ("Transforming data into tables." )
105- currency_df = self ._create_currency_table (currency_df )
106137 currency_df = self ._transform_currency_table (currency_df , hours_since_launch )
107138 logger .debug ("Successfully transformed data into tables." )
108139
0 commit comments