Eclipse zenoh Python API

Overview

zenoh banner

CI Documentation Status Gitter License License

Eclipse zenoh Python API

Eclipse zenoh is an extremely efficient and fault-tolerant Named Data Networking (NDN) protocol that is able to scale down to extremely constrainded devices and networks.


How to install it

The Eclipse zenoh-python library is available on Pypi.org.
Install the latest available version using pip:

pip install eclipse-zenoh

⚠️ WARNING ⚠️ zenoh-python is developped in Rust. On Pypi.org we provide binary wheels for the most common platforms (MacOS, Linux x86). But also a source distribution package for other platforms.
However, for pip to be able to build this source distribution, there some prerequisites:

  • pip version 19.3.1 minimum (for full support of PEP 517).
    (if necessary upgrade it with command: 'sudo pip install --upgrade pip' )
  • Have a Rust toolchain installed (instructions at https://rustup.rs/)

Supported Python versions and platforms

zenoh-python has been tested with Python 3.6, 3.7, 3.8 and 3.9.

It relies on the zenoh Rust API which require the full std library. See the list Rust supported platforms here: https://doc.rust-lang.org/nightly/rustc/platform-support.html .


How to build it

Requirements:

Steps:

  • Install developments requirements:
    pip install -r requirements-dev.txt
  • Build zenoh-python
    python setup.py develop

This will automatically build the zenoh Rust API, as well as the zenoh-python API and install it in your Python environement.


Running the Examples

The simplest way to run some of the example is to get a Docker image of the zenoh network router (see https://github.com/eclipse-zenoh/zenoh#how-to-test-it) and then to run the examples on your machine.

Then, run the zenoh-python examples following the instructions in examples/zenoh/README.md

Comments
  • Binary wheels for armv6

    Binary wheels for armv6

    Describe the feature

    zenoh-python relies on pypa/cibuildwheel to build the binary wheels that are released on pypi.org. However it doesn't support armv6 and armv7 architectures. The reason being there is no manylinux image available for armv6 nor armv7.

    EDIT 2022-06-08: Thanks to #66 an armv7 wheel is now built. The build now relies on messense/maturin-action which doesn't provide a solution for armv6.

    help wanted new feature 
    opened by JEnoch 10
  • Zenoh-python build failed with

    Zenoh-python build failed with "error[E0164]: expected tuple struct or tuple variant..."

    Hi all , I am new to Rust and Zenoh, When I was building the python client library, I got the errors below:

    error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
      --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:87:13
       |
    87 |         Err(nix::Error::Sys(Errno::EEXIST)) => return Err(ShmemError::MappingIdExists),
       |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
       |
       = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
    error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
      --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:88:13
       |
    88 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapCreateFailed(e as u32)),
       |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
       |
       = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
        Buildingerror[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
       --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:103:13
        |
    103 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::UnknownOsError(e as u32)),
        |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
        |
        = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
    error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
       --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:119:13
        |
    119 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapCreateFailed(e as u32)),
        |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
        |
        = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
    error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
       --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:135:13
        |
    135 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
        |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
        |
        = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
       error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
       --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:150:13
        |
    150 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
        |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
        |
        = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
    error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
       --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:166:13
        |
    166 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
        |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
        |
        = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
     error: aborting due to 7 previous errors
    
     
    error: could not compile `shared_memory`
    
    To learn more, run the command again with --verbose.
    warning: build failed, waiting for other jobs to finish...
    error: build failed
    💥 maturin failed
      Caused by: Failed to build a native library through cargo
      Caused by: Failed to build a native library through cargo
      Caused by: Cargo build finished with "exit status: 101": `cargo rustc --message-format json --manifest-path Cargo.toml --release --lib --`
    
    opened by eddie9712 8
  • Failed building wheel for eclipse-zenoh

    Failed building wheel for eclipse-zenoh

    Describe the bug

    Standard python example running on Raspberry PI Code:

    from zenoh import Zenoh
    import random
    import time
    
    random.seed()
    
    def read_temp():
        return random.randint(15, 30)
    
    def run_sensor_loop(w):
        # read and produce a temperature every second
        while True:
            t = read_temp()
            w.put('/myfactory/machine1/temp',t)
            print (t)
            time.sleep(15)
    
    if __name__ == "__main__":
        z = Zenoh({'peer': 'tcp/127.0.0.1:7447'})
        w = z.workspace('/')
        run_sensor_loop(w)
    

    Error Message:

    Traceback (most recent call last):
      File "zenoh_producer.py", line 27, in <module>
        run_sensor_loop(w)
      File "zenoh_producer.py", line 20, in run_sensor_loop
        w.put('/myfactory/machine1/temp',t)
      File "/usr/local/lib/python3.7/dist-packages/zenoh/workspace.py", line 50, in put
        self.rt.write_data(
    AttributeError: 'dict' object has no attribute 'write_data'
    

    Any hints what led to this error message?

    To reproduce

    1. Start Zenoh Broker
    2. Execute provided code
    3. Works on Ubuntu 22.04 but led to the shown error on ARM / Raspberry Pi OS.

    System info

    No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster Operating System: Raspbian GNU/Linux 10 (buster) Kernel: Linux 5.10.103-v7l+ Architecture: arm

    • Rust: rustc 1.63.0 (4b91a6ea7 2022-08-08)
    • Python 3.7.3
    • The zenoh router v0.5.0-beta.8-326-g70d7b22
    bug 
    opened by lottz 6
  • zenoh python subscriber work with asyncio

    zenoh python subscriber work with asyncio

    I would like to integrate the zenoh python with the asyncio library. The statement like following: sub = session.declare_subscriber('/rt/hello_world', sub_info, hello_callback) will call the hello_callback function. The argument for the hello_callback can only be the sample: Sample. Inside the hello_callback I can only deserialize the received message.

    Is it possible, that I inside the hello_callback call a coroutine? Because I want to send the message to another broker(NATS broker) for further usage. But I need to call a coroutine to send the message to that broker. I have tried once to decorate the hello_callback function as a async function. But it failed.

    Or another alternative, that the recevied message can be stored in the Subscriber instance. The message can then be accessed.

    new feature 
    opened by Yingliangzhe 6
  • zenoh.net.open connected with not existing host, throws no errors

    zenoh.net.open connected with not existing host, throws no errors

    I would like to wrap the zenoh net into another class. As initialization step, a session has been opened and need to be connected to a zenoh bridge on a remote machine. But as I gives the config a not existing host, the session has also been built without throwing an error. It is a feature, that is not created? Or was I using it wrong?

    As I search for zenoh-python, there are actually two kinds of zenoh-python, one is eclipse-zenoh/zenoh-python from here, and another one is atolab/zenoh-python, which is read in c and wrapped in python. This makes a little bit confused. Is this repo not being used?

    opened by Yingliangzhe 4
  • Custom messages

    Custom messages

    Hello there! I tried out the examples and managed to get them working. I was wondering if there is a recommended way to generate custom messages to be used with zenoh-python, for example by ingesting an .idl file?

    So far, I have managed to use pickle to serialize python containers to be sent, and deserialize them when received.

    opened by aaronchongth 4
  • Use maturin for building zenoh-python. Propose to resolve #64.

    Use maturin for building zenoh-python. Propose to resolve #64.

    This PR aims to resolve issue #64. It comes with

    • Replace the building tool rustsetup-tool by the latest maturin, which is the most recommended tool for PyO3 now.
    • Use maturin-action in Github action for better building management. This PR consistently set the Python to 3.7 in the release workflow. (since the latest maturin only supports >= abi-py37)
    • Support the cross-compilation for armv7. And all the cross-compilation and building on macOS are changed to docker instead of handcrafted settings over QEMU.

    Although this PR only covers the platforms specified in the previous workflow using QEMU, maturin has the possibility of cross-compiling packages for musllinux and other platforms like IBM PC.

    A good example of leveraging PyO3 is the workflow used in graphlib2, of which the built wheels are here.

    opened by YuanYuYuan 3
  • pip install not working on aarch64

    pip install not working on aarch64

    Trying to install on nvidia jetson:

    (venv) k@os:$ uname -i
    aarch64
    (venv) k@os:$ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 18.04.6 LTS
    Release:        18.04
    Codename:       bionic
    (venv) k@os:$ python --version
    Python 3.6.9
    

    But fails with:

    $ pip install eclipse-zenoh
    Collecting eclipse-zenoh
      Downloading eclipse_zenoh-0.5.0_b8.tar.gz (74 kB)
         |████████████████████████████████| 74 kB 846 kB/s            
      Installing build dependencies ... done
      Getting requirements to build wheel ... done
      Preparing wheel metadata (pyproject.toml) ... done
    Building wheels for collected packages: eclipse-zenoh
      Building wheel for eclipse-zenoh (pyproject.toml) ... error
      ERROR: Command errored out with exit status 1:
       command: /home/alf/proj/zenoh_play/venv/bin/python3 /home/alf/proj/zenoh_play/venv/lib/python3.6/site-packages/pip/_vendor/pep517/in_process/_in_process.py build_wheel /tmp/tmp0rv6g8c0
           cwd: /tmp/pip-install-zineoisv/eclipse-zenoh_8413ab83c85a404597df68fa8f7150a8
      Complete output (255 lines):
      Running `maturin pep517 build-wheel -i /home/alf/proj/zenoh_play/venv/bin/python3`
      ⚠️  Warning: Please use maturin in pyproject.toml with a version constraint, e.g. `requires = ["maturin>=0.11,<0.12"]`. This will become an error.
    TLDR;
      error: could not compile `shared_memory`
      
      To learn more, run the command again with --verbose.
      warning: build failed, waiting for other jobs to finish...
      error: build failed
      💥 maturin failed
        Caused by: Failed to build a native library through cargo
        Caused by: Cargo build finished with "exit status: 101": `cargo rustc --message-format json --manifest-path Cargo.toml --release --lib --`
      🔗 Found pyo3 bindings with abi3 support for Python ≥ 3.6
      🐍 Not using a specific python interpreter (With abi3, an interpreter is only required on windows)
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
        --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:87:13
         |
      87 |         Err(nix::Error::Sys(Errno::EEXIST)) => return Err(ShmemError::MappingIdExists),
         |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
         |
         = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
        --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:88:13
         |
      88 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapCreateFailed(e as u32)),
         |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
         |
         = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
         --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:103:13
          |
      103 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::UnknownOsError(e as u32)),
          |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
          |
          = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
         --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:119:13
          |
      119 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapCreateFailed(e as u32)),
          |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
          |
          = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
         --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:135:13
          |
      135 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
          |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
          |
          = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
         --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:150:13
          |
      150 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
          |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
          |
          = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
         --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:166:13
          |
      166 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
          |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
          |
          = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error: aborting due to 7 previous errors
      
      
      For more information about this error, try `rustc --explain E0164`.
      
      Error: command ['maturin', 'pep517', 'build-wheel', '-i', '/home/alf/proj/zenoh_play/venv/bin/python3'] returned non-zero exit status 1
      ----------------------------------------
      ERROR: Failed building wheel for eclipse-zenoh
    Failed to build eclipse-zenoh
    ERROR: Could not build wheels for eclipse-zenoh, which is required to install pyproject.toml-based projects
    
    opened by PinkJohnOfUs 3
  • In zenoh-python, example usage seems to be wrong

    In zenoh-python, example usage seems to be wrong

    Hello,

    In examples/zenoh/README.md , I am not able to use the examples as shown:

      python3 z_put
    

    As I get a "file not found" error. I am on Mac OS X 10.15.6 and python 3.8.2 , pip3 21.01 (but have seen this issue on Ubuntu 20.04 as well). Instead I have to go into that directory and do this:

    python3 z_put.py
    

    Is there something wrong with my python installation of this package, or is the example wrong?

    opened by vinnnyr 3
  • `unable to connect any locator of scouted peer` zenoh-plugin-dds

    `unable to connect any locator of scouted peer` zenoh-plugin-dds

    I am trying to use the Zenoh Python API with pycdr as in the demo to interface with cycloneDDS via zenoh-plugin-dds. The Python api was installed via pip: eclipse-zenoh-nightly I noticed that the python API examples don't seem to be compatible with the master or latest zenoh-plugin-dds docker image: Unable to connect any locator of scouted peer D6B17F40D8234F80AE42D205FCB23673 : [Locator { address: Tcp(SocketAddr(192.168.0.62:33681)), metadata: None }, Locator { address: Tcp(SocketAddr(172.17.0.1:33681)), metadata: None }] I have tried the master and apis-merge branches of the Python API but no luck. Should I build the Python API from source instead of using the PyPi binary?

    opened by akila-ganlath-tm 2
  • Problems with

    Problems with "hello world"

    Hey so I am trying to run

    python3 z_sub.py
    

    and I get the following error:

    Traceback (most recent call last):
      File "z_sub.py", line 20, in <module>
        from zenoh import Reliability, SubMode
    ImportError: cannot import name 'Reliability' from 'zenoh' (/home/andrzej/.local/lib/python3.8/site-packages/zenoh/__init__.py)
    
    

    What should I do? Do you think that maybe I have missed versions 0.6 and 0.5? Because even I can't change the zenoh.version for some reasons....

    opened by femust 2
  • Introducing Python context managers

    Introducing Python context managers

    Describe the feature

    I've tried out the zenoh-python api and I've noticed the manual opening and closing of sessions and subscriptions. I think it would be way more idiomatic Python to add context managers:

    with zenoh.open() as session:
        for key, value in session.info().items():
            print(f"{key}: {value}")
    

    This makes sure the session is automatically closed when exiting the "scope", even when an exception is raised. I have implemented the basic case for session here, but I have to admit that the async case was a bit beyond my current Rust abilities. Implementing these context managers exists of nothing more than implementing __enter__ and __exit__ as methods for the sync case and __aenter__ and __aexit__ for the async case. This would also allow you to make with zenoh.open() return a sync session and async with zenoh.open() return a async session, but that would require an intermediate object with the four methods implemented and would destroy the existing session = zenoh.open() style setup without some potentially ugly trickery.

    opened by thijsmie 1
  • Problems with sync examples

    Problems with sync examples

    opened by Jiarre 2
  • In case of Raw Value get_content() returns a list type instead of bytes

    In case of Raw Value get_content() returns a list type instead of bytes

    To reproduce:

    import zenoh
    v = zenoh.Value.Raw(0, b'\x48\x69\x21')
    print(type(v.get_content()))
    

    This displays <class 'list'>. But one would expect <class 'bytes'>

    bug 
    opened by JEnoch 0
  • Add API for shared memory transport

    Add API for shared memory transport

    zenoh in Rust implement a zero-copy shared memory transport. See examples of use:

    We need to make this transport also accessible from the zenoh Python API.

    new feature 
    opened by JEnoch 2
