Skip to main content

Wrapper for Google's Python API.

Project description

googleapiutils2

Utilities for Google's v2 Python API. Currently supports sections of the following resources:

  • Drive: DriveResource, FilesResource, PermissionsResource, RepliesResource, ...
  • Sheets: SpreadsheetsResource, ValuesResource, ...
  • Geocoding

Quickstart

This project requires Python ^3.10 to run.

Several dependencies are needed, namely the aforesaid Google Python API, but also Google's oauth library, and requests. Pre-bundled for ease of use are the fairly monolithic google-api-stubs, which greatly improves the usage experience.

via poetry

Install poetry, then run

poetry install

And you're done.

Overview

The library was written to be consistent with Google's own Python API - just a little easier to use. Most Drive and Sheets operations are supported using explicit parameters. But most functions thereof take a **kwargs parameter (used for parameter forwarding) to allow for the more granular usage of the underlying API.

A note on IDs: anytime a resource ID is needed, one can be provide the actual resource ID, or the URL to the resource. If a URL is provided, this mapping is cached for future use.

Authentication

Before using a Drive or Sheets object, one must first authenticate. This is done via the google.oauth2 library, creating a Credentials object.

The library supports two methods of authentication:

  • via a Google service account (recommended, see more here)
  • via OAuth2 (see more here)

With a service account, one can programmatically access resources without user input. This is by far the easiest route, but requires a bit of setup.

If not using a service account, the library will attempt to open a browser window to authenticate using the provided credentials. This authentication is cached for future usage (though it does expire on some interval) - so an valid token path is required.

See the get_oauth2_creds function for more information.

Drive

Example: copy a file to a folder.

creds = get_oauth2_creds(config_obj)
drive = Drive(creds)

filename = "Heyy"

file = drive.get_name(filename, parents=[FOLDER_URL])
if file is not None:
    drive.delete(file["id"])

file = drive.copy(file_id=FILE_ID, to_filename=filename, to_folder_id=FOLDER_URL)

What the above does is:

  • Get the OAuth2 credentials from the config_obj object (JSON object representing the requisite credentials, see here for more information).
  • create a Drive object thereupon.
  • Get the file with the given name, and delete it if it exists.
  • Copy the file with the given ID to the given folder, and return the new file.

Sheets

Example: update a range of cells in a sheet.

creds = get_oauth2_creds(config_path)
sheets = Sheets(creds)

Sheet1 = SheetsValueRange(sheets, SHEET_ID, sheet_name="Sheet1")

rows = [
    {
        "Heyy": "99",
    }
]
Sheet1[2:3, ...].update(rows)

What the above does is:

  • Get the OAuth2 credentials from the config_path file (see here for more information).
  • create a Sheets object thereupon.
  • Create a SheetsValueRange object, which is a wrapper around the spreadsheets.values API.
  • Update the range Sheet1!A2:B3 with the given rows.

Note the slicing syntax, which will feel quite familiar for any user of Numpy or Pandas.

SheetSlice

A SheetsValueRange object can be sliced in a similar manner to that of a Numpy array. The syntax is as follows:

slc = Sheet[rows, cols]

Wherein rows and cols are either integers, slices of integers (stride is not supported), strings (in A1 notation), or ellipses (...).

Note that Google's implementation of A1 notation is 1-indexed; 0 is invalid (e.g., 1 maps to A, 2 to B, etc.)

ix = SheetSlice["Sheet1", 1:3, 2:4] #  "Sheet1!B2:D4"
ix = SheetSlice["Sheet1", "A1:B2"]  #  "Sheet1!A1:B2"
ix = SheetSlice[1:3, 2:4]           #  "Sheet1!B2:D4"
ix = SheetSlice["A1:B2"]            #  "Sheet1!A1:B2"
ix = SheetSlice[..., 1:3]           #  "Sheet1!A1:Z3"

values = {
    SheetSlice["A1:B2"]: [
        ["Heyy", "99"],
        ["Heyy", "99"],
    ],
} # "Sheet1!A1:B2" = [["Heyy", "99"], ["Heyy", "99"]]

A SheetSlice can also be used as a key into a SheetsValueRange, or a dictionary (to use in updating a sheet's range via .update(), for example). Further, a SheetsValueRange can be sliced in a similar manner to that of a SheetSlice.

Sheet1[2:3, ...].update(rows)
...

Project details


Release history Release notifications | RSS feed

This version

0.9.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

googleapiutils2-0.9.1.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

googleapiutils2-0.9.1-py3-none-any.whl (26.5 kB view details)

Uploaded Python 3

File details

Details for the file googleapiutils2-0.9.1.tar.gz.

File metadata

  • Download URL: googleapiutils2-0.9.1.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Darwin/22.5.0

File hashes

Hashes for googleapiutils2-0.9.1.tar.gz
Algorithm Hash digest
SHA256 415a4fc7a4cf755b68a0675c58e08099479c92fcfba53e1c5e237f955b8270c3
MD5 2b62d697f46840881641209793cc2284
BLAKE2b-256 7fb1cc404a54b846501a880ecfb7e428ba55b36464abd33f20142c07995026b5

See more details on using hashes here.

File details

Details for the file googleapiutils2-0.9.1-py3-none-any.whl.

File metadata

  • Download URL: googleapiutils2-0.9.1-py3-none-any.whl
  • Upload date:
  • Size: 26.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Darwin/22.5.0

File hashes

Hashes for googleapiutils2-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bd45f2b609cf4da647ba57ffa83e1083227f8931e8442c790c1ee9b0c323c49d
MD5 8599d424ab5e6c43fe86396cfc5d8dd4
BLAKE2b-256 16af5c656338a2ed5d1e77cfd27c1296f9366fea5d83c1a9ab9e9560575abda1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page