Пример #1
0
    def test_client_set_auth_separately(self):
        client = Fieldbook('fakebook')
        client.set_auth('foo', 'bar')

        self.assertEqual(client._key, 'foo')
        self.assertEqual(client._secret, 'bar')
        self.assertEqual(client.session.auth, ('foo', 'bar'))
Пример #2
0
    def test_client_set_auth_separately(self):
        client = Fieldbook('fakebook')
        client.set_auth('foo', 'bar')

        self.assertEqual(client._key, 'foo')
        self.assertEqual(client._secret, 'bar')
        self.assertEqual(client.session.auth, ('foo', 'bar'))
Пример #3
0
    def test_client_makes_correct_urls(self):
        expected_url = 'https://api.fieldbook.com/v1/fakebook/fakesheet'
        client = Fieldbook('fakebook')

        url_val = client._make_url(sheet_name='fakesheet')

        self.assertEqual(url_val, expected_url)
Пример #4
0
    def test_client_makes_correct_urls(self):
        expected_url = 'https://api.fieldbook.com/v1/fakebook/fakesheet'
        client = Fieldbook('fakebook')

        url_val = client._make_url(sheet_name='fakesheet')

        self.assertEqual(url_val, expected_url)
Пример #5
0
    def test_client_get_sheets(self):
        client = Fieldbook('fakebook')
        expected_value = ["foo", "bar", "baz"]

        client._get = MagicMock(return_value=expected_value)
        value = client.sheets()

        self.assertListEqual(value, expected_value)
Пример #6
0
    def test_client_add_endpoints(self):
        client = Fieldbook('fakebook')
        add_endpoints = ["foo", "bar", "baz"]

        client._make_sheet_endpoints(add_endpoints)

        for e in add_endpoints:
            self.assertTrue(hasattr(client, e))
Пример #7
0
    def test_client_get_sheets(self):
        client = Fieldbook('fakebook')
        expected_value = ["foo", "bar", "baz"]

        client._get = MagicMock(return_value=expected_value)
        value = client.sheets()

        self.assertListEqual(value, expected_value)
Пример #8
0
    def test_client_add_endpoints(self):
        client = Fieldbook('fakebook')
        add_endpoints = ["foo", "bar", "baz"]

        client._make_sheet_endpoints(add_endpoints)

        for e in add_endpoints:
            self.assertTrue(hasattr(client, e))
Пример #9
0
    def test_client_get_sheets_add_endpoints(self):
        client = Fieldbook('fakebook')
        expected_value = ["foo", "bar", "baz"]

        client._get = MagicMock(return_value=expected_value)
        value = client.sheets(make_endpoints=True)

        self.assertListEqual(value, expected_value)
        for v in expected_value:
            self.assertTrue(hasattr(client, v))
Пример #10
0
    def test_client_get_sheets_add_endpoints(self):
        client = Fieldbook('fakebook')
        expected_value = ["foo", "bar", "baz"]

        client._get = MagicMock(return_value=expected_value)
        value = client.sheets(make_endpoints=True)

        self.assertListEqual(value, expected_value)
        for v in expected_value:
            self.assertTrue(hasattr(client, v))
Пример #11
0
    def test_client_auth_from_env(self):
        client = Fieldbook('fakebook')

        self.assertEqual(client._key, 'TEST_ENV_KEY')
        self.assertEqual(client._secret, 'TEST_ENV_SECRET')
        self.assertEqual(client.session.auth,
                         ('TEST_ENV_KEY', 'TEST_ENV_SECRET'))
Пример #12
0
    def test_sheet_query_params_passed(self):
        client = Fieldbook('fakebook')

        expected_value = [{
            "id": 12,
            "record_url": "https://fieldbook.com/records/fakesheet",
            "column1": "text",
            "column2": []
        }]

        client._get = MagicMock(return_value=expected_value)
        value = client.list('fakesheet', column1='text')

        self.assertIsNotNone(client.book_id)
        client._get.assert_called_with(sheet_name='fakesheet', column1='text')
        self.assertListEqual(value, expected_value)