Releases(0.7.0-rc)
Using AWS's API Gateway + Lambda + Python to run a simple websocket application. For learning/testing

Using AWS's API Gateway + Lambda + Python to run a simple websocket application. For learning/testing. The AWS Resources seemed overly complex and were missing some critical gotchas in setting up a system like this.

Seth Miller 15 Dec 23, 2022
This is a simple python script to collect sub-domains from hackertarget API

Domain-Scraper ?? This is a simple python script to collect sub-domains from hackertarget API Note : This is tool is limited to 20 Queries / day with

CHINO TECH TOOLS 4 Sep 9, 2021
Domain To Api [ PYTHON ]

Domain To IP Usage You Open Terminal For Run The Program python ip.py Input & Output Input Your List e.g > domain.txt Output ( For Save Output File )

It's Me Jafar 0 Dec 12, 2021
Test - Python project for Collection Server and API Server

QProjectPython Collection Server 와 API Server 를 위한 Python 프로젝트 입니다. [FastAPI참고]

null 1 Jan 3, 2022
Equibles Stocks API for Python

Equibles Stocks API for Python Requirements. Python 2.7 and 3.4+ Installation & Usage pip install If the python package is hosted on Github, you can i

Equibles 3 Apr 15, 2022
A simple tool to utilize the basic functionality of the Private API From Virus Total

