Skip to main content

Python client for the reactive backend-as-a-service Convex.

Project description

Convex

The official Python client for Convex.

PyPI GitHub

Write and read data from a Convex backend with queries, mutations, and actions. Get up and running at docs.convex.dev.

Installation:

pip install convex

Basic usage:

>>> from convex import ConvexClient
>>> client = ConvexClient('https://example-lion-123.convex.cloud')
>>> messages = client.query("messages:list")
>>> from pprint import pprint
>>> pprint(messages)
[{'_creationTime': 1668107495676.2854,
  '_id': '2sh2c7pn6nyvkexbdsfj66vd9h5q3hg',
  'author': 'Tom',
  'body': 'Have you tried Convex?'},
 {'_creationTime': 1668107497732.2295,
  '_id': '1f053fgh2tt2fc93mw3sn2x09h5bj08',
  'author': 'Sarah',
  'body': "Yeah, it's working pretty well for me."}]
>>> client.mutation("sendMessage", dict(author="Me", body="Hello!"))

To find the url of your convex backend, open the deployment you want to work with in the appropriate project in the Convex dashboard and click "Settings" where the Deployment URL should be visible. To find out which queries, mutations, and actions are available check the Functions pane in the dashboard.

To see logs emitted from Convex functions, set the debug mode to True.

>>> client.set_debug(True)

To provide authentication for function execution, call set_auth().

>>> client.set_auth("token-from-authetication-flow")

Join us on Discord to get your questions answered or share what you're doing with Convex. If you're just getting started, see https://docs.convex.dev to see how to quickly spin up a backend that does everything you need in the Convex cloud.

Convex types

Convex backend functions are written in JavaScript, so arguments passed to Convex RPC functions in Python are serialized, sent over the network, and deserialized into JavaScript objects. To learn about Convex's supported types see https://docs.convex.dev/using/types.

In order to call a function that expects a JavaScript type, use the corresponding Python type or any other type that coerces to it. Values returned from Convex will be of the corresponding Python type.

JavaScript Type Python Type Example Other Python Types that Convert
null None None
bigint ConvexInt64 (see below) ConvexInt64(2**60)
number float or int 3.1, 10
boolean bool True, False
string str 'abc'
ArrayBuffer bytes b'abc' ArrayBuffer
Array list [1, 3.2, "abc"] tuple, collections.abc.Sequence
object dict {a: "abc"} collections.abc.Mapping

Ints and Floats

While Convex supports storing Int64s and Float64s, idiomatic JavaScript pervasively uses the (floating point) Number type. In Python floats are often understood to contain the ints: the float type annotation is generally understood as Union[int, float].

Therefore, the Python Convex client converts Python's floats and ints to a Float64 in Convex.

To specify a JavaScript BigInt, use the ConvexInt64 class. Functions which return JavaScript BigInts will return ConvexInt64 instances.

Convex Errors

The Python client supports the ConvexError type to hold application errors that are propagated from your Convex functions. To learn about how to throw ConvexErrors see https://docs.convex.dev/functions/error-handling/application-errors.

On the Python client, ConvexErrors are Exceptions with a data field that contains some ConvexValue. Handling application errors from the Python client might look something like this:

import convex
client = convex.ConvexClient('https://happy-animal-123.convex.cloud')

try:
    client.mutation("messages:sendMessage", {body: "hi", author: "anjan"})
except convex.ConvexError as err:
    if isinstance(err.data, dict):
        if "code" in err.data and err.data["code"] == 1:
            # do something
        else:
            # do something else
    elif isinstance(err.data, str):
        print(err.data)
except Exception as err:
    # log internally

Pagination

Paginated queries are queries that accept pagination options as an argument and can be called repeatedly to produce additional "pages" of results.

For a paginated query like this:

import { query } from "./_generated/server";

export default query(async ({ db }, { paginationOpts }) => {
  return await db.query("messages").order("desc").paginate(paginationOpts);
});

and returning all results 5 at a time in Python looks like this:

import convex
client = convex.ConvexClient('https://happy-animal-123.convex.cloud')

done = False
cursor = None
data = []

while not done:
    result = client.query('listMessages', {"paginationOpts": {"numItems": 5, "cursor": cursor}})
    cursor = result['continueCursor']
    done = result["isDone"]
    data.extend(result['page'])
    print('got', len(result['page']), 'results')

print('collected', len(data), 'results')

Versioning

While we are pre-1.0.0, we'll update the minor version for large changes, and the patch version for small bugfixes. We may make backwards incompatible changes to the python client's API, but we will limit those to minor version bumps.

Project details


Download files

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

Source Distribution

convex-0.6.0.tar.gz (185.0 kB view details)

Uploaded Source

Built Distributions

convex-0.6.0-cp39-abi3-win_amd64.whl (846.5 kB view details)

Uploaded CPython 3.9+ Windows x86-64

convex-0.6.0-cp39-abi3-win32.whl (834.3 kB view details)

Uploaded CPython 3.9+ Windows x86

convex-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.8 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ x86-64

