Metadata-Version: 2.4
Name: data-horizon
Version: 2.0.2
Summary: Horizon REST API + client
Author-email: MWS Data Bridge <onetools@mts.ru>
License: Apache-2.0
Project-URL: Homepage, https://github.com/MTSWebServices/horizon
Project-URL: Documentation, https://data-horizon.readthedocs.io/
Project-URL: Source, https://github.com/MTSWebServices/horizon
Project-URL: CI/CD, https://github.com/MTSWebServices/horizon/actions
Project-URL: Tracker, https://github.com/MTSWebServices/horizon/issues
Keywords: Horizon,REST,API,HWM
Classifier: Development Status :: 5 - Production/Stable
Classifier: Framework :: Pydantic :: 2
Classifier: Framework :: FastAPI
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.10
Description-Content-Type: text/x-rst
License-File: LICENSE.txt
Requires-Dist: pydantic<3,>=2
Requires-Dist: typing-extensions>=4.0.0
Requires-Dist: authlib<2.0,>=1.0
Provides-Extra: backend
Requires-Dist: pydantic-settings; extra == "backend"
Requires-Dist: pydantic-settings-logging; extra == "backend"
Requires-Dist: fastapi>=0.103.2; extra == "backend"
Requires-Dist: starlette; extra == "backend"
Requires-Dist: python-multipart; extra == "backend"
Requires-Dist: anyio; extra == "backend"
Requires-Dist: starlette-exporter; extra == "backend"
Requires-Dist: uvicorn; extra == "backend"
Requires-Dist: alembic; extra == "backend"
Requires-Dist: sqlalchemy>=2.0; extra == "backend"
Requires-Dist: sqlalchemy-utils; extra == "backend"
Requires-Dist: greenlet>=3.1.1; extra == "backend"
Requires-Dist: asgi-correlation-id; extra == "backend"
Requires-Dist: python-json-logger; extra == "backend"
Requires-Dist: coloredlogs; extra == "backend"
Requires-Dist: pyyaml; extra == "backend"
Requires-Dist: uuid6; extra == "backend"
Requires-Dist: devtools; extra == "backend"
Requires-Dist: passlib; extra == "backend"
Provides-Extra: postgres
Requires-Dist: asyncpg; extra == "postgres"
Provides-Extra: client-sync
Requires-Dist: requests; extra == "client-sync"
Requires-Dist: urllib3>=1.26.0; extra == "client-sync"
Provides-Extra: ldap
Requires-Dist: bonsai>=1.5.3; extra == "ldap"
Requires-Dist: argon2-cffi; extra == "ldap"
Dynamic: license-file

.. _readme:

Data.Horizon
============

|Repo Status| |DockerHub Latest Release| |PyPI Latest Release| |PyPI License| |PyPI Python Version| |PyPI Downloads|
|Documentation| |CI Status| |Test Coverage| |pre-commit.ci Status|

.. |Repo Status| image:: https://www.repostatus.org/badges/latest/active.svg
    :alt: Repo status - Active
    :target: https://github.com/MTSWebServices/horizon
.. |DockerHub Latest Release| image:: https://img.shields.io/docker/v/mtsrus/horizon-backend?sort=semver&label=docker
    :alt: DockerHub - Latest release
    :target: https://hub.docker.com/r/mtsrus/horizon-backend
.. |PyPI Latest Release| image:: https://img.shields.io/pypi/v/data-horizon
    :alt: PyPI - Latest Release
    :target: https://pypi.org/project/data-horizon/
.. |PyPI License| image:: https://img.shields.io/pypi/l/data-horizon.svg
    :alt: PyPI - License
    :target: https://github.com/MTSWebServices/horizon/blob/develop/LICENSE.txt
.. |PyPI Python Version| image:: https://img.shields.io/pypi/pyversions/data-horizon.svg
    :alt: PyPI - Python Version
    :target: https://pypi.org/project/data-horizon/
.. |PyPI Downloads| image:: https://img.shields.io/pypi/dm/data-horizon
    :alt: PyPI - Downloads
    :target: https://pypi.org/project/data-horizon/
.. |Documentation| image:: https://readthedocs.org/projects/data-horizon/badge/?version=stable
    :alt: Documentation - ReadTheDocs
    :target: https://data-horizon.readthedocs.io/
.. |CI Status| image:: https://github.com/MTSWebServices/horizon/workflows/Tests/badge.svg
    :alt: Github Actions - latest CI build status
    :target: https://github.com/MTSWebServices/horizon/actions
.. |Test Coverage| image:: https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/
    MTSOnGithub/03e73a82ecc4709934540ce8201cc3b4/raw/horizon_badge.json
    :target: https://github.com/MTSWebServices/horizon/actions
.. |pre-commit.ci Status| image:: https://results.pre-commit.ci/badge/github/MTSWebServices/horizon/develop.svg
    :alt: pre-commit.ci - status
    :target: https://results.pre-commit.ci/latest/github/MTSWebServices/horizon/develop


|Logo|

.. |Logo| image:: https://raw.githubusercontent.com/MTSWebServices/horizon/b4c6a859a1b5d13ff85e3daa39e25b14f1a36f66/mddocs/docs/_static/logo.svg
    :width: 400
    :alt: Horizon logo
    :target: https://github.com/MTSWebServices/horizon/

What is Data.Horizon?
---------------------

Data.Horizon is an application that implements simple HWM Store. Right now it includes:

* REST API
* Python client

Goals
-----

* Allow users to save and fetch High Water Mark (*HWM*) items. These are ``name+type+value`` triples with few optional fields.
* Avoid confusion between different user's data by separating HWMs to different *namespaces*. Each HWM is bound to namespace.
* Allow users to get HWM change history, to determine who and when changed a specific HWM value and other fields.
* Provide RBAC model to ensure that interaction with ``HWMs`` and ``Namespaces`` are governed by role assigned to each user. Roles are assigned per namespace.

Non-goals
---------

* This is not a *data* storage, it is not designed to store raw table rows. It is designed to store only HWM values.
* Attaching machine-readable metadata for HWMs (like ``process``, ``origin``) is not supported. This should be stored somewhere else.

.. documentation

Documentation
-------------

See https://data-horizon.readthedocs.io/
