Skip to main content

Ultrafast web framework focusing on composing Web APIs all the more rapidly and with needless baggage.

Project description

Downloads PyPI version Wheel Windows Build Status pyimp RTD licence Twitter Follow

Logo

Forever Scalable

𝙲𝚒𝚝𝚞𝚜 is a python based, ultrafast web framework focusing on composing Web APIs all the more rapidly and with needless baggage.

Citus requires Python 3.8 or later.

Features

The key features are:

  • Fast: Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). One of the fastest Python frameworks available.

  • Fast to code: Increase the speed to develop features by about 200% to 300%. *

  • Fewer bugs: Reduce about 40% of human (developer) induced errors. *

  • Intuitive: Great editor support. Completion everywhere. Less time debugging.

  • Easy: Designed to be easy to use and learn. Less time reading docs.

  • Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.

  • Robust: Get production-ready code. With automatic interactive documentation.

  • Standards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.

* estimation based on tests on an internal development team, building production applications.

  • Support for Ansi, RGB and HTML color models
  • Support for tabular presentation of data
  • Interactive progressbars
  • Code completions
  • Nesting of commands
  • Automatic help page generation
  • Syntax highlighting
  • Autosuggestions
  • Key Binders

Getting Started

Installation

You can install citus via the Python Package Index (PyPI)

pip install -U citus

Example

Create it

  • Create a file main.py with:
from typing import Optional

import citus

app = citus.App()


@app.GET("/")
def read_root():
    return "Hello World"


@app.GET("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}
Or use async def...

If your code uses async / await, use async def:

from typing import Optional
import quo

app = citus.App()


@app.GET("/")
async def read_root():
    return "Hello World"


@app.GET("/items/{item_id}")
async def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

Note:

If you don't know, check the "In a hurry?" section about async and await in the docs.

Run it

Run the server with:

$ citus main:app --reload

INFO:     Citus running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [28720]
INFO:     Started server process [28722]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
About the command uvicorn main:app --reload...

The command citus main:app refers to:

  • main: the file main.py (the Python "module").
  • app: the object created inside of main.py with the line app = citus.App().
  • --reload or -r: make the server restart after code changes. Only do this for development.

Example upgrade

Now modify the file main.py to receive a body from a PUT request.

Declare the body using standard Python types, thanks to Pydantic.

from typing import Optional

import citus

app = citus.App()


class Item(citus.Base):
    name: str
    price: float
    is_offer: Optional[bool] = None


@app.GET("/")
def read_root():
    return "Hello World"


@app.GET("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}


@app.GET("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

The server should reload automatically (because you added --reload to the command above).

Check it

Open your browser at http://127.0.0.1:8000/items/33?q=checkuser.

You will see the JSON response as:

{"item_id": 33, "q": "checkuser"}

You already created an API that:

  • Receives HTTP requests in the paths / and /items/{item_id}.
  • Both paths take GET operations (also known as HTTP methods).
  • The path /items/{item_id} has a path parameter item_id that should be an int.
  • The path /items/{item_id} has an optional str _que

Getting Help

Community

For discussions about the usage, development, and the future of quo, please join our Google community

Resources

Bug tracker

If you have any suggestions, bug reports, or annoyances please report them to our issue tracker at Bug tracker or send an email to:

📥 secretum@googlegroups.com

License📑

License: MIT
This software is licensed under the MIT License. See the License file in the top distribution directory for the full license text.

Code of Conduct

Code of Conduct is adapted from the Contributor Covenant, version 1.2.0 available at Code of Conduct

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

citus-0.0.3-py3-none-any.whl (105.4 kB view details)

Uploaded Python 3

Citus-0.0.3-py3.9.egg (220.7 kB view details)

Uploaded Source

Citus-0.0.3-py3-none-any.whl (105.4 kB view details)

Uploaded Python 3

File details

Details for the file citus-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: citus-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 105.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for citus-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 cf00ebc24b68d386d01c0c40df124834ca0def4d898428e486513b5894bba781
MD5 fe5f2073e82d8da350be1d2775c3b304
BLAKE2b-256 5e1008ee7ba30d9e160ae18e10b2dd5a795a539663818717a29f8d637a89d3ac

See more details on using hashes here.

File details

Details for the file Citus-0.0.3-py3.9.egg.

File metadata

  • Download URL: Citus-0.0.3-py3.9.egg
  • Upload date:
  • Size: 220.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for Citus-0.0.3-py3.9.egg
Algorithm Hash digest
SHA256 67b602e85456f6806360d5d42f331f79b9c51b916db60e9789be3064c78066fa
MD5 a9a8fb170366deaa3147b109b5e4ea83
BLAKE2b-256 8f09ac105c9c1580d1bb8cba4e766baf68a2629d3304ceca8fae154fda20d713

See more details on using hashes here.

File details

Details for the file Citus-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: Citus-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 105.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for Citus-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 da8a838b859d4ba696ea4c0c9eccdbf31b8bb60796d3ad13a63be4cc62aa4cfb
MD5 2e1b5af11aed2e66c3e7d1c34b1becbd
BLAKE2b-256 4fb5d3a7b4e0cf9877381c1dba71357fef1f52155ae4ad03702a76b5a95178ef

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page