# Darsman Place Tag

## Requirements

- Python (== 3.10)
- grpcio-tools (>=1.62.1)
- pydantic (>=2.7.0)

## Installation

Run the following command using pip:

```bash
pip install dmpt
```

## Sample code

```python
import asyncio
from dmpt import Seo

# see `Env example` for confgs, you may want to only fill host,port and api_key
seo = Seo()

async def main():
    # Search one seo using its identifier
    result = await seo.search(
        place="Checkout_page",
        tag="footer",
        request_id= "request id",   # Optional: default to None
        timeout="3.5",              # Optional: override default timeout
        wait_for_ready=True         # Optional: wait for channel if not ready
    )
    print(result)

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

```

```python
### === PLACE_TAG SDK CONFIG === ###

# Server config
PLACE_TAG_SDK_HOST=127.0.0.1
PLACE_TAG_SDK_PORT=50051
PLACE_TAG_SDK_API_KEY=your_api_key_here

# Graceful shutdown
PLACE_TAG_SDK_CHANNEL_SHUTDOWN_GRACE=10

# Keepalive (for long-lived connection health checks)
PLACE_TAG_SDK_KEEPALIVE_TIME_MS=60000
PLACE_TAG_SDK_KEEPALIVE_TIMEOUT_MS=5000
PLACE_TAG_SDK_KEEPALIVE_PERMIT_WITHOUT_CALLS=1
PLACE_TAG_SDK_MAX_PINGS_WITHOUT_DATA=0

# Retry policy
PLACE_TAG_SDK_MAX_ATTEMPTS=5  # more than 5 isn't allowed by grpc
PLACE_TAG_SDK_INITIAL_BACKOFF=0.1s
PLACE_TAG_SDK_MAX_BACKOFF=1.5s
PLACE_TAG_SDK_BACKOFF_MULTIPLIER=2.0
PLACE_TAG_SDK_RETRYABLE_STATUS_CODES=["UNAVAILABLE", "RESOURCE_EXHAUSTED", "ABORTED"]

# RPC-level configs
PLACE_TAG_SDK_WAIT_FOR_READY=true
PLACE_TAG_SDK_TIMEOUT=5.0
```