Welcome To VT-SCAN (viurs total api) Information This is a simple tool to utilize the basic functionality of the Private API From Virus Total. with th

0X0ŽĒR∅⁰ 1 Sep 21, 2022
API for concurrency connections

Multi-connection-server-API API for concurrency connections difference between this server and the echo server is the call to lsock.setblocking(False)

Muziwandile Nkomo 1 Jan 4, 2022
API to establish connection between server and client

Socket-programming API to establish connection between server and client, socket.socket() creates a socket object that supports the context manager ty

Muziwandile Nkomo 1 Oct 30, 2021
An API for controlling Wi-Fi connections on Balena devices.

Description An API for controlling Wi-Fi connections on Balena devices. It does not contain an interface, instead it provides API endpoints to send re

null 8 Dec 25, 2022
This is a zeep based SOAP client wrapper for simple communication with the Bricknode SOAP API.

This is a zeep based SOAP client wrapper for simple communication with the Bricknode SOAP API.

Nord Fondkommission AB 2 Dec 15, 2021
Herramienta para transferir eventos de Shadowserver REST API hacia Azure Blob Storage.

Herramienta para transferir eventos de Shadowserver REST API hacia Azure Blob Storage.

CSIRT-RD 1 Feb 4, 2022
API Server for VoIP analysis (CDR + Audio CODECs)

