def import_data(self): """ Perform a (re)import on a previously loaded model. This takes the loaded columns into account, ignoring any new columns that may exist in the spreadsheet. """ if not self.columns: logger.warn("Attempted to import source without columns. Baililng") return [ "Data source hasn't been configured. Re-import this source " \ "using the confiruation wizard." ] csv = None if self.csv_url and self.csv_google_refresh_token: oauther = GoogleOAuth(get_setting("GOOGLE_CLIENT_ID"), get_setting("GOOGLE_CLIENT_SECRET")) access_data = oauther.get_access_data( refresh_token=self.csv_google_refresh_token) token = access_data["access_token"] csv = PrivateSheetImporter(token).get_csv_from_url(self.csv_url) elif self.csv_url: csv = fetch_csv(self.csv_url) elif self.sd_api_key: importer = ScreendoorImporter(api_key=self.sd_api_key) csv = importer.build_csv(self.sd_project_id, form_id=self.sd_form_id) else: raise NotImplementedError("Invalid data source for %s" % self) return import_records(csv, self.get_model(), self)
def from_csv_url(name, csv_url): """ Build a dynamic model from a CSV URL. This supports Google Sheets share URLs and normal remote CSVs. """ csv = fetch_csv(csv_url) return from_csv(name, csv, **dict(csv_url=csv_url))
def import_data(self): """ Perform a (re)import on a previously loaded model. This takes the loaded columns into account, ignoring any new columns that may exist in the spreadsheet. """ if not self.columns: logger.warn("Attempted to import source without columns. Baililng") return [ "Data source hasn't been configured. Re-import this source " \ "using the confiruation wizard." ] creds_model = CredentialStore.objects.filter( name="csv_google_credentials").first() csv = None if self.csv_url and creds_model: csv = PrivateSheetImporter( creds_model.credentials).get_csv_from_url(self.csv_url) elif self.csv_url: # NOTE: InvalidDimensions csv = fetch_csv(self.csv_url) elif self.sd_api_key: importer = ScreendoorImporter(api_key=self.sd_api_key) csv = importer.build_csv(self.sd_project_id, form_id=self.sd_form_id) elif self.csv_file: csv = self.csv_file.read().decode("utf-8") else: raise NotImplementedError("Invalid data source for %s" % self) return import_records(csv, self.get_model(), self)