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()
Beispiel #3
0
    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
Beispiel #4
0
    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()