hug (Hopefully Useful Guide) is a microframework for exposing idiomatically correct and standard internal Python APIs externally.
It is a framework to allow developers and architects to define logic and structure once, and then cleanly expose it over other means.
hug has very minimal base system requirements – a local installation of Python3.3+, and optionally inside a virtualenv. Additionally, pip is required, but this is included with most Python3 installations by default.
Key Features
- Clean way to create HTTP REST APIs.
- Seamless micro-service communication, which makes it easy to switch out pure Python calls for HTTP communication and vice versa.
- Expandable type system for simple parameters.
- Full integrated support for Marshmallow, an advanced serialization, deserialization, and validation library. Hug supports using marshmallow fields and schemas as input types.
- Python3 type annotations for validation and API specification.
- Provides a handful of directives for commonly needed attributes.
- number: Validates that a whole number was passed in.
- float_number: Validates that a valid floating point number was passed in.
- decimal: Validates and converts the provided value into a Python Decimal object.
- uuid: Validates that the provided value is a valid UUID.
- text: Validates that the provided value is a single string parameter.
- multiple: Ensures the parameter is passed in as a list (even if only one value is passed).
- boolean: A basic naive HTTP style boolean where no value passed in is seen as ‘False’ and any value passed in (even if its ‘false’) is seen as ‘True’.
- smart_boolean: A smarter, but more CPU expensive, boolean that checks the content of the value for common true / false formats (true, True, t, 1) or (false, False, f, 0).
- delimited_list(delimiter): splits up the passed in value based on the provided delimiter and then passes it to the function as a list.
- one_of (values): Validates that the passed in value is one of those specified.
- mapping(dict_of_passed_in_to_desired_values): Like ‘one_of’, but with a dictionary of acceptable values, to converted value.
- multi(types): Allows passing in multiple acceptable types for a parameter, short circuiting on the first acceptable one/
- in_range(lower, upper, convert=number): Accepts a number within a lower and upper bound of acceptable values.
- less_than(limit, convert=number): Accepts a number within a lower and upper bound of acceptable values.
- – `greater_than(minimum, convert=number)`: Accepts a value above a given minimum
- length(lower, upper, convert=text): Accepts a value that is within a specific length limit.
- shorter_than(limit, convert=text): Accepts a text value shorter than the specified length limit/
- longer_than(limit, convert=text): Accepts a value up to the specified limit.
- cut_off(limit, convert=text): Cuts off the provided value at the specified index.
- Create new directives.
- Hug routing:
- Can be used directly as function decorators.
- Can be used separately from the function.
- Can be stored, modified, and chained before being used. Every route object is chainable and doesn’t perform any actions until it is ran against a function, method, or object.
- Supports any WSGI server that uses autoreloading, for example Gunicorn and uWSGI.
- Built upon Falcon’s high performance HTTP library.
- Split APIs over multiple files.
Website: github.com/hugapi/hug
Support:
Developer: Timothy Edmund Crosley
License: MIT License
hug is written in Python. Learn Python with our recommended free books and free tutorials.
Related Software
| Best Python Micro Frameworks | |
|---|---|
| Flask | Hugely popular microframework based on Werkzeug and Jinja2 |
| FastAPI | Web framework for building APIs |
| Starlette | Lightweight ASGI framework/toolkit |
| aiohttp | Asynchronous HTTP client/server for asyncio and Python |
| Sanic | Web server and web framework |
| Falcon | Build cloud APIs, smart proxies, and app backends |
| Quart | Web microframework based on Asyncio |
| Pyramid | Start small, finish big, stay finished framework |
| Bottle | Fast, simple and lightweight WSGI micro web framework |
| Chalice | Python Serverless Microframework for AWS |
| CherryPy | Mature, minimalist, Python object-oriented web framework |
| TurboGears | Hybrid framework acting as a Full Stack framework or Microframework |
| Quixote | Aimed at sites where complex programming is required |
| Klein | Micro-framework for developing production-ready web services with Python |
| circuits | Lightweight event driven application framework |
| Clastic | Functional web framework |
| Hug | Make developing Python driven APIs as simple as possible |
| MicroPie | Ultra-micro ASGI Python web framework |
| Litestar | Powerful, lightweight, and flexible ASGI framework |
| BlackSheep | Asynchronous Python web framework |
| Robyn | Python web framework designed for high performance |
| Microdot | Small web framework for Python and MicroPython |
Read our verdict in the software roundup.
Explore our carefully curated directory of recommended free and open source software, covering every major software category.The directory forms part of our extensive collection of articles for Linux enthusiasts. It includes hundreds of detailed reviews, together with free and open source alternatives to proprietary software from companies such as Google, Microsoft, Apple, Adobe, IBM, Cisco, Oracle, and Autodesk. LinuxLinks also covers interesting projects worth exploring, Linux-compatible hardware, free programming books and tutorials, and much more. Know a useful free and open source Linux application that we haven’t covered? Tell us about it using our submission form. |


Please read our Comment Policy before commenting.