convex-0.6.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (29.5 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ s390x

convex-0.6.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (26.6 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ ppc64le

convex-0.6.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (26.9 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ i686

convex-0.6.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (20.8 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ ARMv7l

convex-0.6.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (27.0 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ ARM64

convex-0.6.0-cp39-abi3-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.9+ macOS 11.0+ ARM64

convex-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9+ macOS 10.12+ x86-64

File details

Details for the file convex-0.6.0.tar.gz.

File metadata

  • Download URL: convex-0.6.0.tar.gz
  • Upload date:
  • Size: 185.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.3.0

File hashes

Hashes for convex-0.6.0.tar.gz
Algorithm Hash digest
SHA256 5f149f2b5ac4f6f341aa303ce1166e9f176796b1ba665c633ff34982ccfd7250
MD5 2219db66235ca30684dc806109ca9e53
BLAKE2b-256 57989c8928ff73560b08769bb60611c56066dc12b2fdeecb519bc4cf4fe89ac0

See more details on using hashes here.

File details

Details for the file convex-0.6.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: convex-0.6.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 846.5 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.3.0

File hashes

Hashes for convex-0.6.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 671f332f3d6165ed2577d76f95f4fb167f2244f5c6d7ecfb6b2ecff8eec71e1f
MD5 cae7d1ba6ffad2244784cae619d84eae
BLAKE2b-256 1a493220c52d2cde79ad030edd4afd9476863a23c86dca5a66dbae4c3cb9a7c8

See more details on using hashes here.

File details

Details for the file convex-0.6.0-cp39-abi3-win32.whl.

File metadata

  • Download URL: convex-0.6.0-cp39-abi3-win32.whl
  • Upload date:
  • Size: 834.3 kB
  • Tags: CPython 3.9+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.3.0

File hashes

Hashes for convex-0.6.0-cp39-abi3-win32.whl
Algorithm Hash digest
SHA256 4a7ef61334c27caa883614e20b7ff1dd98dabe7ad3007cbf6e26010ff30d7962
MD5 7cbb12e4045d8f0bf9c55344b7275ac1
BLAKE2b-256 ba1fab59bc2f39671a1b8e52d515b29816d7088dc28de6e09543b6379f71efe6

See more details on using hashes here.

File details

Details for the file convex-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for convex-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9cf518bb23990dd2fd20f1f52903fb8632dd2457c9f536bddfb3d33497555bdc
MD5 f85d1c26c20d9ec078466404ad90f75f
BLAKE2b-256 b8c95a2981f78b0e9072b57537a9a85bcee9c6aaf42a467ba414549b948a7b26

See more details on using hashes here.

File details

Details for the file convex-0.6.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for convex-0.6.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 1d0f967c8a40cc9b1317bcf944f262dadff7b079d7e960629d070b3058984199
MD5 f0c616423c1c698e67dfd875950cdad4
BLAKE2b-256 7bc0851952439395161fcd754217d4fd4c61e89efc9b277ffe4c043da6bb66a5

See more details on using hashes here.

File details

Details for the file convex-0.6.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for convex-0.6.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 2aba425b3e2ab72421ec6079b32ec9827240eb8b7c2244c9a59e2d20b63dcf67
MD5 405bfb57240754594e7812a08989f15c
BLAKE2b-256 0f73d431a30fe85b0a32cd5d182b3ebe376c7f68bfec407fa264c99c9acffa21

See more details on using hashes here.

File details

Details for the file convex-0.6.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for convex-0.6.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b1c2aa28c853708734da74a000bddabf8a6cc848a8b7c4b22f6061422baa101d
MD5 be15e1efa4accc36c758316e7e4d912c
BLAKE2b-256 062806c5e322e66fcb2c355816b4b2b0e178b9bdfe6ae9cd82f692bf2d3af830

See more details on using hashes here.

File details

Details for the file convex-0.6.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for convex-0.6.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 491af59ca21470fdefc1a6eaf1d046599c014748c5a568405eaef1a14f7c2531
MD5 2e77d376d74cd6ffc1e68b1501198d92
BLAKE2b-256 dc4c157c186c544847c6faee29ab482135d1fdfeffd197f516975041fe73f646

See more details on using hashes here.

File details

Details for the file convex-0.6.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for convex-0.6.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7b66fe64600e9c9000f333410877c2d5917dc072082ce041dc101323bbee1f97
MD5 b5359aecc4c6afb988fa8b24b883a9e8
BLAKE2b-256 e162b23d9493f6a6cfe4dc93971fb50d96bffeacc9110b511f5f5516872b78d1

See more details on using hashes here.

File details

Details for the file convex-0.6.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for convex-0.6.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c8026544099cc3395065cf25c0b4daac38b901b05083ec953c3130b047ff41a8
MD5 5a73e50217ee5360215c851a9cfd0f1d
BLAKE2b-256 dab5f1af7e6db135340e77cdf948e4dfe0b53c804320f359b51a8a9a61278c01

See more details on using hashes here.

File details

Details for the file convex-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for convex-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d5197bccc6b835375e4764783045f7acdbc9764b7fc6e9dfcdd22b29e74a9f83
MD5 d0ef571d3e54653e01d3f70f06ec3f75
BLAKE2b-256 414a3c20b8e6c0d574d3dc890ab60ddd4bb440901476f213fce8f50c59439406

See more details on using hashes here.

Supported by

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