コード例 #1
0
    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)
コード例 #2
0
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))
コード例 #3
0
    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)