Пример #13
0
    def test_client_sheet_get(self):
        client = Fieldbook('fakebook')
        expected_value = [{
            "id": 12,
            "record_url": "https://fieldbook.com/records/fakesheet",
            "column1": "text",
            "column2": []
        }]

        client._get = MagicMock(return_value=expected_value)

        value = client.get('fakesheet', 12)

        self.assertIsNotNone(client.book_id)
        client._get.assert_called_with(sheet_name='fakesheet', row_id=12)
        self.assertEqual(value, expected_value)
        self.assertIn('column2', value[0])
        self.assertListEqual(value[0]['column2'], [])
Пример #14
0
    def test_sheet_query_params_passed(self):
        client = Fieldbook('fakebook')

        expected_value = [
            {
                "id": 12,
                "record_url": "https://fieldbook.com/records/fakesheet",
                "column1": "text",
                "column2": []
            }
        ]

        client._get = MagicMock(return_value=expected_value)
        value = client.list('fakesheet', column1='text')

        self.assertIsNotNone(client.book_id)
        client._get.assert_called_with(sheet_name='fakesheet', column1='text')
        self.assertListEqual(value, expected_value)
Пример #15
0
    def handle(self, *args, **kwargs):
        self.book_id = kwargs.get('book_id')
        self.outdir = kwargs.get('outdir')
        self._key = kwargs.get('key', os.getenv('FIELDBOOK_KEY', None))
        self._secret = kwargs.get('secret', os.getenv('FIELDBOOK_SECRET',
                                                      None))
        self.verbosity = kwargs.get('verbosity')
        self.no_save = kwargs.get('no_save')

        if not (self._key and self._secret):
            raise CommandError("""
You must provide the Fieldbook book's API key and secret, either as option flags or by
setting FIELDBOOK_KEY and FIELDBOOK_SECRET environment variables
                """)

        if not os.path.exists(self.outdir):
            raise CommandError(
                "outdir does not exist. Either create the directory or choose an existing one."
            )

        outpath = os.path.abspath(self.outdir)

        book = Fieldbook(self.book_id, key=self._key, secret=self._secret)

        if self.verbosity > 1:
            self.stdout.write("Fetching sheet names for book {}".format(
                self.book_id))
        sheet_names = book.sheets()

        for sheet in sheet_names:
            if self.verbosity > 1:
                self.stdout.write("Fetching data for sheet {}".format(sheet))

            data = book.list(sheet)

            outtfile = os.path.join(outpath, "{}.json".format(sheet))
            if not self.no_save:
                if self.verbosity > 1:
                    self.stdout.write("Writing data to {}".format(outtfile))
                json.dump(data, open(outtfile, 'w'), indent=4)
            else:
                self.stdout.write(json.dumps(data))
Пример #16
0
    def test_client_sheet_get(self):
        client = Fieldbook('fakebook')
        expected_value = [
            {
                "id": 12,
                "record_url": "https://fieldbook.com/records/fakesheet",
                "column1": "text",
                "column2": []
            }
        ]

        client._get = MagicMock(return_value=expected_value)

        value = client.get('fakesheet', 12)

        self.assertIsNotNone(client.book_id)
        client._get.assert_called_with(sheet_name='fakesheet', row_id=12)
        self.assertEqual(value, expected_value)
        self.assertIn('column2', value[0])
        self.assertListEqual(value[0]['column2'], [])
Пример #17
0
def download(args):
    friendly = getattr(args, 'friendly', False)
    verbose = getattr(args, 'verbose', 0)
    config = configparser.ConfigParser()
    config.read_file(args.configfile)

    for section_name, section_conf in config.items():
        if section_name != 'DEFAULT':
            if verbose > 2:
                print("Reading config for '{}'".format(section_name))
            book_id = section_conf.get('id')
            book_key = section_conf.get('key')
            book_secret = section_conf.get('secret')
            outdir = section_conf.get('outdir')
            if not os.path.exists(outdir):
                raise FileNotFoundError(outdir)
            outpath = os.path.abspath(os.path.join(outdir, section_name))
            if not os.path.exists(outpath):
                if verbose > 0:
                    print("Creating '{}'".format(outpath))
                os.mkdir(outpath)
            if book_id and book_key and book_secret:
                book = Fieldbook(book_id, key=book_key, secret=book_secret)
                sheet_names = book.sheets()
                if verbose > 2:
                    print("Processing fieldbook '{}'".format(book_id))

                for sheet in sheet_names:
                    if verbose > 1:
                        print("Downloading '{}'".format(sheet))
                    data = book.list(sheet)
                    outtfile = os.path.join(outpath, "{}.json".format(sheet))
                    if verbose > 2:
                        print("Saving data to '{}'".format(outtfile))
                    json.dump(data, open(outtfile, 'w'), indent=4)
                    if friendly:
                        time.sleep(0.05)
            else:
                print("'{}' section must include `id`, `key`, and `secret`.".
                      format(section_name))
