SLIM Rust bindings for Python
Project description
SLIM Python Bindings
Bindings to call the SLIM APIs from a python program.
Installation
pip install slim-bindings
Include as dependency
With pyproject.toml
[project]
name = "slim-example"
version = "0.1.0"
description = "Python program using SLIM"
requires-python = ">=3.9"
dependencies = [
"slim-bindings>=0.1.0"
]
With poetry project
[tool.poetry]
name = "slim-example"
version = "0.1.0"
description = "Python program using SLIM"
[tool.poetry.dependencies]
python = ">=3.9,<3.14"
slim-bindings = ">=0.1.0"
Example programs
Server
# Copyright AGNTCY Contributors (https://github.com/agntcy)
# SPDX-License-Identifier: Apache-2.0
import argparse
import asyncio
from signal import SIGINT
import slim_bindings
async def run_server(address: str, enable_opentelemetry: bool):
# init tracing
slim_bindings.init_tracing(
{
"log_level": "debug"
"opentelemetry": {
"enabled": enable_opentelemetry
}
}
)
global slim
# create new slim object
slim = await slim_bindings.Slim.new("cisco", "default", "slim")
# Run as server
await slim.run_server({"endpoint": address, "tls": {"insecure": True}})
async def main():
parser = argparse.ArgumentParser(
description="Command line client for slim server."
)
parser.add_argument(
"-s", "--slim", type=str, help="SLIM address.", default="127.0.0.1:12345"
)
parser.add_argument(
"--enable-opentelemetry",
"-t",
action="store_true",
default=False,
help="Enable OpenTelemetry tracing.",
)
args = parser.parse_args()
# Create an asyncio event to keep the loop running until interrupted
stop_event = asyncio.Event()
# Define a shutdown handler to set the event when interrupted
def shutdown():
print("\nShutting down...")
stop_event.set()
# Register the shutdown handler for SIGINT
loop = asyncio.get_running_loop()
loop.add_signal_handler(SIGINT, shutdown)
# Run the client task
client_task = asyncio.create_task(
run_server(args.slim, args.enable_opentelemetry)
)
# Wait until the stop event is set
await stop_event.wait()
# Cancel the client task
client_task.cancel()
try:
await client_task
except asyncio.CancelledError:
pass
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print("Program terminated by user.")
PubSub Client
# Copyright AGNTCY Contributors (https://github.com/agntcy)
# SPDX-License-Identifier: Apache-2.0
import argparse
import asyncio
import datetime
import slim_bindings
class color:
PURPLE = "\033[95m"
CYAN = "\033[96m"
DARKCYAN = "\033[36m"
BLUE = "\033[94m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
RED = "\033[91m"
BOLD = "\033[1m"
UNDERLINE = "\033[4m"
END = "\033[0m"
def format_message(message1, message2):
return f"{color.BOLD}{color.CYAN}{message1.capitalize() :<45}{color.END}{message2}"
def split_id(id):
# Split the IDs into their respective components
try:
local_organization, local_namespace, local_agent = id.split("/")
except ValueError as e:
print("Error: IDs must be in the format organization/namespace/agent.")
raise e
return local_organization, local_namespace, local_agent
async def run_client(local_id, remote_id, address, enable_opentelemetry: bool):
# init tracing
slim_bindings.init_tracing(
{
"log_level": "info"
"opentelemetry": {
"enabled": enable_opentelemetry
}
}
)
# Split the local IDs into their respective components
local_organization, local_namespace, local_agent = split_id(local_id)
# Split the remote IDs into their respective components
remote_organization, remote_namespace, broadcast_topic = split_id(remote_id)
name = f"{local_agent}"
print(f"Creating participant {name}...")
participant = await slim_bindings.Slim.new(
local_organization, local_namespace, local_agent
)
# Connect to slim server
_ = await participant.connect(
{"endpoint": address, "tls": {"insecure": True}}
)
# set route for the chat, so that messages can be sent to the other participants
await participant.set_route(remote_organization, remote_namespace, broadcast_topic)
# Subscribe to the producer topic
await participant.subscribe(remote_organization, remote_namespace, broadcast_topic)
print(f"{name} -> Creating new pubsub sessions...")
# create pubsubb session. A pubsub session is a just a bidirectional
# streaming session, where participants are both sender and receivers
session_info = await participant.create_session(
slim_bindings.PySessionConfiguration.Streaming(
slim_bindings.PySessionDirection.BIDIRECTIONAL,
topic=slim_bindings.PyAgentType(
remote_organization, remote_namespace, broadcast_topic
),
max_retries=5,
timeout=datetime.timedelta(seconds=5),
)
)
# define the background task
async def background_task():
msg = f"Hello from {local_agent}"
async with participant:
while True:
try:
# receive message from session
recv_session, msg_rcv = await participant.receive(
session=session_info.id
)
# Check if the message is calling this specific participant
# if not, ignore it
if local_agent in msg_rcv.decode():
# print the message
print(f"{name} -> Received message for me: {msg_rcv.decode()}")
# send the message to the next participant
await participant.publish(
recv_session,
msg.encode(),
remote_organization,
remote_namespace,
broadcast_topic,
)
print(f"{name} -> Sending message to all participants: {msg}")
else:
print(
f"{name} -> Receiving message: {msg_rcv.decode()} - not for me."
)
except asyncio.CancelledError:
break
except Exception as e:
print(f"{name} -> Error receiving message: {e}")
break
receive_task = asyncio.create_task(background_task())
async def background_task_keyboard():
while True:
user_input = await asyncio.to_thread(input, "message> ")
if user_input == "exit":
break
# Send the message to the all participants
await participant.publish(
session_info,
f"{user_input}".encode(),
remote_organization,
remote_namespace,
broadcast_topic,
)
receive_task.cancel()
send_task = asyncio.create_task(background_task_keyboard())
# Wait for both tasks to finish
await asyncio.gather(receive_task, send_task)
async def main():
parser = argparse.ArgumentParser(
description="Command line client for message passing."
)
parser.add_argument(
"-l",
"--local",
type=str,
help="Local ID in the format organization/namespace/agent.",
)
parser.add_argument(
"-r",
"--remote",
type=str,
help="Remote ID in the format organization/namespace/agent.",
)
parser.add_argument(
"-s",
"--slim",
type=str,
help="Slim address.",
default="http://127.0.0.1:46357",
)
parser.add_argument(
"-t",
"--enable-opentelemetry",
action="store_true",
default=False,
help="Enable OpenTelemetry tracing.",
)
args = parser.parse_args()
# Run the client with the specified local ID, remote ID, and optional message
await run_client(
args.local,
args.remote,
args.slim,
args.enable_opentelemetry,
)
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print("Program terminated by user.")
Streaming producer and consumer
# Copyright AGNTCY Contributors (https://github.com/agntcy)
# SPDX-License-Identifier: Apache-2.0
import argparse
import asyncio
import datetime
import os
import slim_bindings
class color:
PURPLE = "\033[95m"
CYAN = "\033[96m"
DARKCYAN = "\033[36m"
BLUE = "\033[94m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
RED = "\033[91m"
BOLD = "\033[1m"
UNDERLINE = "\033[4m"
END = "\033[0m"
def format_message(message1, message2):
return f"{color.BOLD}{color.CYAN}{message1.capitalize() :<45}{color.END}{message2}"
def split_id(id):
# Split the IDs into their respective components
try:
local_organization, local_namespace, local_agent = id.split("/")
except ValueError as e:
print("Error: IDs must be in the format organization/namespace/agent.")
raise e
return local_organization, local_namespace, local_agent
async def run_client(
local_id, remote_id, address, producer, enable_opentelemetry: bool
):
# init tracing
slim_bindings.init_tracing(
{
"log_level": "info"
"opentelemetry": {
"enabled": enable_opentelemetry
}
}
)
# Split the IDs into their respective components
local_organization, local_namespace, local_agent = split_id(local_id)
# create new slim object
slim = await slim_bindings.Slim.new(
local_organization, local_namespace, local_agent
)
# Connect to the service and subscribe for the local name
print(format_message("connecting to:", address))
_ = await slim.connect({"endpoint": address, "tls": {"insecure": True}})
# Split the IDs into their respective components
remote_organization, remote_namespace, broadcast_topic = split_id(remote_id)
# Get the local agent instance from env
instance = os.getenv("SLIM_INSTANCE_ID", local_agent)
async with slim:
if producer:
# Create a route to the remote ID
await slim.set_route(
remote_organization, remote_namespace, broadcast_topic
)
# create streaming session with default config
session_info = await slim.create_session(
slim_bindings.PySessionConfiguration.Streaming(
slim_bindings.PySessionDirection.SENDER,
topic=None,
max_retries=5,
timeout=datetime.timedelta(seconds=5),
)
)
# initialize count
count = 0
while True:
try:
# Send a message
print(
format_message(
f"{instance} streaming message to {remote_organization}/{remote_namespace}/{broadcast_topic}: ",
f"{count}",
)
)
# Send the message and wait for a reply
await slim.publish(
session_info,
f"{count}".encode(),
remote_organization,
remote_namespace,
broadcast_topic,
)
count += 1
except Exception as e:
print("received error: ", e)
finally:
await asyncio.sleep(1)
else:
# subscribe to streaming session
await slim.subscribe(
remote_organization, remote_namespace, broadcast_topic
)
# Wait for messages and not reply
while True:
session_info, _ = await slim.receive()
print(
format_message(
f"{instance.capitalize()} received a new session:",
f"{session_info.id}",
)
)
async def background_task(session_info):
while True:
# Receive the message from the session
session, msg = await slim.receive(session=session_info)
print(
format_message(
f"{local_agent.capitalize()} received from {remote_organization}/{remote_namespace}/{broadcast_topic}: ",
f"{msg.decode()}",
)
)
asyncio.create_task(background_task(session_info.id))
async def main():
parser = argparse.ArgumentParser(
description="Command line client for message passing."
)
parser.add_argument(
"-l",
"--local",
type=str,
help="Local ID in the format organization/namespace/agent.",
)
parser.add_argument(
"-r",
"--remote",
type=str,
help="Remote ID in the format organization/namespace/agent.",
)
parser.add_argument(
"-s",
"--slim",
type=str,
help="SLIM address.",
default="http://127.0.0.1:46357",
)
parser.add_argument(
"-t",
"--enable-opentelemetry",
action="store_true",
default=False,
help="Enable OpenTelemetry tracing.",
)
parser.add_argument(
"-p",
"--producer",
action="store_true",
default=False,
help="Enable producer mode.",
)
args = parser.parse_args()
# Run the client with the specified local ID, remote ID, and optional message
await run_client(
args.local,
args.remote,
args.slim,
args.producer,
args.enable_opentelemetry,
)
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print("Program terminated by user.")
Fire And Forget sender and receiver
# Copyright AGNTCY Contributors (https://github.com/agntcy)
# SPDX-License-Identifier: Apache-2.0
import argparse
import asyncio
import os
import slim_bindings
class color:
PURPLE = "\033[95m"
CYAN = "\033[96m"
DARKCYAN = "\033[36m"
BLUE = "\033[94m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
RED = "\033[91m"
BOLD = "\033[1m"
UNDERLINE = "\033[4m"
END = "\033[0m"
def format_message(message1, message2):
return f"{color.BOLD}{color.CYAN}{message1.capitalize() :<45}{color.END}{message2}"
def split_id(id):
# Split the IDs into their respective components
try:
local_organization, local_namespace, local_agent = id.split("/")
except ValueError as e:
print("Error: IDs must be in the format organization/namespace/agent.")
raise e
return local_organization, local_namespace, local_agent
async def run_client(
local_id: str,
remote_id: str,
message: str,
address: str,
iterations: int,
enable_opentelemetry: bool,
):
# init tracing
slim_bindings.init_tracing(
{
"log_level": "info"
"opentelemetry": {
"enabled": enable_opentelemetry
}
}
)
local_organization, local_namespace, local_agent = split_id(local_id)
# create new slim object
slim = await slim_bindings.Slim.new(
local_organization, local_namespace, local_agent
)
# Connect to remote slim server
print(format_message(f"connecting to: {address}"))
_ = await slim.connect({"endpoint": address, "tls": {"insecure": True}})
# Get the local agent instance from env
instance = os.getenv("SLIM_INSTANCE_ID", local_agent)
async with slim:
if message:
# Split the IDs into their respective components
remote_organization, remote_namespace, remote_agent = split_id(remote_id)
# Create a route to the remote ID
await slim.set_route(remote_organization, remote_namespace, remote_agent)
# create a session
session = await slim.create_session(
slim_bindings.PySessionConfiguration.FireAndForget()
)
for i in range(0, iterations):
try:
# Send the message
await slim.publish(
session,
message.encode(),
remote_organization,
remote_namespace,
remote_agent,
)
print(format_message(f"{instance} sent:", message))
# Wait for a reply
session_info, msg = await slim.receive(session=session.id)
print(
format_message(
f"{instance.capitalize()} received (from session {session_info.id}):",
f"{msg.decode()}",
)
)
except Exception as e:
print("received error: ", e)
await asyncio.sleep(1)
else:
# Wait for a message and reply in a loop
while True:
session_info, _ = await slim.receive()
print(
format_message(
f"{instance.capitalize()} received a new session:",
f"{session_info.id}",
)
)
async def background_task(session_id):
while True:
# Receive the message from the session
session, msg = await slim.receive(session=session_id)
print(
format_message(
f"{instance.capitalize()} received (from session {session_id}):",
f"{msg.decode()}",
)
)
ret = f"{msg.decode()} from {instance}"
await slim.publish_to(session, ret.encode())
print(format_message(f"{instance.capitalize()} replies:", ret))
asyncio.create_task(background_task(session_info.id))
async def main():
parser = argparse.ArgumentParser(
description="Command line client for message passing."
)
parser.add_argument(
"-l",
"--local",
type=str,
help="Local ID in the format organization/namespace/agent.",
)
parser.add_argument(
"-r",
"--remote",
type=str,
help="Remote ID in the format organization/namespace/agent.",
)
parser.add_argument("-m", "--message", type=str, help="Message to send.")
parser.add_argument(
"-s",
"--slim",
type=str,
help="SLIM address.",
default="http://127.0.0.1:46357",
)
parser.add_argument(
"-i",
"--iterations",
type=int,
help="Number of messages to send, one per second.",
)
parser.add_argument(
"-t",
"--enable-opentelemetry",
action="store_true",
default=False,
help="Enable OpenTelemetry tracing.",
)
args = parser.parse_args()
# Run the client with the specified local ID, remote ID, and optional message
await run_client(
args.local,
args.remote,
args.message,
args.slim,
args.iterations,
args.enable_opentelemetry,
)
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print("Program terminated by user.")
Request/Response Requester and Responder
# Copyright AGNTCY Contributors (https://github.com/agntcy)
# SPDX-License-Identifier: Apache-2.0
import argparse
import asyncio
import os
import slim_bindings
class color:
PURPLE = "\033[95m"
CYAN = "\033[96m"
DARKCYAN = "\033[36m"
BLUE = "\033[94m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
RED = "\033[91m"
BOLD = "\033[1m"
UNDERLINE = "\033[4m"
END = "\033[0m"
def format_message(message1, message2):
return f"{color.BOLD}{color.CYAN}{message1.capitalize() :<45}{color.END}{message2}"
def split_id(id):
# Split the IDs into their respective components
try:
local_organization, local_namespace, local_agent = id.split("/")
except ValueError as e:
print("Error: IDs must be in the format organization/namespace/agent.")
raise e
return local_organization, local_namespace, local_agent
async def run_client(local_id, remote_id, message, address, enable_opentelemetry: bool):
# init tracing
slim_bindings.init_tracing(
{
"log_level": "info"
"opentelemetry": {
"enabled": enable_opentelemetry
}
}
)
# Split the IDs into their respective components
local_organization, local_namespace, local_agent = split_id(local_id)
# create new slim object
slim = await slim_bindings.Slim.new(
local_organization, local_namespace, local_agent
)
# Connect to the service and subscribe for the local name
print(format_message("connecting to:", address))
_ = await slim.connect({"endpoint": address, "tls": {"insecure": True}})
# Get the local agent instance from env
instance = os.getenv("SLIM_INSTANCE_ID", local_agent)
async with slim:
if message:
# Split the IDs into their respective components
remote_organization, remote_namespace, remote_agent = split_id(remote_id)
# Create a route to the remote ID
await slim.set_route(remote_organization, remote_namespace, remote_agent)
# create a session
session = await slim.create_session(
slim_bindings.PySessionConfiguration.RequestResponse()
)
try:
# Send the message and wait for a reply
session_info, reply = await slim.request_reply(
session,
message.encode(),
remote_organization,
remote_namespace,
remote_agent,
)
print(format_message(f"{instance} sent:", message))
# Print reply and exit
print(
format_message(
f"{instance} received (from session {session_info.id}):",
f"{reply.decode()}",
)
)
except Exception as e:
print("received error: ", e)
else:
# Wait for a message and reply in a loop
while True:
session_info, _ = await slim.receive()
print(
format_message(
f"{instance.capitalize()} received a new session:",
f"{session_info.id}",
)
)
async def background_task(session_id):
while True:
# Receive the message from the session
session, msg = await slim.receive(session=session_id)
print(
format_message(
f"{instance.capitalize()} received (from session {session_id}):",
f"{msg.decode()}",
)
)
ret = f"{msg.decode()} from {instance}"
await slim.publish_to(session, ret.encode())
print(format_message(f"{instance.capitalize()} replies:", ret))
asyncio.create_task(background_task(session_info.id))
async def main():
parser = argparse.ArgumentParser(
description="Command line client for message passing."
)
parser.add_argument(
"-l",
"--local",
type=str,
help="Local ID in the format organization/namespace/agent.",
)
parser.add_argument(
"-r",
"--remote",
type=str,
help="Remote ID in the format organization/namespace/agent.",
)
parser.add_argument("-m", "--message", type=str, help="Message to send.")
parser.add_argument(
"-s",
"--slim",
type=str,
help="SLIM address.",
default="http://127.0.0.1:46357",
)
parser.add_argument(
"-t",
"--enable-opentelemetry",
action="store_true",
default=False,
help="Enable OpenTelemetry tracing.",
)
args = parser.parse_args()
# Run the client with the specified local ID, remote ID, and optional message
await run_client(
args.local,
args.remote,
args.message,
args.slim,
args.enable_opentelemetry,
)
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print("Program terminated by user.")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file slim_bindings-0.3.6.tar.gz.
File metadata
- Download URL: slim_bindings-0.3.6.tar.gz
- Upload date:
- Size: 202.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0e0f5167f675eeb0c866c6dd11258a082afeb3944543b34fa75a546cc9e4682
|
|
| MD5 |
14880c444edcc8d4001502c5337ab75f
|
|
| BLAKE2b-256 |
76c1bd0e74f5bae0d5f691f567888f74673996dc4686201ddb2230f23bb032d3
|
File details
Details for the file slim_bindings-0.3.6-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 5.0 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d81aa49eba4de9c0e6073585f08a26e92ef1a7c968ab56e7990c29f50584f537
|
|
| MD5 |
da71b91b42a15e0683d146802d7510bd
|
|
| BLAKE2b-256 |
e437125096cb6a973e5ea011025308fd1225fe676a1fd6f3eb3e07e35d248239
|
File details
Details for the file slim_bindings-0.3.6-cp313-cp313-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp313-cp313-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.13, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63ec98167c5c7a773f88bea749443ffde57782627ea605c021b8ccf74b84de8c
|
|
| MD5 |
939aee43b30e8cd950bed50174bb3370
|
|
| BLAKE2b-256 |
23d847690138392230b3c3a4fcfccce217194ed88474889a7ac0d9943c7fb39a
|
File details
Details for the file slim_bindings-0.3.6-cp313-cp313-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp313-cp313-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 6.2 MB
- Tags: CPython 3.13, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23df7bc4fb386248a7529d279ca3d3ab0078e5512c89d3f526a739af209ae44d
|
|
| MD5 |
b4fd2668ff7b8878d5037bd7e26f9316
|
|
| BLAKE2b-256 |
355ad32dbe9ffc24b450a8659548b14878bb662494617e35ee16b7c088eedbd2
|
File details
Details for the file slim_bindings-0.3.6-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.7 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
096f1b6ac8943c472439d6518a4e2559c003b94212f86d9f10238c587f9e2981
|
|
| MD5 |
a7fb5ebc8e1bc1b6cdf5087bfa0f1794
|
|
| BLAKE2b-256 |
47e30c35da99f249995de87a6a27e139f2698cb9e0c54b966b41ca7152d4bb3b
|
File details
Details for the file slim_bindings-0.3.6-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 5.9 MB
- Tags: CPython 3.13, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d113b6e969a054941784b10772deec027ffa336bec9e5e3a143a4929197a01ad
|
|
| MD5 |
042a87efdeea3e52405df449cf6feae5
|
|
| BLAKE2b-256 |
3c227bff0ba82e3f54fee363d76a606a51cb436cb5281175ec9765e620e1d418
|
File details
Details for the file slim_bindings-0.3.6-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 5.0 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d8974ab32321b387f693744f46c33802e238f9743b01ceb861e6e132c68eef7
|
|
| MD5 |
83292392664647a2bb98e3928c247ab9
|
|
| BLAKE2b-256 |
625994fa67dd2b5830828a36f3a61def40f0215e981c15ff799463aa6ed5e484
|
File details
Details for the file slim_bindings-0.3.6-cp312-cp312-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp312-cp312-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.12, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74ff3aeb22715bd637ca0d3457c632dd9482a1974126fb4c5554bc1b6d4b48c9
|
|
| MD5 |
0056ccd7b02c16b7625984f10e69772b
|
|
| BLAKE2b-256 |
961114ddc5d7ee20294a2d195ce39963ceaef2066fc48e29635bee310f470b4e
|
File details
Details for the file slim_bindings-0.3.6-cp312-cp312-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp312-cp312-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 6.2 MB
- Tags: CPython 3.12, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1221acc781052ea24c9459abeea85a4a2701e92a7a3f69dffb320bd4cc983307
|
|
| MD5 |
10cb1761fd4dbe453075ad037ac80eea
|
|
| BLAKE2b-256 |
a496d074b11b0612cdd559122274c6b7e0f0be82336b50c4f46a5a7db6985187
|
File details
Details for the file slim_bindings-0.3.6-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.7 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94fed05db7fb7ed78445267e894a6336d301323c13ee17b3f0e0568ff562ec45
|
|
| MD5 |
bede8a2283c1b6fb2b4ab4a42e675966
|
|
| BLAKE2b-256 |
12abc810884aa03728006320e3948c8ff01dd005649afd8951af5d2dd587f43d
|
File details
Details for the file slim_bindings-0.3.6-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 5.9 MB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16f6861b531067bf542891d072aabdc9ddba9cf6537f2ef260466c324818dbbb
|
|
| MD5 |
92ba31ca240c51b36b0af7f2d7f2b07e
|
|
| BLAKE2b-256 |
5748104f15a66996af2675fc383c112558cd92e40c109429443e772333d5e6e5
|
File details
Details for the file slim_bindings-0.3.6-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 5.0 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2de3ffbb29b0c67d04190e890a60eca2280a50ac0b31bd2a192d08b2325d281
|
|
| MD5 |
791c1a47ac2f20c263e8a64afc7d71e0
|
|
| BLAKE2b-256 |
be5e22156d64aec134280563dd60a464d014cd3c891b91d9c54402caf47faa75
|
File details
Details for the file slim_bindings-0.3.6-cp311-cp311-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp311-cp311-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.11, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4b3809380a5dd24799458a260c69344519fb4fd7c93d6eafccdf3bc10c4be03
|
|
| MD5 |
7c25c9499b115e05bc839a7f9f879ea8
|
|
| BLAKE2b-256 |
af4069bd874056f5a07bf86e0c6005a5585873d3ab286daea1ccb0505cf2c0f2
|
File details
Details for the file slim_bindings-0.3.6-cp311-cp311-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp311-cp311-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 6.2 MB
- Tags: CPython 3.11, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8143500f6359b8ac8fda8712d6e68f02ce48f9feb5e4bdd176233bdf39c89b2d
|
|
| MD5 |
2c082195c92a9820cb98e05ad57127b0
|
|
| BLAKE2b-256 |
282f48be3b9a7799ffff726f8632b3b4ee11268c6ee0bbb1757300bdbb7648e0
|
File details
Details for the file slim_bindings-0.3.6-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.7 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
301dc1affe2f82272d4dba8aa51f4ce22524fc042cde8973b325f9cf4b991226
|
|
| MD5 |
0369ccfdc4cce29cef3b0191579da0cf
|
|
| BLAKE2b-256 |
44ebe546aa7244e0a6d69f38bbd98b5fa6eda0557917e0fb250699c024bc632e
|
File details
Details for the file slim_bindings-0.3.6-cp311-cp311-macosx_10_12_x86_64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp311-cp311-macosx_10_12_x86_64.whl
- Upload date:
- Size: 5.9 MB
- Tags: CPython 3.11, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99c81676b9cb1eadc001cc1bdeb885862df98fae8cf43a21fc053ca32e21007b
|
|
| MD5 |
cb5eba9f330171027b4df2051c15e3d5
|
|
| BLAKE2b-256 |
5bb367025031751b1afe07f316d71beb64b37ccd1e1737df98bc83988a35d130
|
File details
Details for the file slim_bindings-0.3.6-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 5.0 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5805cf2a70334a7158fe6525b2e6f2b179258e220bad911c3e7ca5f4223cec7f
|
|
| MD5 |
c5fb721bfe1e7faf08a62da67f997885
|
|
| BLAKE2b-256 |
7bcf49231928a4f11282970d7bf78f0c57df4cf21c56ea9a07f51db27c92ca7b
|
File details
Details for the file slim_bindings-0.3.6-cp310-cp310-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp310-cp310-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.10, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0430911a2e7167c6066190b876f5e5fd396538073b686dfb0e57a6e8f91c64a0
|
|
| MD5 |
681f8dd14aea28495a21962301353f5d
|
|
| BLAKE2b-256 |
6e89c08ad26aff5fc005e588a7b3cc9898a8a43f1adb9e460a3c0669c72fc6f6
|
File details
Details for the file slim_bindings-0.3.6-cp310-cp310-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp310-cp310-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 6.2 MB
- Tags: CPython 3.10, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d49ca430896d07ad69a89a624c37a9e0f8d3a87822ac123e3be7a4a5022c35d
|
|
| MD5 |
a4d92010851c9950923ef3f3a40808b2
|
|
| BLAKE2b-256 |
a6e514338d1d78438800c0971103c5c307e6aac326747675dd032e7491eba7ab
|
File details
Details for the file slim_bindings-0.3.6-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.7 MB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bb5fcc5f210ccd8b7873c866b2b70bd1ef146a3cbf2ba7c169ab521b3b9ffda
|
|
| MD5 |
6e52ae0bc1d2c1afe7e4d4edba017e66
|
|
| BLAKE2b-256 |
b8439ce3e44fc2081b10f633b602820e71fe32b097cf4a4ae16fb860aeba8911
|
File details
Details for the file slim_bindings-0.3.6-cp310-cp310-macosx_10_12_x86_64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp310-cp310-macosx_10_12_x86_64.whl
- Upload date:
- Size: 5.9 MB
- Tags: CPython 3.10, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9be6076f11577f978d0e59e10fc7ba7f17d29f5b1b9a0641dc4f65b41e3e21bb
|
|
| MD5 |
9b12bc50313fb799d06a4f6df0d2e184
|
|
| BLAKE2b-256 |
467af470d0774095568f299144e0019eddcca3490bb194a72b97970799e6cd8d
|
File details
Details for the file slim_bindings-0.3.6-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 5.0 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
423fdc40a65b71fc7592c79dcee626dc98139a40e8b6d30c1c24c47f16a5068d
|
|
| MD5 |
9c862ea4cef406c0174153631f9651b8
|
|
| BLAKE2b-256 |
5deffbb3f1cc38473afc59d6e122229b0e4134fb643d33b092a98c41a631c48d
|
File details
Details for the file slim_bindings-0.3.6-cp39-cp39-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp39-cp39-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.9, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10aa8fd105d183abd77d8e21900d4f013115da55ee62730349bfd99e3d314b97
|
|
| MD5 |
0ae978ceed5dc65101d96de02dd58ce4
|
|
| BLAKE2b-256 |
4e28e4152002e601ef01a61745f6b3dfc38f1f48d1ffcdf26bfde976bb77145d
|
File details
Details for the file slim_bindings-0.3.6-cp39-cp39-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp39-cp39-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 6.2 MB
- Tags: CPython 3.9, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e8d588ddc9a0b69321551b45dabc897e1c65db189e3d8c7f9e6a5d180fad887
|
|
| MD5 |
7800182c5fc7ef4518cfecfa82806c09
|
|
| BLAKE2b-256 |
af48403640c7ebeac4f97711f2170c37a1725705d3cb41e696bff6e94d3f8a90
|
File details
Details for the file slim_bindings-0.3.6-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.7 MB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec87bdce983a231b4d98d2d015084c356d983c3cd14875bd3a16bb05533fecfb
|
|
| MD5 |
cde18dbd136a4c5d023760bf6346a2f4
|
|
| BLAKE2b-256 |
97f831e4552f53d403540c1cea4a7ec3956b4eb191d8ffb43253bd480f16a79c
|
File details
Details for the file slim_bindings-0.3.6-cp39-cp39-macosx_10_12_x86_64.whl.
File metadata
- Download URL: slim_bindings-0.3.6-cp39-cp39-macosx_10_12_x86_64.whl
- Upload date:
- Size: 5.9 MB
- Tags: CPython 3.9, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26b6b5e7fa16cbcf405337d56c0b1c28098e165c2247122bcfeb010887180ac9
|
|
| MD5 |
8faad3d8487a5d56068cfaff1d2b9fed
|
|
| BLAKE2b-256 |
242cb144047bdc34def7838200c7e49d90a40384e7a9e987f32bb5d5581b2318
|