Skip to main content

Fast MySQL driver build in Cython (Sync and Async).

Project description

Fast MySQL driver build in Cython (Sync and Async).

Created to be used in a project, this package is published to github for ease of management and installation across different modules.

Installation

Install from PyPi

pip install sqlcycli

Install from github

pip install git+https://github.com/AresJef/SQLCyCli.git

For Linux systems, if you encounter the following error when installing the SQLCyCli dependency mysqlclient:

Exception: Can not find valid pkg-config name.
Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually

Try the following to fix dependency issue (source: Stack Overflow):

sudo apt-get install pkg-config python3-dev default-libmysqlclient-dev build-essential

Requirements

  • Python 3.10 or higher.
  • MySQL 5.5 or higher.

Features

  • Written in Cython for optimal performance (especially for SELECT/INSERT query).
  • All classes and methods are well documented and static typed.
  • Supports both Sync and Async connection to the server.
  • API Compatiable with PyMySQL and aiomysql.
  • Support conversion (escape) for most of the native python types, and objects from libaray numpy and pandas. Does NOT support custom conversion (escape).

Benchmark

The following result comes from benchmark:

  • Device: MacbookPro M1Pro(2E8P) 32GB
  • Python: 3.12.4
  • MySQL: 8.3.0
  • mysqlclient: 2.2.4
  • PyMySQL: 1.1.1
  • aiomysql: 0.2.0
  • asyncmy: 0.2.9
# Unit: second | Lower is better
name        type    rows    insert-per-row  insert-bulk select-per-row  select-all
mysqlclient sync    50000   1.738263        0.430990    1.726277        0.117284
SQLCyCli    sync    50000   2.239658        0.293476    2.341073        0.062193
PyMySQL     sync    50000   2.662151        0.414243    4.245126        0.327544
SQLCyCli    async   50000   3.421401        0.276260    4.336240        0.139700
aiomysql    async   50000   3.579845        0.396187    5.151401        0.322439
asyncmy     async   50000   3.793308        0.409774    5.477049        0.318582
# Unit: second | Lower is better
name        type    rows    update-per-row  update-all  delete-per-row  delete-all
mysqlclient sync    50000   1.768599        0.356437    1.571645        0.108843
SQLCyCli    sync    50000   2.282858        0.368871    2.105368        0.113834
PyMySQL     sync    50000   2.560405        0.346608    2.307289        0.105239
SQLCyCli    async   50000   3.475850        0.346580    3.335821        0.105670
aiomysql    async   50000   3.574864        0.347389    3.261974        0.105169
asyncmy     async   50000   3.762817        0.344875    3.575200        0.106150

Usage

Use connect() to create one connection (Sync or Async) to the server.

import asyncio
import sqlcycli

HOST = "localhost"
PORT = 3306
USER = "root"
PSWD = "password"

# Synchronous Connection
def test_sync_connection() -> None:
    with sqlcycli.connect(HOST, PORT, USER, PSWD) as conn:
        with conn.cursor() as cur:
            cur.execute("SELECT 1")
            res = cur.fetchone()
            assert res == (1,)
    # Connection closed
    assert conn.closed()

# Asynchronous Connection
async def test_async_connection() -> None:
    async with sqlcycli.connect(HOST, PORT, USER, PSWD) as conn:
        async with conn.cursor() as cur:
            await cur.execute("SELECT 1")
            res = await cur.fetchone()
            assert res == (1,)
    # Connection closed
    assert conn.closed()

if __name__ == "__main__":
    test_sync_connection()
    asyncio.run(test_async_connection())

Use create_pool() to create a Pool for managing and maintaining Async connections to the server.

import asyncio
import sqlcycli

HOST = "localhost"
PORT = 3306
USER = "root"
PSWD = "password"

# Pool (Context Manager: Connected)
async def test_pool_context_connected() -> None:
    async with sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1) as pool:
        # Pool is connected: 1 free connection (min_size=1)
        assert not pool.closed() and pool.free == 1
        async with pool.acquire() as conn:
            async with conn.cursor() as cur:
                await cur.execute("SELECT 1")
                res = await cur.fetchone()
                assert res == (1,)
    # Pool closed
    assert pool.closed() and pool.total == 0

# Pool (Context Manager: Disconnected)
async def test_pool_context_disconnected() -> None:
    with sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1) as pool:
        # Pool is not connected: 0 free connection (min_size=1)
        assert pool.closed() and pool.free == 0
        # Connect automatically
        async with pool.acquire() as conn:
            async with conn.cursor() as cur:
                await cur.execute("SELECT 1")
                res = await cur.fetchone()
                assert res == (1,)
        # 1 free connection
        assert pool.free == 1
    # Pool closed
    assert pool.closed() and pool.total == 0