Пример #18
0
    def handle(self, *args, **kwargs):
        self.book_id = kwargs.get('book_id')
        self.outdir = kwargs.get('outdir')
        self._key = kwargs.get('key', os.getenv('FIELDBOOK_KEY', None))
        self._secret = kwargs.get('secret', os.getenv('FIELDBOOK_SECRET', None))
        self.verbosity = kwargs.get('verbosity')
        self.no_save = kwargs.get('no_save')

        if not (self._key and self._secret):
            raise CommandError(
                """
You must provide the Fieldbook book's API key and secret, either as option flags or by
setting FIELDBOOK_KEY and FIELDBOOK_SECRET environment variables
                """
            )

        if not os.path.exists(self.outdir):
            raise CommandError("outdir does not exist. Either create the directory or choose an existing one.")

        outpath = os.path.abspath(self.outdir)

        book = Fieldbook(self.book_id, key=self._key, secret=self._secret)

        if self.verbosity > 1:
            self.stdout.write("Fetching sheet names for book {}".format(self.book_id))
        sheet_names = book.sheets()

        for sheet in sheet_names:
            if self.verbosity > 1:
                self.stdout.write("Fetching data for sheet {}".format(sheet))

            data = book.list(sheet)

            outtfile = os.path.join(outpath, "{}.json".format(sheet))
            if not self.no_save:
                if self.verbosity > 1:
                    self.stdout.write("Writing data to {}".format(outtfile))
                json.dump(data, open(outtfile, 'w'), indent=4)
            else:
                self.stdout.write(json.dumps(data))
Пример #19
0
def download(args):
    friendly = getattr(args, 'friendly', False)
    verbose = getattr(args, 'verbose', 0)
    config = configparser.ConfigParser()
    config.read_file(args.configfile)

    for section_name, section_conf in config.items():
        if section_name != 'DEFAULT':
            if verbose > 2:
                print("Reading config for '{}'".format(section_name))
            book_id = section_conf.get('id')
            book_key = section_conf.get('key')
            book_secret = section_conf.get('secret')
            outdir = section_conf.get('outdir')
            if not os.path.exists(outdir):
                raise FileNotFoundError(outdir)
            outpath = os.path.abspath(os.path.join(outdir, section_name))
            if not os.path.exists(outpath):
                if verbose > 0:
                    print("Creating '{}'".format(outpath))
                os.mkdir(outpath)
            if book_id and book_key and book_secret:
                book = Fieldbook(book_id, key=book_key, secret=book_secret)
                sheet_names = book.sheets()
                if verbose > 2:
                    print("Processing fieldbook '{}'".format(book_id))

                for sheet in sheet_names:
                    if verbose > 1:
                        print("Downloading '{}'".format(sheet))
                    data = book.list(sheet)
                    outtfile = os.path.join(outpath, "{}.json".format(sheet))
                    if verbose > 2:
                        print("Saving data to '{}'".format(outtfile))
                    json.dump(data, open(outtfile, 'w'), indent=4)
                    if friendly:
                        time.sleep(0.05)
            else:
                print("'{}' section must include `id`, `key`, and `secret`.".format(section_name))
Пример #20
0
    def test_client_intialize_with_authentication(self):
        client = Fieldbook('fakebook', key='foo', secret='bar')

        self.assertEqual(client._key, 'foo')
        self.assertEqual(client._secret, 'bar')
        self.assertEqual(client.session.auth, ('foo', 'bar'))