def refresh_from_fcc(self): """ Call FCC's API to get details for the folder and update our records. """ entity_folder_id = self.entity_folder_id endpoint_url = f"{FCC_API_URL}/manager/folder/id/{entity_folder_id}.json" # noqa payload = {'entityId': self.entity.id} r = requests.get(endpoint_url, params=payload) r.raise_for_status() for key, value in r.json()['folder'].items(): if type(value) == str: if value.upper() == 'Y': value = True elif value.upper() == 'N': value = False elif key == 'subfolders' or key == 'files': pass else: setattr(self, camelcase_to_underscore(key), value) for subfolder in r.json()['folder']['subfolders']: clean_subfolder_data = json_cleaner(subfolder) subfolder, created = self.subfolders.update_or_create( defaults=clean_subfolder_data, entity_folder_id=clean_subfolder_data["entity_folder_id"]) subfolder.refresh_from_fcc() for file in r.json()['folder']['files']: clean_file_data = json_cleaner(file) last_updated = clean_file_data.pop('last_update_ts') file, created = self.files.update_or_create( defaults=clean_file_data, file_id=clean_file_data["file_id"]) fcc_updated = last_updated != file.last_update_ts file_needed = created or fcc_updated or not file.stored_file if file_needed: file.copy_to_storage() file.upload_to_document_cloud() if fcc_updated: file.last_update_ts = last_updated file.save() return self.save()
def refresh_all_files(self): """ Call FCC's API to get details for the facility. Create new folders and files, update existing ones. """ serviceType = self.service_type entityID = self.id endpoint_url = f"{FCC_API_URL}/manager/folder/parentFolders.json?entityId={entityID}&sourceService={serviceType}" # noqa r = requests.get(endpoint_url) r.raise_for_status() folder_list = r.json()['folders'] for folder_data in folder_list: clean_data = json_cleaner(folder_data) clean_data['entity_id'] = self.id folder, created = self.folders.update_or_create( defaults=clean_data, entity_folder_id=clean_data["entity_folder_id"], ) refresh_folder('FacilityFolder', folder.entity_folder_id) self.save() return self.save()
def prep_facilities(self, facilities_list, serviceType): q = Facility.objects.filter(service_type=serviceType) existing_ids = [i['id'] for i in q.values('id')] new_facilities = [ Facility(**json_cleaner(f), service_type=serviceType).clean_api_data() for f in facilities_list if f['id'] not in existing_ids ] return new_facilities
def prep_cable_systems(self, cable_system_list, serviceType): q = CableSystem.objects existing_ids = [i['id'] for i in q.values('id')] new_cable_systems = [ CableSystem(**json_cleaner(cs), service_type=serviceType, id=cs['psid']) for cs in cable_system_list if cs['psid'] not in existing_ids ] return new_cable_systems
def refresh_all_files(self): entityID = self.id endpoint_url = f"{FCC_API_URL}/manager/folder/parentFolders.json?entityId={entityID}&sourceService=cable" # noqa r = requests.get(endpoint_url) r.raise_for_status() folder_list = r.json()['folders'] for folder_data in folder_list: clean_data = json_cleaner(folder_data) clean_data['entity_id'] = self.id folder, created = self.folders.update_or_create( defaults=clean_data, entity_folder_id=clean_data["entity_folder_id"]) refresh_folder('CableFolder', folder.entity_folder_id) self.save() return self.save()
def refresh_from_fcc(self): psid = self.id endpoint_url = f"{FCC_API_URL}/service/cable/psid/{psid}.json" r = requests.get(endpoint_url) for key, value in r.json()['results']['cableSystemInfo'].items(): if key == 'cableServiceZipCodes' or key == 'cableServiceEmpUnits' or key == 'cableCommunities': pass elif type(value) == str: if value.upper() == 'Y': value = True elif value.upper() == 'N': value = False setattr(self, camelcase_to_underscore(key), value) for item in r.json( )['results']['cableSystemInfo']['cableServiceZipCodes'].items(): if key == 'zipcodes': setattr(self, camelcase_to_underscore(key), value) for item in r.json( )['results']['cableSystemInfo']['cableServiceEmpUnits'].items(): if key == 'empUnits': setattr(self, camelcase_to_underscore(key), value) for community in r.json( )['results']['cableSystemInfo']['cableCommunities']: if community.items(): clean_community_data = json_cleaner(community) community, created = self.communities.update_or_create( defaults=clean_community_data, community_unit_id=clean_community_data["community_unit_id"] ) self.last_refreshed_ts = timezone.now() return self.save()