persona-sdk-python 0.2.23__tar.gz → 0.2.25__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- persona_sdk_python-0.2.25/.github/workflows/ci.yml +29 -0
- persona_sdk_python-0.2.25/.github/workflows/deploy.yml +154 -0
- persona_sdk_python-0.2.25/MIGRATION_GITHUB.md +44 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/PKG-INFO +7 -1
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/README.md +6 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/__init__.py +3 -0
- persona_sdk_python-0.2.25/persona_sdk/api/channels.py +64 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/pyproject.toml +1 -1
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/uv.lock +3 -3
- persona_sdk_python-0.2.23/bitbucket-pipelines.yml +0 -18
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/.gitignore +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/DEPLOY.md +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/_serde.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/__init__.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/agents.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/credentials.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/features.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/human_tasks.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/knowledge_bases.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/markup_rules.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/missions.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/projects.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/providers.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/service_prices.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/sessions.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/triggers.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/api/workflows.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/auth/__init__.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/auth/api_key_auth.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/auth/base.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/auth/bearer_token_auth.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/client.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/runners/__init__.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/runners/agent_runner.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/runners/resource_retriever.py +0 -0
- {persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/runners/tool_invoker.py +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
# Smoke su PR: il repo non ha suite di test (non ne aveva in Bitbucket).
|
|
4
|
+
# Lo smoke verifica che uv.lock risolva (--frozen) e che il package importi.
|
|
5
|
+
# Il publish avviene solo al push su main (deploy.yml).
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
pull_request:
|
|
9
|
+
branches: [main]
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ci-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
smoke:
|
|
17
|
+
name: Smoke
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
- uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: '3.12'
|
|
24
|
+
- name: Installa uv
|
|
25
|
+
run: pip install uv
|
|
26
|
+
- name: Smoke import
|
|
27
|
+
run: |
|
|
28
|
+
uv sync --frozen
|
|
29
|
+
uv run python -c "import persona_sdk; print('smoke ok:', persona_sdk.__name__)"
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
# Due percorsi di ingresso:
|
|
4
|
+
# - push su main → SEMPRE smoke + build + publish (percorso sicuro default)
|
|
5
|
+
# - workflow_dispatch → scelta manuale della modalità:
|
|
6
|
+
# test-and-publish : smoke + build + publish (come il push)
|
|
7
|
+
# publish-only : SOLO build + publish — test saltati volontariamente
|
|
8
|
+
#
|
|
9
|
+
# Il job `version` riconcilia la versione sull'ultimo tag git (max semver,
|
|
10
|
+
# patch +1 — es. 0.2.23 → 0.2.24) e applica una guard anti-collisione:
|
|
11
|
+
# interroga PyPI e bumpa finché la versione è libera (PyPI è immutabile:
|
|
12
|
+
# un doppio upload fallirebbe e bloccherebbe la release).
|
|
13
|
+
#
|
|
14
|
+
# Poi smoke ∥ build-package in parallelo → publish (OIDC Trusted
|
|
15
|
+
# Publishing, nessun segreto) → tag git della versione.
|
|
16
|
+
|
|
17
|
+
on:
|
|
18
|
+
push:
|
|
19
|
+
branches: [main]
|
|
20
|
+
workflow_dispatch:
|
|
21
|
+
inputs:
|
|
22
|
+
mode:
|
|
23
|
+
description: "Modalità di pubblicazione"
|
|
24
|
+
type: choice
|
|
25
|
+
required: true
|
|
26
|
+
default: test-and-publish
|
|
27
|
+
options:
|
|
28
|
+
- test-and-publish
|
|
29
|
+
- publish-only
|
|
30
|
+
|
|
31
|
+
concurrency:
|
|
32
|
+
group: publish-persona-sdk-python
|
|
33
|
+
cancel-in-progress: false
|
|
34
|
+
|
|
35
|
+
permissions:
|
|
36
|
+
contents: write # push del tag di versione con GITHUB_TOKEN
|
|
37
|
+
id-token: write # Trusted Publishing OIDC verso PyPI
|
|
38
|
+
|
|
39
|
+
jobs:
|
|
40
|
+
version:
|
|
41
|
+
name: Calcola versione (riconciliazione sui tag + guard PyPI)
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
outputs:
|
|
44
|
+
version: ${{ steps.v.outputs.version }}
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v4
|
|
47
|
+
with:
|
|
48
|
+
fetch-depth: 0 # serve la history dei tag
|
|
49
|
+
- id: v
|
|
50
|
+
run: |
|
|
51
|
+
LAST=$(git tag -l --sort=-v:refname | head -1)
|
|
52
|
+
VERSION="${LAST%.*}.$(( ${LAST##*.} + 1 ))"
|
|
53
|
+
echo "Ultimo tag git ${LAST} → proposta ${VERSION}"
|
|
54
|
+
# Guard anti-collisione: bumpa finché la versione esiste già su PyPI
|
|
55
|
+
for _ in 1 2 3 4 5; do
|
|
56
|
+
if curl -sf "https://pypi.org/pypi/persona-sdk-python/${VERSION}/json" > /dev/null 2>&1; then
|
|
57
|
+
echo "⚠️ ${VERSION} già esiste su PyPI → bump"
|
|
58
|
+
VERSION="${VERSION%.*}.$(( ${VERSION##*.} + 1 ))"
|
|
59
|
+
else
|
|
60
|
+
break
|
|
61
|
+
fi
|
|
62
|
+
done
|
|
63
|
+
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
|
64
|
+
echo "Versione finale: ${VERSION}"
|
|
65
|
+
|
|
66
|
+
test:
|
|
67
|
+
name: Test (smoke import)
|
|
68
|
+
runs-on: ubuntu-latest
|
|
69
|
+
if: github.event_name == 'push' || inputs.mode == 'test-and-publish'
|
|
70
|
+
steps:
|
|
71
|
+
- uses: actions/checkout@v4
|
|
72
|
+
- uses: actions/setup-python@v5
|
|
73
|
+
with:
|
|
74
|
+
python-version: '3.12'
|
|
75
|
+
- name: Installa uv
|
|
76
|
+
run: pip install uv
|
|
77
|
+
- name: Smoke import
|
|
78
|
+
# il repo non ha suite di test (non ne aveva in Bitbucket): lo smoke
|
|
79
|
+
# verifica che uv.lock risolva e che il package importi
|
|
80
|
+
run: |
|
|
81
|
+
uv sync --frozen
|
|
82
|
+
uv run python -c "import persona_sdk; print('smoke ok:', persona_sdk.__name__)"
|
|
83
|
+
|
|
84
|
+
build-package:
|
|
85
|
+
name: Build & check sdist/wheel
|
|
86
|
+
runs-on: ubuntu-latest
|
|
87
|
+
needs: [version] # in parallelo al job test
|
|
88
|
+
steps:
|
|
89
|
+
- uses: actions/checkout@v4
|
|
90
|
+
- uses: actions/setup-python@v5
|
|
91
|
+
with:
|
|
92
|
+
python-version: '3.12'
|
|
93
|
+
- name: Installa uv
|
|
94
|
+
run: pip install uv
|
|
95
|
+
- name: Build (versione sed-ata in pyproject, come faceva Bitbucket)
|
|
96
|
+
env:
|
|
97
|
+
VERSION: ${{ needs.version.outputs.version }}
|
|
98
|
+
run: |
|
|
99
|
+
sed -i "s/^version = .*/version = \"${VERSION}\"/" pyproject.toml
|
|
100
|
+
uv run --with build python -m build
|
|
101
|
+
uv run --with twine python -m twine check dist/*
|
|
102
|
+
- uses: actions/upload-artifact@v4
|
|
103
|
+
with:
|
|
104
|
+
name: dist
|
|
105
|
+
path: dist/
|
|
106
|
+
|
|
107
|
+
publish:
|
|
108
|
+
name: Publish su PyPI
|
|
109
|
+
runs-on: ubuntu-latest
|
|
110
|
+
needs: [version, test, build-package]
|
|
111
|
+
# pubblica se il build è verde E (il test è verde OPPURE volontariamente assente)
|
|
112
|
+
if: >-
|
|
113
|
+
always() &&
|
|
114
|
+
needs.build-package.result == 'success' &&
|
|
115
|
+
(needs.test.result == 'success' || needs.test.result == 'skipped')
|
|
116
|
+
steps:
|
|
117
|
+
- uses: actions/download-artifact@v4
|
|
118
|
+
with:
|
|
119
|
+
name: dist
|
|
120
|
+
path: dist/
|
|
121
|
+
- name: Publish (Trusted Publishing OIDC — nessun token)
|
|
122
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
123
|
+
- name: Summary
|
|
124
|
+
env:
|
|
125
|
+
VERSION: ${{ needs.version.outputs.version }}
|
|
126
|
+
MODE: ${{ inputs.mode || 'test-and-publish (push su main)' }}
|
|
127
|
+
run: |
|
|
128
|
+
{
|
|
129
|
+
echo "### Publish persona-sdk-python ${VERSION}"
|
|
130
|
+
echo ""
|
|
131
|
+
echo "Modalità: **${MODE}**"
|
|
132
|
+
if [ "${{ needs.test.result }}" = "skipped" ]; then
|
|
133
|
+
echo ""
|
|
134
|
+
echo "⚠️ **Test saltati volontariamente** (publish-only)"
|
|
135
|
+
fi
|
|
136
|
+
echo ""
|
|
137
|
+
echo "Pacchetto: https://pypi.org/project/persona-sdk-python/${VERSION}/"
|
|
138
|
+
} >> "$GITHUB_STEP_SUMMARY"
|
|
139
|
+
|
|
140
|
+
tag-release:
|
|
141
|
+
name: Tag di versione
|
|
142
|
+
runs-on: ubuntu-latest
|
|
143
|
+
needs: [version, publish]
|
|
144
|
+
if: always() && needs.publish.result == 'success'
|
|
145
|
+
steps:
|
|
146
|
+
- uses: actions/checkout@v4
|
|
147
|
+
- name: Crea e pusha il tag
|
|
148
|
+
env:
|
|
149
|
+
VERSION: ${{ needs.version.outputs.version }}
|
|
150
|
+
run: |
|
|
151
|
+
git config user.name "RoBYCoNTe"
|
|
152
|
+
git config user.email "2301162+RoBYCoNTe@users.noreply.github.com"
|
|
153
|
+
git tag -a "${VERSION}" -m "version ${VERSION}"
|
|
154
|
+
git push origin "${VERSION}"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Migrazione Bitbucket → GitHub Actions
|
|
2
|
+
|
|
3
|
+
Repo migrato da `applicaguru/persona-sdk-python` (Bitbucket) a
|
|
4
|
+
`applica-software-guru/persona-sdk-python` (GitHub, privato) il
|
|
5
|
+
**2026-09-25**.
|
|
6
|
+
|
|
7
|
+
## Fasi
|
|
8
|
+
|
|
9
|
+
1. **Validazione locale** — smoke (`uv sync` + import `persona_sdk`)
|
|
10
|
+
+ `uv build` (sdist+wheel): verdi. Il repo non ha suite di test
|
|
11
|
+
(non ne aveva in Bitbucket) → smoke pattern.
|
|
12
|
+
2. **Repo GitHub** — creato privato; `main` (`c504855`) + 21 tag
|
|
13
|
+
(serie `0.2.*` fino a `0.2.23`) + ramo WIP `feature/sip-protocol`
|
|
14
|
+
(3 commit, SIP trunks/call-control — gemello del ramo js) pushato
|
|
15
|
+
tal quale. I rami mergiati `feature/skills` e
|
|
16
|
+
`refactor/litellm-model-config` non sono stati ripushati.
|
|
17
|
+
Invariante verificata: Bitbucket ⊆ GitHub.
|
|
18
|
+
3. **Pipeline** — `deploy.yml` (PyPI OIDC) + `ci.yml`, cutover.
|
|
19
|
+
4. **Verifica** — run verde, `0.2.24` su PyPI, tag git.
|
|
20
|
+
|
|
21
|
+
## Versioning
|
|
22
|
+
|
|
23
|
+
Caso **allineato**: PyPI latest = `0.2.23` = tag git max. Il BB
|
|
24
|
+
calcolava la versione dal build counter (`0.2.$BITBUCKET_BUILD_NUMBER`);
|
|
25
|
+
in GitHub la riconciliazione è sui tag git (patch+1) con guard su
|
|
26
|
+
PyPI via API (immutabile). Prima release GitHub: **`0.2.24`**.
|
|
27
|
+
|
|
28
|
+
## Pipeline decisionale (PyPI, pattern persona-models)
|
|
29
|
+
|
|
30
|
+
- **push su main** → version (tag+guard PyPI) → smoke ∥
|
|
31
|
+
build-package → **publish OIDC trusted publishing** (nessun token;
|
|
32
|
+
configurato su PyPI → progetto `persona-sdk-python` → Trusted
|
|
33
|
+
Publisher: owner `applica-software-guru`, repo, workflow
|
|
34
|
+
`deploy.yml`, environment vuoto) → tag di versione.
|
|
35
|
+
- **workflow_dispatch**: `test-and-publish` | `publish-only`
|
|
36
|
+
(summary segnala i test saltati con ⚠️).
|
|
37
|
+
- **PR** → `ci.yml`: smoke. Nuovo rispetto al BB.
|
|
38
|
+
|
|
39
|
+
## Decisioni
|
|
40
|
+
|
|
41
|
+
- **Test**: smoke solo (`uv sync --frozen` + import) — nessuna suite
|
|
42
|
+
esistente; nota onesta, nessun test inventato.
|
|
43
|
+
- **Segreti**: nessuno — OIDC trusted publishing (come persona-models).
|
|
44
|
+
- **Rimosso dal tree nel cutover**: `bitbucket-pipelines.yml`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: persona-sdk-python
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.25
|
|
4
4
|
Summary: Async Python SDK for the Persona AI platform
|
|
5
5
|
Project-URL: Homepage, https://persona.applica.guru
|
|
6
6
|
Project-URL: Repository, https://bitbucket.org/applicaguru/persona-sdk-python
|
|
@@ -22,6 +22,12 @@ Requires-Dist: httpx>=0.27.0
|
|
|
22
22
|
Requires-Dist: persona-models>=0.2.16
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
|
|
25
|
+
<div align="center">
|
|
26
|
+
|
|
27
|
+
[](https://github.com/applica-software-guru/persona-sdk-python/actions/workflows/deploy.yml)
|
|
28
|
+
|
|
29
|
+
</div>
|
|
30
|
+
|
|
25
31
|
# persona-sdk-python
|
|
26
32
|
|
|
27
33
|
Async Python SDK for the [Persona AI](https://persona.applica.guru) platform.
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
[](https://github.com/applica-software-guru/persona-sdk-python/actions/workflows/deploy.yml)
|
|
4
|
+
|
|
5
|
+
</div>
|
|
6
|
+
|
|
1
7
|
# persona-sdk-python
|
|
2
8
|
|
|
3
9
|
Async Python SDK for the [Persona AI](https://persona.applica.guru) platform.
|
|
@@ -13,6 +13,7 @@ from persona_sdk.api.sessions import SessionsApi
|
|
|
13
13
|
from persona_sdk.api.triggers import TriggersApi
|
|
14
14
|
from persona_sdk.api.workflows import WorkflowsApi
|
|
15
15
|
from persona_sdk.api.human_tasks import HumanTasksApi
|
|
16
|
+
from persona_sdk.api.channels import ChannelsApi
|
|
16
17
|
from persona_sdk.auth import (
|
|
17
18
|
ApiKeyAuthenticationProvider,
|
|
18
19
|
AuthenticationProvider,
|
|
@@ -61,6 +62,7 @@ __all__ = [
|
|
|
61
62
|
"TriggersApi",
|
|
62
63
|
"WorkflowsApi",
|
|
63
64
|
"HumanTasksApi",
|
|
65
|
+
"ChannelsApi",
|
|
64
66
|
# Domain models (re-exported from persona-models)
|
|
65
67
|
"Paginated",
|
|
66
68
|
"AgentConfiguration",
|
|
@@ -139,6 +141,7 @@ class PersonaSdk:
|
|
|
139
141
|
self.agents = AgentsApi(self.client)
|
|
140
142
|
self.workflows = WorkflowsApi(self.workflows_client)
|
|
141
143
|
self.human_tasks = HumanTasksApi(self.workflows_client)
|
|
144
|
+
self.channels = ChannelsApi(self.workflows_client)
|
|
142
145
|
self.triggers = TriggersApi(self.client)
|
|
143
146
|
self.sessions = SessionsApi(self.client)
|
|
144
147
|
self.credentials = CredentialsApi(self.client)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from persona_sdk.client import PersonaClient
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ChannelsApi:
|
|
9
|
+
"""
|
|
10
|
+
Notification channels: where the project's human tasks are announced
|
|
11
|
+
and can be answered outside the inbox (a Telegram group, one message
|
|
12
|
+
per task). Linking happens through deep links: the service
|
|
13
|
+
returns a one-shot URL (``t.me/<bot>?startgroup=...`` for a group,
|
|
14
|
+
``t.me/<bot>?start=...`` for the user's own account).
|
|
15
|
+
|
|
16
|
+
Lives on the workflows service (same client as ``HumanTasksApi``).
|
|
17
|
+
Identity endpoints require a user (IAM bearer) session.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, client: PersonaClient):
|
|
21
|
+
self._client = client
|
|
22
|
+
|
|
23
|
+
async def providers(self) -> list[dict[str, Any]]:
|
|
24
|
+
"""The providers enabled on the server (e.g. the Telegram bot)."""
|
|
25
|
+
return await self._client.get("/channels/providers")
|
|
26
|
+
|
|
27
|
+
async def list(self) -> list[dict[str, Any]]:
|
|
28
|
+
"""The project's channels, with their setup status."""
|
|
29
|
+
return await self._client.get("/channels")
|
|
30
|
+
|
|
31
|
+
async def create_link(self, provider: str = "telegram") -> dict[str, Any]:
|
|
32
|
+
"""One-shot deep link that links a group to the project."""
|
|
33
|
+
return await self._client.post(f"/channels/{provider}/link-token")
|
|
34
|
+
|
|
35
|
+
async def update(
|
|
36
|
+
self,
|
|
37
|
+
channel_id: str,
|
|
38
|
+
include_payload: bool | None = None,
|
|
39
|
+
locale: str | None = None,
|
|
40
|
+
) -> dict[str, Any]:
|
|
41
|
+
body: dict[str, Any] = {}
|
|
42
|
+
if include_payload is not None:
|
|
43
|
+
body["includePayload"] = include_payload
|
|
44
|
+
if locale:
|
|
45
|
+
body["locale"] = locale
|
|
46
|
+
return await self._client.patch(f"/channels/{channel_id}", json=body)
|
|
47
|
+
|
|
48
|
+
async def verify(self, channel_id: str) -> dict[str, Any]:
|
|
49
|
+
"""Re-checks the channel setup (the bot can still post in the group)."""
|
|
50
|
+
return await self._client.post(f"/channels/{channel_id}/verify")
|
|
51
|
+
|
|
52
|
+
async def unlink(self, channel_id: str) -> None:
|
|
53
|
+
await self._client.delete(f"/channels/{channel_id}")
|
|
54
|
+
|
|
55
|
+
async def my_identities(self) -> list[dict[str, Any]]:
|
|
56
|
+
"""The caller's linked accounts."""
|
|
57
|
+
return await self._client.get("/channels/identities/me")
|
|
58
|
+
|
|
59
|
+
async def create_identity_link(self, provider: str = "telegram") -> dict[str, Any]:
|
|
60
|
+
"""One-shot deep link that links the caller's account."""
|
|
61
|
+
return await self._client.post(f"/channels/identities/{provider}/link-token")
|
|
62
|
+
|
|
63
|
+
async def unlink_identity(self, provider: str = "telegram") -> None:
|
|
64
|
+
await self._client.delete(f"/channels/identities/me/{provider}")
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
version = 1
|
|
2
|
-
revision =
|
|
2
|
+
revision = 5
|
|
3
3
|
requires-python = ">=3.10"
|
|
4
4
|
|
|
5
5
|
[[package]]
|
|
@@ -39,7 +39,7 @@ name = "exceptiongroup"
|
|
|
39
39
|
version = "1.3.1"
|
|
40
40
|
source = { registry = "https://pypi.org/simple" }
|
|
41
41
|
dependencies = [
|
|
42
|
-
{ name = "typing-extensions"
|
|
42
|
+
{ name = "typing-extensions" },
|
|
43
43
|
]
|
|
44
44
|
sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
|
|
45
45
|
wheels = [
|
|
@@ -106,7 +106,7 @@ wheels = [
|
|
|
106
106
|
|
|
107
107
|
[[package]]
|
|
108
108
|
name = "persona-sdk-python"
|
|
109
|
-
version = "0.
|
|
109
|
+
version = "0.2.25"
|
|
110
110
|
source = { editable = "." }
|
|
111
111
|
dependencies = [
|
|
112
112
|
{ name = "httpx" },
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
image: python:3.12
|
|
2
|
-
|
|
3
|
-
pipelines:
|
|
4
|
-
branches:
|
|
5
|
-
main:
|
|
6
|
-
- step:
|
|
7
|
-
name: Publish to PyPI
|
|
8
|
-
caches:
|
|
9
|
-
- pip
|
|
10
|
-
script:
|
|
11
|
-
- apt-get update && apt-get install -y git
|
|
12
|
-
- pip install build twine
|
|
13
|
-
- export VERSION=0.2.$BITBUCKET_BUILD_NUMBER
|
|
14
|
-
- sed -i "s/^version = .*/version = \"$VERSION\"/" pyproject.toml
|
|
15
|
-
- python -m build
|
|
16
|
-
- twine upload dist/* -u __token__ -p $PYPI_TOKEN
|
|
17
|
-
- git tag -a $VERSION -m "$VERSION"
|
|
18
|
-
- git push origin $VERSION
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/auth/bearer_token_auth.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persona_sdk_python-0.2.23 → persona_sdk_python-0.2.25}/persona_sdk/runners/resource_retriever.py
RENAMED
|
File without changes
|
|
File without changes
|