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.6.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.6-cp312-cp312-win_arm64.whl (3.7 MB view details)

Uploaded CPython 3.12Windows ARM64

sqlcycli-1.0.6-cp312-cp312-win_amd64.whl (4.0 MB view details)

Uploaded CPython 3.12Windows x86-64

sqlcycli-1.0.6-cp312-cp312-musllinux_1_1_x86_64.whl (11.7 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

sqlcycli-1.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

sqlcycli-1.0.6-cp312-cp312-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sqlcycli-1.0.6-cp312-cp312-macosx_10_9_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

sqlcycli-1.0.6-cp312-cp312-macosx_10_9_universal2.whl (5.6 MB view details)

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

sqlcycli-1.0.6-cp311-cp311-win_arm64.whl (3.8 MB view details)

Uploaded CPython 3.11Windows ARM64

sqlcycli-1.0.6-cp311-cp311-win_amd64.whl (4.0 MB view details)

Uploaded CPython 3.11Windows x86-64

sqlcycli-1.0.6-cp311-cp311-musllinux_1_1_x86_64.whl (11.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

sqlcycli-1.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

sqlcycli-1.0.6-cp311-cp311-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

sqlcycli-1.0.6-cp311-cp311-macosx_10_9_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

sqlcycli-1.0.6-cp311-cp311-macosx_10_9_universal2.whl (5.6 MB view details)

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

sqlcycli-1.0.6-cp310-cp310-win_arm64.whl (3.8 MB view details)

Uploaded CPython 3.10Windows ARM64

sqlcycli-1.0.6-cp310-cp310-win_amd64.whl (4.0 MB view details)

Uploaded CPython 3.10Windows x86-64

sqlcycli-1.0.6-cp310-cp310-musllinux_1_1_x86_64.whl (11.1 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

sqlcycli-1.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

sqlcycli-1.0.6-cp310-cp310-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

sqlcycli-1.0.6-cp310-cp310-macosx_10_9_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

sqlcycli-1.0.6-cp310-cp310-macosx_10_9_universal2.whl (5.6 MB view details)

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

File details

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

File metadata

  • Download URL: sqlcycli-1.0.6.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.6.tar.gz
Algorithm Hash digest
SHA256 331350459b5c99eb7ce89dc8a9166dbd3b900d76a3ebefa9e34495f681815afc
MD5 48d55450a0ed0a551df9e9e694436288
BLAKE2b-256 255058b6f71f7eb9a0b7887aeebc58f3087fd22a9cac50653ce232fd033f0d55

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sqlcycli-1.0.6-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.6-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 24af1fe0a57382e61b337f2a4ec4df98bdd17612c4b9c3a572c842a905860f42
MD5 24e4889364cad02594ad2f482fc7f16c
BLAKE2b-256 3617399a579f3a191a596731bb612fefaa2ab71c62ed3e0dc2d8699c81c3a490

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sqlcycli-1.0.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 4.0 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.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d47d98e1df5f4afd9c96a111c02a4c0ed51d6431291604ca8550a2dcf466467c
MD5 56ec86986c7ae472bc049a22668a49a6
BLAKE2b-256 d321709092ac34cbd834e27be18dccaf203b0e903ebf849d177c78dd14fab46c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 2c2115e0ebaf49a3d0925911a7da08d667f49efe0dd57b6cf90509217d4805f1
MD5 953caa88a2254b59c8b4dd6230814484
BLAKE2b-256 16f86f2f034eded4e69bd247d36984e5a7aa873506bba17a81172a6cab92342a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6ee337ea7f73b650e328dc41e73e6d99b85e61041e8a3a5265caa2c76380910c
MD5 4a4c82faf7838a9a533070bcc6755a1d
BLAKE2b-256 aff3ffcc76d162d928728b4eaba9be4f64d91869c4b855908bc7d0dd18dafca9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aa6d1fe68e6cac57dd0693881ea13b687aa7230aac9699fb4989c5e3e4061610
MD5 73685a90d1e90f11950a993dfc55acdd
BLAKE2b-256 1a61d2ab738dbf0fc358edc7ca9eac759deccebd694d6d442c53076d1ba2692b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6883159123fc59bc937fda0bd8878b89b46dc329ee5918752a211f63d7d90c01
MD5 2005d6764f9548a480dc6c8b035c03d4
BLAKE2b-256 c8c1f8d76e565f4416f9a25f72bef87da4af56ca98463a8216da8d9a14e958fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d9a93b813b56c52bb19228ce432d3cc9ab8722aae54dbea34dac99fd40d638a8
MD5 69a4f453c1e7bea2333c8a8ae49dff72
BLAKE2b-256 9cdac898290aff0bc3bd7cb48714fb816d9accf8ef6362d79d5f2fbb1a59e90d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sqlcycli-1.0.6-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 3.8 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.6-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 b68ce55b4f7e1ad4ca598bbcee9ce11648299086a7ab8a445bf756a50e05319c
MD5 e084b35a51e9674eb1c9c17fe0ff6c5f
BLAKE2b-256 5bc9bbb32bbd2e597f83e891348d81278b35c1081aa86270c4dbadc6d4c1a82e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sqlcycli-1.0.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 4.0 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.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3a8342f679898cce59c8df2242e36773c0b8571d9ef27586d9352118ec8c78f6
MD5 49e5aaae9a19a979d76549db8606021a
BLAKE2b-256 03f35c8e12ce7ad0ec5c74ecb3921cedae3f94b367fb700b4e1ce2fff54764ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 6e935d61dbb20b37deebcb86a49e0535d3e763c71b38d0ba2c8de11a4115aecc
MD5 dc1134fb8f7164b4edf021b03c4cd544
BLAKE2b-256 738640d0415f220362c0a737a5bca6d705f6c4c24891d9f901db6630f481ec85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a4b7655b6b05b559bd7ec576138552809dea43462208986546307267b2d04e31
MD5 d7dfd05d9d49db8a6dbcba957953e862
BLAKE2b-256 57983c2ce1aa7c05d7eec2ad9b7a9a563a9cee5116969cb4ac47704806de176a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b329b16c8d2b03a357a1398ae5aff1541bfa781d227e8200261a92339c6208f
MD5 e088046a2ef6b6059a4835beba70ac1d
BLAKE2b-256 df50afeae7f604ba1655ae4fb028637df875078c1b1ef3ec8d8f02b7c95ce5e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 76cbd948e51c48f11405de768c1a3805727eadb5601d781e9e0caad785be59d1
MD5 b387bf3eb4c5d8d204fd4e037fa181e1
BLAKE2b-256 85d1897c65576b5878d3d895b71fbd07b40f9c4be6aa9b1c75c1189ffb61540b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7d387ef329c8da3c9e29e4f584a5eca149cfd683fb9d0e32445c99a1216d1c06
MD5 85f5f0e244cfb67ad88f8cf33a222edd
BLAKE2b-256 43a17325f3b0bfbc74c43f345376e095ffc5e04865dfce5a7440b5daa7586f93

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sqlcycli-1.0.6-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 3.8 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.6-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 ceefaa29a967b293725d40ab38a187b385e09945f5b96e0edbf368b838b65ce0
MD5 12e60cb5cb450fc96d787ca68df02644
BLAKE2b-256 ae9f2de4d925eb87fd3e33a50246ed40bb789f38f28404274293377af0b8c149

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sqlcycli-1.0.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 4.0 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.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 81b9b1b04fa7ded8c7b2d695cdac43eddeb031e4a2430cfc349392584ef7976f
MD5 b02f4f1eb1a0c78821caab79bab2adb8
BLAKE2b-256 1d1a5d0ece4a6e5c3c3fcdc865f986f0ffd932920b9b5a0f1caef43ab816adcb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 e4e46252fa13ed3cd1cd9febcbae2cbc31045053c5cd5a2bba606535abf029c3
MD5 5b9f33635d0dde6cd56923ffa8b0fcfd
BLAKE2b-256 f6d5184a1a4c9a456a585e553afc7f39d0684b013c937cb3cea7af923de31c09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ae65e54791047bb8416fb7012f5e4ab71cb0436178607a919af6b7166e234010
MD5 5359f867bf54dd134d9a287ae95abe9c
BLAKE2b-256 1a09e27b08b13bad3fc2fe15651cc092a455eecb755d3d9981f5576b3f4af55d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a580d9acc9953b7b69fcdc38fdd11746544bd1c54809d3f5960cb6c6262a8d47
MD5 86c09625b33dd5399653ba8106cc6738
BLAKE2b-256 1806981ced4ef6b06bfd694938c7cad3b442fe3939e59ffa257809549911363f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2c0408f0f10a92dca875abe31433687bfbade1b44e86f634e38688bfc5ef8466
MD5 dcbc2f9b749a673f8eb7f33d337a1a9c
BLAKE2b-256 510db2070776e0c9fa9b2a2d8bb23e18cbca5de0189207a906fa3588a15517e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlcycli-1.0.6-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 2816a9c4d41492772f4c2458a17ffaf84a5d48f5bed95b1e7caf0c8a794da8cc
MD5 b3da0292ca7b15f239d362f722a6ebbc
BLAKE2b-256 9925111a5ea271ab870968261db7c435318ce1a41ec5f6b9d3ab804618e7999d

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