kcp


Namekcp JSON
Version 0.1.6 PyPI version JSON
download
home_pagehttps://github.com/RealistikDash/kcp.py
SummaryPython bindings and networking for the KCP protocol.
upload_time2024-12-17 18:12:32
maintainerNone
docs_urlNone
authorRealistikDash
requires_python>=3.7
licenseMIT
keywords kcp server client async asyncio
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # kcp.py
Python bindings and networking for the KCP protocol.

## What is KCP?
KCP is a protocol focusing on low latency data delivery with a guarantee of data delivery. It serves as an alternative to the TCP protocol.

## How to install?
kcp.py is available on [PyPi](https://pypi.org/project/kcp/), meaning installing is as simple as running
```sh
pip install kcp
```

## Examples
### Just the raw connection
While kcp.py features a diverse set of pre-implemented uses of KCP (see below), it also allows you to directly manage your KCP connections.
Here is an example using two independent connections locally.
```py
from kcp import KCP

# Create two connections using the same conversation ID.
kcp1 = KCP(
    conv_id=1,
)

kcp2 = KCP(
    conv_id=1,
)

# Update their timing information.
kcp1.update()
kcp2.update()


# Set each connection to send data to the other one (usually this would go through some network layer, but
# for the purpose of the example we do this).
@kcp1.outbound_handler
def send_kcp1(_, data: bytes) -> None:
    kcp2.receive(data)


@kcp2.outbound_handler
def send_kcp2(_, data: bytes) -> None:
    kcp1.receive(data)

# Enqueue data to be sent and send it off.
kcp1.enqueue(b"Hello, world!")
kcp1.flush()

print(kcp2.get_received()) # b"Hello, world!"
```

### Asynchronous Server
kcp.py features an implementation of an asynchronous server using the event loop protocol API.
```py
from kcp.server import Connection
from kcp.server import KCPServerAsync

# Create the initial server instance.
server = KCPServerAsync(
    "127.0.0.1",
    9999,
    conv_id=1,
    no_delay=True,
)

# Ability to set performance options after initialisation.
server.set_performance_options(
    update_interval=10,
)


# Ran when the server starts.
@server.on_start
async def on_start() -> None:
    print("Server started!")


# Ran when a connection is made.
@server.on_data
async def on_data(connection: Connection, data: bytes) -> None:
    print(f"Received data from {connection.address}: {data}")


server.start()
```

### Client
kcp.py also implements a KCP client using Python's sockets and threads.
```py
from kcp import KCPClientSync

client = KCPClientSync(
    "127.0.0.1",
    9999,
    conv_id=1,
)


@client.on_data
def handle_data(data: bytes) -> None:
    print(data)


@client.on_start
def on_start() -> None:
    print("Connected to server!")

    while True:
        client.send(b"Data!")


client.start()
```

You may find more examples in the `examples` directory within the repo.

## Features
- [x] Bindings to the C implementation of KCP
- [x] Pythonic API over said C bindings
- [ ] Asynchronous KCP Client
- [x] Synchronous KCP Client
- [x] Asynchronous KCP Server
- [x] Full support for installation through pip

## Credit
kcp.py uses [the official KCP implementation](https://github.com/skywind3000/kcp) behind the scenes.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/RealistikDash/kcp.py",
    "name": "kcp",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "kcp, server, client, async, asyncio",
    "author": "RealistikDash",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/3c/82/18cff233d7a848788450ae2a4341d5f54bb19afb0d5dd3a06be76ebca953/kcp-0.1.6.tar.gz",
    "platform": null,
    "description": "# kcp.py\nPython bindings and networking for the KCP protocol.\n\n## What is KCP?\nKCP is a protocol focusing on low latency data delivery with a guarantee of data delivery. It serves as an alternative to the TCP protocol.\n\n## How to install?\nkcp.py is available on [PyPi](https://pypi.org/project/kcp/), meaning installing is as simple as running\n```sh\npip install kcp\n```\n\n## Examples\n### Just the raw connection\nWhile kcp.py features a diverse set of pre-implemented uses of KCP (see below), it also allows you to directly manage your KCP connections.\nHere is an example using two independent connections locally.\n```py\nfrom kcp import KCP\n\n# Create two connections using the same conversation ID.\nkcp1 = KCP(\n    conv_id=1,\n)\n\nkcp2 = KCP(\n    conv_id=1,\n)\n\n# Update their timing information.\nkcp1.update()\nkcp2.update()\n\n\n# Set each connection to send data to the other one (usually this would go through some network layer, but\n# for the purpose of the example we do this).\n@kcp1.outbound_handler\ndef send_kcp1(_, data: bytes) -> None:\n    kcp2.receive(data)\n\n\n@kcp2.outbound_handler\ndef send_kcp2(_, data: bytes) -> None:\n    kcp1.receive(data)\n\n# Enqueue data to be sent and send it off.\nkcp1.enqueue(b\"Hello, world!\")\nkcp1.flush()\n\nprint(kcp2.get_received()) # b\"Hello, world!\"\n```\n\n### Asynchronous Server\nkcp.py features an implementation of an asynchronous server using the event loop protocol API.\n```py\nfrom kcp.server import Connection\nfrom kcp.server import KCPServerAsync\n\n# Create the initial server instance.\nserver = KCPServerAsync(\n    \"127.0.0.1\",\n    9999,\n    conv_id=1,\n    no_delay=True,\n)\n\n# Ability to set performance options after initialisation.\nserver.set_performance_options(\n    update_interval=10,\n)\n\n\n# Ran when the server starts.\n@server.on_start\nasync def on_start() -> None:\n    print(\"Server started!\")\n\n\n# Ran when a connection is made.\n@server.on_data\nasync def on_data(connection: Connection, data: bytes) -> None:\n    print(f\"Received data from {connection.address}: {data}\")\n\n\nserver.start()\n```\n\n### Client\nkcp.py also implements a KCP client using Python's sockets and threads.\n```py\nfrom kcp import KCPClientSync\n\nclient = KCPClientSync(\n    \"127.0.0.1\",\n    9999,\n    conv_id=1,\n)\n\n\n@client.on_data\ndef handle_data(data: bytes) -> None:\n    print(data)\n\n\n@client.on_start\ndef on_start() -> None:\n    print(\"Connected to server!\")\n\n    while True:\n        client.send(b\"Data!\")\n\n\nclient.start()\n```\n\nYou may find more examples in the `examples` directory within the repo.\n\n## Features\n- [x] Bindings to the C implementation of KCP\n- [x] Pythonic API over said C bindings\n- [ ] Asynchronous KCP Client\n- [x] Synchronous KCP Client\n- [x] Asynchronous KCP Server\n- [x] Full support for installation through pip\n\n## Credit\nkcp.py uses [the official KCP implementation](https://github.com/skywind3000/kcp) behind the scenes.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python bindings and networking for the KCP protocol.",
    "version": "0.1.6",
    "project_urls": {
        "Documentation": "https://github.com/RealistikDash/kcp.py",
        "Homepage": "https://github.com/RealistikDash/kcp.py",
        "Issues": "https://github.com/RealistikDash/kcp.py/issues",
        "Repository": "https://github.com/RealistikDash/kcp.py"
    },
    "split_keywords": [
        "kcp",
        " server",
        " client",
        " async",
        " asyncio"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "583e70c8fd49739f388c9a0453264bc915d8a7e0bb5be146686d240ad2bd9a00",
                "md5": "15ac9b0539eae694d4d5721835e6f31e",
                "sha256": "7a7d49e22f19ab7fedaa1d2f6790865fd79172ce5623c385e32c39b0e6fd9d9d"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp310-cp310-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "15ac9b0539eae694d4d5721835e6f31e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 136856,
            "upload_time": "2024-12-17T18:12:51",
            "upload_time_iso_8601": "2024-12-17T18:12:51.354768Z",
            "url": "https://files.pythonhosted.org/packages/58/3e/70c8fd49739f388c9a0453264bc915d8a7e0bb5be146686d240ad2bd9a00/kcp-0.1.6-cp310-cp310-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c1b894e2e1fb4eacce717af0a891156627a905da393d7d235148da1c86ed9340",
                "md5": "6f6c3515be7b5e69e794d4e5df77937c",
                "sha256": "a9e974a11014043486b05ab88ea4b460820f17ae6f8f5ea1223cd74603e6ddd7"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp310-cp310-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6f6c3515be7b5e69e794d4e5df77937c",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 327202,
            "upload_time": "2024-12-17T18:12:38",
            "upload_time_iso_8601": "2024-12-17T18:12:38.337804Z",
            "url": "https://files.pythonhosted.org/packages/c1/b8/94e2e1fb4eacce717af0a891156627a905da393d7d235148da1c86ed9340/kcp-0.1.6-cp310-cp310-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8b0e8b214f98fafc1bdda953c4c3f3197c0e5495eece64ddf97dce6c1a0205c8",
                "md5": "a9c5d1ebdc99dba82180b56d7fbd55fc",
                "sha256": "d2c973b58504a43a1569d4ce9a7acd7a61fbb78aaef8ba735f00d497e53bda28"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a9c5d1ebdc99dba82180b56d7fbd55fc",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 75988,
            "upload_time": "2024-12-17T18:13:48",
            "upload_time_iso_8601": "2024-12-17T18:13:48.513330Z",
            "url": "https://files.pythonhosted.org/packages/8b/0e/8b214f98fafc1bdda953c4c3f3197c0e5495eece64ddf97dce6c1a0205c8/kcp-0.1.6-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f305d21d2ebd0daf76893727f4afd68423e11c05f01809307d15059724c0ca28",
                "md5": "5c814da724b4d0edc7f46704b749cfac",
                "sha256": "d5f95fe061a6b611e74a43bc0b038403a5c4e60e3fd8f321e089916a8f82f3e5"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp311-cp311-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "5c814da724b4d0edc7f46704b749cfac",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 137376,
            "upload_time": "2024-12-17T18:12:34",
            "upload_time_iso_8601": "2024-12-17T18:12:34.808987Z",
            "url": "https://files.pythonhosted.org/packages/f3/05/d21d2ebd0daf76893727f4afd68423e11c05f01809307d15059724c0ca28/kcp-0.1.6-cp311-cp311-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eac6a25c139498666adb8b09968492ffe9e6b4f914e2db79164dca572c81550e",
                "md5": "0552ef236f75e7094e73427707728f32",
                "sha256": "da4aa6acbdfdfd25a64841b7b13e8063098cd0b613d8475ccf3b7f22dfd22d64"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp311-cp311-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0552ef236f75e7094e73427707728f32",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 350670,
            "upload_time": "2024-12-17T18:12:39",
            "upload_time_iso_8601": "2024-12-17T18:12:39.667793Z",
            "url": "https://files.pythonhosted.org/packages/ea/c6/a25c139498666adb8b09968492ffe9e6b4f914e2db79164dca572c81550e/kcp-0.1.6-cp311-cp311-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "590af57e16ad03998c381015c50ebcac67e1a15e891bdaa06f2c6c62a81bcb1e",
                "md5": "4c6301a34ee863d30aef9dd9cdeac897",
                "sha256": "6a481bfc1e595cb9e6c7c8b33673c032b455beccb9794ebc6dd62be841314b6e"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "4c6301a34ee863d30aef9dd9cdeac897",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 76119,
            "upload_time": "2024-12-17T18:13:57",
            "upload_time_iso_8601": "2024-12-17T18:13:57.217829Z",
            "url": "https://files.pythonhosted.org/packages/59/0a/f57e16ad03998c381015c50ebcac67e1a15e891bdaa06f2c6c62a81bcb1e/kcp-0.1.6-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b6cefac912517be962a5bc5bc934e834d9691b85ee0b853c78dac585e7753a87",
                "md5": "70961c04fd2592ca043cea54fa99ec22",
                "sha256": "512a92d324a277b0b095a611a1e4d42680e9524e4136f97b105417f5f17799d7"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp312-cp312-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "70961c04fd2592ca043cea54fa99ec22",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 135459,
            "upload_time": "2024-12-17T18:12:31",
            "upload_time_iso_8601": "2024-12-17T18:12:31.624774Z",
            "url": "https://files.pythonhosted.org/packages/b6/ce/fac912517be962a5bc5bc934e834d9691b85ee0b853c78dac585e7753a87/kcp-0.1.6-cp312-cp312-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8a9fd978a36a026af425ee18b18d0997288c1148c3c90f888e8fed26c0829ad3",
                "md5": "05e739e6468989067727a2647ca2ba00",
                "sha256": "005a5960317762afdbddd701c334e2a1aaadc27be31cdfd8fc3d0827265f1b1b"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp312-cp312-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "05e739e6468989067727a2647ca2ba00",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 331107,
            "upload_time": "2024-12-17T18:12:46",
            "upload_time_iso_8601": "2024-12-17T18:12:46.606658Z",
            "url": "https://files.pythonhosted.org/packages/8a/9f/d978a36a026af425ee18b18d0997288c1148c3c90f888e8fed26c0829ad3/kcp-0.1.6-cp312-cp312-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1a02752dc922e2c75080918e1158a7747a27f64ad622c964b430c2d6e16c2039",
                "md5": "e6ac42f9c95d394a697ccf7de9ce4dcf",
                "sha256": "e742cbc3052f4f6b986371ad47e46e386093b7633228280c09180a0b56f40c74"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e6ac42f9c95d394a697ccf7de9ce4dcf",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 75004,
            "upload_time": "2024-12-17T18:14:22",
            "upload_time_iso_8601": "2024-12-17T18:14:22.353073Z",
            "url": "https://files.pythonhosted.org/packages/1a/02/752dc922e2c75080918e1158a7747a27f64ad622c964b430c2d6e16c2039/kcp-0.1.6-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bcefb7f1663992ea73a92c67099c6d61bbfd72bcaee1499b80bb06dfa756a513",
                "md5": "ac11b486f1fd227b450db4fdf11e9278",
                "sha256": "c2327d597628c4d654ff7d7663701f0de7587f4c840796eaff096fd31ae004e9"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp313-cp313-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "ac11b486f1fd227b450db4fdf11e9278",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.7",
            "size": 133826,
            "upload_time": "2024-12-17T18:12:45",
            "upload_time_iso_8601": "2024-12-17T18:12:45.560086Z",
            "url": "https://files.pythonhosted.org/packages/bc/ef/b7f1663992ea73a92c67099c6d61bbfd72bcaee1499b80bb06dfa756a513/kcp-0.1.6-cp313-cp313-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eb5a0c06c2c7a4cdafe32ffa7bd7820959e30b1d8c5055f3dcf049118c693180",
                "md5": "011642315bb4b58dbc10d5a3a950a05e",
                "sha256": "ee78627a02e908c225c669b7cc8654b825296fb8133f2a1556f633b72e9dad3e"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp313-cp313-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "011642315bb4b58dbc10d5a3a950a05e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.7",
            "size": 333034,
            "upload_time": "2024-12-17T18:12:49",
            "upload_time_iso_8601": "2024-12-17T18:12:49.055247Z",
            "url": "https://files.pythonhosted.org/packages/eb/5a/0c06c2c7a4cdafe32ffa7bd7820959e30b1d8c5055f3dcf049118c693180/kcp-0.1.6-cp313-cp313-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "24bd17c07c4b142ad3a6c8d236ef5ff23951516ff766ee524ec675b5b5c34202",
                "md5": "f43cb0a625a16d8e83b0ea56b0b18a97",
                "sha256": "3c1b2f90f15e55ec76b929dd8d29bed4b4eadc234addefd2b8be5f0f3acf822d"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f43cb0a625a16d8e83b0ea56b0b18a97",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.7",
            "size": 74464,
            "upload_time": "2024-12-17T18:14:46",
            "upload_time_iso_8601": "2024-12-17T18:14:46.818189Z",
            "url": "https://files.pythonhosted.org/packages/24/bd/17c07c4b142ad3a6c8d236ef5ff23951516ff766ee524ec675b5b5c34202/kcp-0.1.6-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "90477d9fdf2f1536300f3513778577e1b7fd673924b4d11b174ac69fd1b66b6c",
                "md5": "b9cd92d87b853709421597889db153df",
                "sha256": "0a46d42de2161893a6aece95417ac01cef8a87e1b5ee0619151797654ad6a0ca"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp38-cp38-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "b9cd92d87b853709421597889db153df",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 138758,
            "upload_time": "2024-12-17T18:13:36",
            "upload_time_iso_8601": "2024-12-17T18:13:36.843006Z",
            "url": "https://files.pythonhosted.org/packages/90/47/7d9fdf2f1536300f3513778577e1b7fd673924b4d11b174ac69fd1b66b6c/kcp-0.1.6-cp38-cp38-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c9271ccf1ac497c7845dee827a996a5c658ec0506c6c72342b9f79675b7c5cca",
                "md5": "6a171993532fb260909197a3b0c123db",
                "sha256": "f0c69b253f02614d8aeff2e3826370b38046a3a9af9fdce33a7114fbe977ec74"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp38-cp38-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6a171993532fb260909197a3b0c123db",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 333789,
            "upload_time": "2024-12-17T18:12:42",
            "upload_time_iso_8601": "2024-12-17T18:12:42.878612Z",
            "url": "https://files.pythonhosted.org/packages/c9/27/1ccf1ac497c7845dee827a996a5c658ec0506c6c72342b9f79675b7c5cca/kcp-0.1.6-cp38-cp38-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1797e7e34073914d9e703bf58e890016ffbc0b90e887d86c4918dd8c24e80014",
                "md5": "12794bdc7c09f580ef94a6f79a055b02",
                "sha256": "9c568788168f95f746137aaab2e4c576906b11ce622543a4b2b6fca3ff92bfd1"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "12794bdc7c09f580ef94a6f79a055b02",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 76259,
            "upload_time": "2024-12-17T18:14:08",
            "upload_time_iso_8601": "2024-12-17T18:14:08.835349Z",
            "url": "https://files.pythonhosted.org/packages/17/97/e7e34073914d9e703bf58e890016ffbc0b90e887d86c4918dd8c24e80014/kcp-0.1.6-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "984b3eac0c8bf7c59086a5d44144446fe163c6ec59e615c63de2a502164ea7b1",
                "md5": "489be451cbffaad5494a9f9df0eb8919",
                "sha256": "6e8cf8ef2e8094c5e4791540352aba0802bc65d8fb2f565659d86e53939b8689"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp39-cp39-macosx_14_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "489be451cbffaad5494a9f9df0eb8919",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 137394,
            "upload_time": "2024-12-17T18:13:32",
            "upload_time_iso_8601": "2024-12-17T18:13:32.190611Z",
            "url": "https://files.pythonhosted.org/packages/98/4b/3eac0c8bf7c59086a5d44144446fe163c6ec59e615c63de2a502164ea7b1/kcp-0.1.6-cp39-cp39-macosx_14_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3a9de150f9bf2dfb010fec60aef501c27cc60107f8627fceefb6c7270c42f38b",
                "md5": "baeba87ad9932ab0f29f9fb9fe9ec97f",
                "sha256": "d8aa34931521ebc791e662b9a538c1c5f82c81c8b3a73c4b4bb7f72b11fde4c4"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp39-cp39-manylinux_2_39_x86_64.whl",
            "has_sig": false,
            "md5_digest": "baeba87ad9932ab0f29f9fb9fe9ec97f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 328816,
            "upload_time": "2024-12-17T18:12:36",
            "upload_time_iso_8601": "2024-12-17T18:12:36.656438Z",
            "url": "https://files.pythonhosted.org/packages/3a/9d/e150f9bf2dfb010fec60aef501c27cc60107f8627fceefb6c7270c42f38b/kcp-0.1.6-cp39-cp39-manylinux_2_39_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8cb16d2d2a232b4ce7ffdb297f5404a4204baafcdefda0dfe168fdc19dba3ce6",
                "md5": "b249b67aac249a5410dca7860edc011b",
                "sha256": "70abddc571eee49e20b30a88139e2abc3202edd59b6d36cd6f29127004bdedf1"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b249b67aac249a5410dca7860edc011b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 76091,
            "upload_time": "2024-12-17T18:14:06",
            "upload_time_iso_8601": "2024-12-17T18:14:06.688092Z",
            "url": "https://files.pythonhosted.org/packages/8c/b1/6d2d2a232b4ce7ffdb297f5404a4204baafcdefda0dfe168fdc19dba3ce6/kcp-0.1.6-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3c8218cff233d7a848788450ae2a4341d5f54bb19afb0d5dd3a06be76ebca953",
                "md5": "2d68f31ab7daa9f5248098015395c429",
                "sha256": "1e3632509119bd6a24599ee043e21ef6842675413a41720c526d14896357afc4"
            },
            "downloads": -1,
            "filename": "kcp-0.1.6.tar.gz",
            "has_sig": false,
            "md5_digest": "2d68f31ab7daa9f5248098015395c429",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 22488,
            "upload_time": "2024-12-17T18:12:32",
            "upload_time_iso_8601": "2024-12-17T18:12:32.806423Z",
            "url": "https://files.pythonhosted.org/packages/3c/82/18cff233d7a848788450ae2a4341d5f54bb19afb0d5dd3a06be76ebca953/kcp-0.1.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-17 18:12:32",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "RealistikDash",
    "github_project": "kcp.py",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "kcp"
}
        
Elapsed time: 0.43998s