Metadata-Version: 2.1
Name: synthientpy
Version: 0.1.3
Summary: Synthient API bindings.
Home-page: https://github.com/synthient/synthientpy
License: Apache-2.0
Author: synthientpy
Author-email: benjamin@synthient.com
Requires-Python: >=3.8,<4.0
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Provides-Extra: dev
Provides-Extra: doc
Provides-Extra: test
Requires-Dist: aiohttp (==3.9.4)
Requires-Dist: black (>=22.3.0,<23.0.0) ; extra == "dev"
Requires-Dist: flake8 (==4.0.1) ; extra == "dev"
Requires-Dist: flake8-docstrings (>=1.6.0,<2.0.0) ; extra == "dev"
Requires-Dist: isort (==5.10.1) ; extra == "dev"
Requires-Dist: livereload (>=2.6.3,<3.0.0)
Requires-Dist: mike (>=1.1.2,<2.0.0) ; extra == "doc"
Requires-Dist: mkdocs (>=1.2.3,<2.0.0) ; extra == "doc"
Requires-Dist: mkdocs-autorefs (>=0.3.1,<0.4.0) ; extra == "doc"
Requires-Dist: mkdocs-include-markdown-plugin (>=3.2.3,<4.0.0) ; extra == "doc"
Requires-Dist: mkdocs-material (>=8.1.11,<9.0.0) ; extra == "doc"
Requires-Dist: mkdocs-material-extensions (>=1.0.3,<2.0.0)
Requires-Dist: mkdocstrings (>=0.18.0,<0.19.0) ; extra == "doc"
Requires-Dist: mypy (>=1.5.1,<2.0.0) ; extra == "dev"
Requires-Dist: pkginfo (>=1.9,<2.0) ; extra == "doc"
Requires-Dist: pre-commit (>=2.17.0,<3.0.0) ; extra == "dev"
Requires-Dist: pydantic (==2.6.4)
Requires-Dist: pyreadline (>=2.1,<3.0)
Requires-Dist: pytest (>=7.0.1,<8.0.0) ; extra == "test"
Requires-Dist: pytest-cov (>=3.0.0,<4.0.0) ; extra == "test"
Requires-Dist: requests (==2.32.3)
Requires-Dist: setuptools (>=68.0,<69.0) ; extra == "doc"
Requires-Dist: toml (>=0.10.2,<0.11.0) ; extra == "dev"
Requires-Dist: tox (>=3.24.5,<4.0.0) ; extra == "dev"
Requires-Dist: twine (>=3.8.0,<4.0.0) ; extra == "dev"
Requires-Dist: virtualenv (>=20.0,<21.0) ; extra == "doc"
Description-Content-Type: text/markdown

# synthientpy

A strongly typed Python client for [Synthient](https://synthient.com).
Supports asynchronous and synchronous requests to the Synthient API.

## Installation

MacOS/Linux
```bash
pip3 install synthientpy
```
Windows
```bat
pip install synthientpy
```

## Usage

Check synthientpy/models for the available fields in the response object.

Client and AsyncClient have the following methods:

```python
class Client:
    def __init__(
        self,
        api_key: str,
        default_timeout: int = DEFAULT_TIMEOUT,
        proxy: Optional[str] = None,
    ) -> None: ...
     def lookup(self, token: str) -> LookupResponse: ...
     def visits(self, session: str) -> VisitsResponse: ...
     def delete(self, token: str) -> DeleteResponse: ...
```

### Synchronous Usage

```python
import synthientpy as synthient
client = synthient.Client(
    api_key=os.getenv("SYNTHIENT_API_KEY"),
)
token = "..."
visitor_info = client.lookup(token)
print(visitor_info)
```

### Asynchronous Usage

```python
import asyncio
import synthientpy as synthient

async def main():
    client = synthient.AsyncClient(
        api_key=os.getenv("SYNTHIENT_API_KEY"),
    )
    token = "..."
    visitor_info = await client.lookup(token)
    print(visitor_info)

asyncio.run(main())
```
### Helper Functions

In addition to the client, there are helper functions that can be used to interact with the Synthient API.

```python
def verify_token(lookup: LookupResponse, token_type: TokenType) -> bool: ...

def determine_action(lookup: LookupResponse, token_type: TokenType) -> str: ...
```
Verify token checks if the token is valid and if the server should reject or accept it.
Determine action checks if the token is valid and returns the action that should be taken based on the token type.
```python
class ActionType(str, Enum):
    """Translates the risk level into an action to take.
    ALLOW - Allow the visitor to continue.
    REDIRECT - Redirect the visitor to a different page. Or have them perform another form of verification.
    BLOCK - Block the visitor from accessing
    """

    ALLOW = 0
    REDIRECT = 1
    BLOCK = 2
```

### Models

Full documentation of the fields and their types can be found in the [Synthient API documentation](https://synthient.com/api). You can also find all the types in the `synthientpy.models` module.


### Issues

For any issues or feature requests, please open an issue on the [GitHub repository](https://github.com/synthient/synthientpy)