# Pool (Create Directly: Connected)
async def test_pool_direct_connected() -> None:
    pool = await sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1)
    # Pool is connected: 1 free connection (min_size=1)
    assert not pool.closed() and pool.free == 1
    async with pool.acquire() as conn:
        async with conn.cursor() as cur:
            await cur.execute("SELECT 1")
            res = await cur.fetchone()
            assert res == (1,)
    # Close pool manually
    await pool.close()
    assert pool.closed() and pool.total == 0

if __name__ == "__main__":
    asyncio.run(test_pool_context_connected())
    asyncio.run(test_pool_context_disconnected())
    asyncio.run(test_pool_direct_connected())

Acknowledgements

SQLCyCli is build on top of the following open-source repositories:

SQLCyCli is based on the following open-source repositories:

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

sqlcycli-1.0.5.tar.gz (2.6 MB view details)

Uploaded Source

Built Distributions

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

sqlcycli-1.0.5-cp312-cp312-win_arm64.whl (3.7 MB view details)

Uploaded CPython 3.12Windows ARM64

sqlcycli-1.0.5-cp312-cp312-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.12Windows x86-64

sqlcycli-1.0.5-cp312-cp312-musllinux_1_1_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

sqlcycli-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

sqlcycli-1.0.5-cp312-cp312-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sqlcycli-1.0.5-cp312-cp312-macosx_10_9_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

sqlcycli-1.0.5-cp312-cp312-macosx_10_9_universal2.whl (5.5 MB view details)

Uploaded CPython 3.12macOS 10.9+ universal2 (ARM64, x86-64)

sqlcycli-1.0.5-cp311-cp311-win_arm64.whl (3.7 MB view details)

Uploaded CPython 3.11Windows ARM64

sqlcycli-1.0.5-cp311-cp311-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.11Windows x86-64

