# 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"
}