"""Territories Helper.""" from ast import literal_eval from functools import lru_cache from pricing.models import ows_territories def get_all_orchard_territories(): """Get all the Orch_1_2016 territories there are. Returns: [string]: all the territories in the world according to Orch_1_2016. """ world_response = ows_territories.get_all_orchard_territories() return convert_ows_territories_response(world_response) def get_all_iso_territories(): """Get all the ISO_3166_1_2016 territories there are. Returns: [string]: all the territories according to ISO_3166_1_2016. """ world_response = ows_territories.get_all_iso_territories() return convert_ows_territories_response(world_response) @lru_cache(1000) def convert_territories_to_iso(territories): """Convert territories to ISO territory list. Args: territories (string): a list of territory codes. """ territories = literal_eval(territories) iso_response = ows_territories.convert_to_iso_territories(territories) return convert_ows_territories_response(iso_response) def convert_territories_to_positive_orchard(item): """Convert territories to positive Orchard territory list. Args: item (dict): a pricing item. """ if 'applies_worldwide' in item and item['applies_worldwide']: world_response = ows_territories.get_all_orchard_territories() return convert_ows_territories_response(world_response) if 'territory_list_include' in item: territory_list_include = item['territory_list_include'] else: territory_list_include = True if territory_list_include and item['territories'] == []: return [] if not territory_list_include and item['territories'] == []: world_response = ows_territories.get_all_orchard_territories() return convert_ows_territories_response(world_response) territories_as_string = str(item['territories']) result = _convert_ows_territories_to_positive( territories_as_string, territory_list_include) return result def convert_territories_to_positive_iso(territories): """Convert territories to positive ISO territory list. Args: territories (list): a negative list of ISO territory codes. """ territories = literal_eval(str(territories)) complement_response = ows_territories.complement_iso_territories( territories) return convert_ows_territories_response(complement_response) @lru_cache(maxsize=1000) def _convert_ows_territories_to_positive(territories, territory_list_include): """Convert ows territories to positive. Args: territories (string): A string with the territories territory_list_include (boolean): A boolean that reflects if territory list is included. Returns: An array with territory codes """ territories = literal_eval(territories) orch_response = ows_territories.convert_to_orchard_territories( territories) if orch_response.status == 200: territories = convert_ows_territories_response(orch_response) if not territory_list_include: complement_response = ows_territories \ .complement_orchard_territories(territories) territories = convert_ows_territories_response( complement_response) return territories def convert_ows_territories_response(response): """Convert an OWS Territories response to a list of strings. Args: response (response.Response): the response to convert. Returns: [string]: a list of territory code strings. """ result = [territory['territory_code_a2'] for territory in response.message['items']] return result