Swagger generated server Overview This server was generated by the swagger-codegen project. By using the OpenAPI-Spec from a remote server, you can ea

Noor Muhammad Malik 1 Jan 11, 2022
Medusa is a cross-platform agent compatible with both Python 3.8 and Python 2.7.

Medusa Medusa is a cross-platform agent compatible with both Python 3.8 and Python 2.7. Installation To install Medusa, you'll need Mythic installed o

Mythic Agents 123 Nov 9, 2022
ProtOSINT is a Python script that helps you investigate Protonmail accounts and ProtonVPN IP addresses

ProtOSINT ProtOSINT is a Python script that helps you investigate ProtonMail accounts and ProtonVPN IP addresses. Description This tool can help you i

pixelbubble 249 Dec 23, 2022
A Python tool used to automate the execution of the following tools : Nmap , Nikto and Dirsearch but also to automate the report generation during a Web Penetration Testing

?? WebMap A Python tool used to automate the execution of the following tools : Nmap , Nikto and Dirsearch but also to automate the report generation

Iliass Alami Qammouri 274 Jan 1, 2023
msgspec is a fast and friendly implementation of the MessagePack protocol for Python 3.8+

msgspec msgspec is a fast and friendly implementation of the MessagePack protocol for Python 3.8+. In addition to serialization/deserializat

Jim Crist-Harif 414 Jan 6, 2023
Light, simple RPC framework for Python

Agileutil是一个Python3 RPC框架。基于微服务架构,封装了rpc/http/orm/log等常用组件,提供了简洁的API,开发者可以很快上手,快速进行业务开发。

null 16 Nov 22, 2022
Minimal, self-hosted, 0-config alternative to ngrok. Caddy+OpenSSH+50 lines of Python.

If you have a webserver running on one computer (say your development laptop), and you want to expose it securely (ie HTTPS) via a public URL, SirTunnel allows you to easily do that.

Anders Pitman 423 Jan 2, 2023
NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks.

NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks.

NetworkX 12k Jan 2, 2023