sqlcycli-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl (11.6 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

sqlcycli-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

sqlcycli-1.0.5-cp311-cp311-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

sqlcycli-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

sqlcycli-1.0.5-cp311-cp311-macosx_10_9_universal2.whl (5.5 MB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

sqlcycli-1.0.5-cp310-cp310-win_arm64.whl (3.7 MB view details)

Uploaded CPython 3.10Windows ARM64

sqlcycli-1.0.5-cp310-cp310-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.10Windows x86-64

sqlcycli-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

sqlcycli-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

sqlcycli-1.0.5-cp310-cp310-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

sqlcycli-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

sqlcycli-1.0.5-cp310-cp310-macosx_10_9_universal2.whl (5.5 MB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file sqlcycli-1.0.5.tar.gz.

File metadata

  • Download URL: sqlcycli-1.0.5.tar.gz
  • Upload date:
  • Size: 2.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.5.tar.gz
Algorithm Hash digest
SHA256 877bc9bc8d279658f78a7b66476638b2224556e663d653906c7f586628eb1621
MD5 1c96fdd0c32179cfafb3057fd9b5c27f
BLAKE2b-256 400d05e6918921fea6343019be1bf6f21b6812b8745dd7a524d3cff41ae9b96e

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: sqlcycli-1.0.5-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.5-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 95a58f2e756bd7acb127b7ec11633d2d4a62d6979c1fbe268b4d59b785f3dd10
MD5 31d41a00f40469aae8837847c66a2b1a
BLAKE2b-256 d3a322b84d99dd16f36d1f6b8d8b9b6e15786edaa59be0f3780fd200689d8681

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: sqlcycli-1.0.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 19e546f985b332b7c9d224b3321ba22da348ae1e6af1ca19a5bfc2223d6541a6
MD5 3232add1a8645a0912f0cd81727950fc
BLAKE2b-256 a4533e12264354140b96fbecde3fc2a4085da0f412c09bce208eeb1821bd8dd7

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 1e181d4b3e291b4d3ebb091bc2d9d9cd9b0950b351788f161ca6c49ee446e0c5
MD5 79f2848a5f8ef552a082717c2165daae
BLAKE2b-256 ff1891a03d0e1f0d5d74b1bca28c723f21cb11a34047118713ec93cdc0ad0981

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f6a4bb6de50dfce30fe1a8026c48864135b72009abd7ef795b8d086f44c2d3fc
MD5 e77e8fdb33c3479b385cfd3db7997abe
BLAKE2b-256 91f99c8e9756d2827dc72cda2f167ca9c5d63b61a534526774f2d2583ab44f2d

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 48621154ec186711cb0267a5a2b4c5b5be4798c1922f05667731956870276e8e
MD5 6476617c628953e29238ab27f4e7d8e9
BLAKE2b-256 ac28a2ed4e6d86f472e0b9e87a92ae46dea4f9be8d3d13a7052f582887c9d282

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5a1c2aebb1b436dc4c8c0baf241ee68f8efd9f80f536c4b34fc8271f61e6de93
MD5 26c264a6df04d4dd2ea9f4769ffc7134
BLAKE2b-256 60bf6965b2a5f16c972019f75d44644cef585f78f6bebdd5ea6d6b1d0cf65e36

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 49028b3781d31e8250106d39be869a32ca47297fe971989a873a69c5ce0f29dc
MD5 4d7dcf7e851604205103d7f14f1ed0bd
BLAKE2b-256 72958da0c89d28ad7c9fde77bf2772adc039a3519b5210c9c2f95b5d6c9cbd8e

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: sqlcycli-1.0.5-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.5-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 fd781759df88329ad70d33cb64724ea008b6dd6782db9887ecd9566b5e9b5675
MD5 4c72674265da9043558da1f5d4fb21fb
BLAKE2b-256 43ac40ba393797af351a15e2790e01e2b84ab48f8211058670d49062ef68c6dc

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: sqlcycli-1.0.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 13d4fb0e8db73b70d98652d4bdae3f8ecdbda8fe97023bf4eb97a4a240a47e24
MD5 25aa900b85d4830b07181417a766865b
BLAKE2b-256 9baa80010e3aea3834ae60c00b8819706c9555ececf054c9aaa1709f71aebd10

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 c0d04b1b3ee12d115c7cde906bc5977894a488cb6dd269532d2b02e9225a6d16
MD5 da3873841fc0c871d9e141bdde99044b
BLAKE2b-256 1d2521fbc24bd5737dadbcfb71c60d7790425ecc2d68b85811ecc10077a440c5

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9d451b8aaab745b5bcb9f63b9489c2f15c6ef90755ded86164ba1d17429ad0d3
MD5 e5a4e787821b92cb7d4ee5d6e92a1d4a
BLAKE2b-256 e6789846f7d861296901ea80480f83e5251879898aaa2b0539742f154a65719e

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 906820f720aa45136638fa3bac34e071289334de4415ea80b57d496c766e9fab
MD5 ba707c519789fb6be4a1eba49b5775ca
BLAKE2b-256 6b67de2245d58c9be9c0f489eae025164bfc6e59ddb3c85d0b7d7c92733d3ac3

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7ee3cd04fb4c6a9276fcfcab1062990992dc1ecc066ecec959d0f26b2bf50d91
MD5 6d7d239443e6b038797bbed2b33f670b
BLAKE2b-256 870a5c86ad9684293ad65b0f777c78326f92fb926ef394deee52d679c344856d

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 009428d4c93f4653d4faf22b444c657b1b321b5e9a801cbcdff75e61ec7b83c5
MD5 f4605a1781c53086dd4922b95ed13922
BLAKE2b-256 46153217f513a9da165e2c01eb1a2cd52c54e49c67a0abbe9c8399cb7e00628f

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp310-cp310-win_arm64.whl.

File metadata

  • Download URL: sqlcycli-1.0.5-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.10, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.5-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 67c4b4b028dd59f7cd19edbf3e60350ad352e40b7ceaeb8beaa7a0dcf7b45349
MD5 11b141d5026c58d49a012bf47df78f2e
BLAKE2b-256 6b40ea9470e3b606e0011eec1c3626d14ee040901a26438d1d8e0b245da49dde

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: sqlcycli-1.0.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7d16781a28dfad410e8371d327d1dee611821d741083c210ee601bf2999d04bb
MD5 83f1a6ec7d2ab8a39bc64347f8551930
BLAKE2b-256 b5d4b3df22c27a25b9d113f3b11fe9e1ad958ef39cd73dec14ba8c5f0bbd8b3d

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8d2a84be2aca5be9f459e1e676f09b9970f10b04c4193dc3c950639d4cbd1dfe
MD5 c70ba62208cf0f36da4dcab2dacf78a1
BLAKE2b-256 7044b2298c58861b63590a3f8e5690718d256e8116da725a5691dd3ed7bf4862

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b26a4531dfaf0d844c7c41eaa368944435e09acd06cde33e8d40f5212169dc85
MD5 7dd6962212f518afd27dca92c203c6d2
BLAKE2b-256 53d082b87a2965fd3e15d8e562fa9594f3f872e7c832e9a0be6b84c421bcf289

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b4e3ccc60c78413ac3e9abedd9668f312dbc5c9b46dc126ed79ea2e3c75ff2ee
MD5 aa638f5327cd694a96132f39fc5fc3cf
BLAKE2b-256 2b1faac7d54b3b539b7e5127157a40fe4610a8eedb304f2dd1d07eae7082b47e

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2bf453682e5c809e7e59c6023d7d714f1a3326dba7760befdbabd7677ff88888
MD5 3285a463c9e48f6851588d9c6e2f0148
BLAKE2b-256 2b645273fd5247656b8a0b9b961cc7f18c85339adeb6bc8632e2b598ee44e8de

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.5-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.5-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 ef8134101c9899473fce5d8b81e24801a36a085a5aa751ead42f91ed325afc47
MD5 596d2e8bb61187b086fd96a23c4ce6c5
BLAKE2b-256 99ce1949eb9e1b1fe897af788947d56fe1e5becddcbd637d9be0496546481444

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