tzafon 2.0.0__tar.gz → 2.0.1__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.
Potentially problematic release.
This version of tzafon might be problematic. Click here for more details.
- tzafon-2.0.1/.release-please-manifest.json +3 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/CHANGELOG.md +4 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/PKG-INFO +33 -37
- {tzafon-2.0.0 → tzafon-2.0.1}/README.md +32 -36
- {tzafon-2.0.0 → tzafon-2.0.1}/pyproject.toml +1 -1
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_version.py +1 -1
- tzafon-2.0.0/.release-please-manifest.json +0 -3
- {tzafon-2.0.0 → tzafon-2.0.1}/.gitignore +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/BATCH_API.md +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/CONTRIBUTING.md +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/LICENSE +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/SECURITY.md +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/WRAPPER.md +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/WRAPPER_FUNCTIONALITY.md +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/api.md +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/bin/check-release-environment +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/bin/publish-pypi +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/examples/.keep +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/examples/batch_example.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/examples/batch_example_simple.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/examples/clean_api_example.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/noxfile.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/release-please-config.json +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/requirements-dev.lock +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/requirements.lock +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/computer/lib/.keep +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/__init__.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_base_client.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_client.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_compat.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_constants.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_exceptions.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_files.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_models.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_qs.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_resource.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_response.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_streaming.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_types.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/__init__.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_compat.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_datetime_parse.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_logs.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_proxy.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_reflection.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_resources_proxy.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_streams.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_sync.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_transform.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_typing.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/_utils/_utils.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/batch_wrapper.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/client_extensions.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/py.typed +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/resources/__init__.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/resources/computers.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/types/__init__.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/types/action_result.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/types/computer_create_params.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/types/computer_execute_action_params.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/types/computer_execute_batch_params.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/types/computer_execute_batch_response.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/types/computer_keep_alive_response.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/types/computer_list_response.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/types/computer_navigate_params.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/types/computer_response.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/src/tzafon/wrapper.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/__init__.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/api_resources/__init__.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/api_resources/test_computers.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/conftest.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/sample_file.txt +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_client.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_deepcopy.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_extract_files.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_files.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_models.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_qs.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_required_args.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_response.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_streaming.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_transform.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_utils/test_datetime_parse.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_utils/test_proxy.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/test_utils/test_typing.py +0 -0
- {tzafon-2.0.0 → tzafon-2.0.1}/tests/utils.py +0 -0
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.0.1 (2025-10-21)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v2.0.0...v2.0.1](https://github.com/tzafon/computer-python/compare/v2.0.0...v2.0.1)
|
|
6
|
+
|
|
3
7
|
## 2.0.0 (2025-10-20)
|
|
4
8
|
|
|
5
9
|
Full Changelog: [v1.4.0...v2.0.0](https://github.com/tzafon/computer-python/compare/v1.4.0...v2.0.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: tzafon
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.1
|
|
4
4
|
Summary: The official Python library for the computer API
|
|
5
5
|
Project-URL: Homepage, https://github.com/tzafon/computer-python
|
|
6
6
|
Project-URL: Repository, https://github.com/tzafon/computer-python
|
|
@@ -33,20 +33,22 @@ Requires-Dist: aiohttp; extra == 'aiohttp'
|
|
|
33
33
|
Requires-Dist: httpx-aiohttp>=0.1.9; extra == 'aiohttp'
|
|
34
34
|
Description-Content-Type: text/markdown
|
|
35
35
|
|
|
36
|
-
#
|
|
36
|
+
# Tzafon Python SDK
|
|
37
37
|
|
|
38
38
|
<!-- prettier-ignore -->
|
|
39
39
|
[)](https://pypi.org/project/tzafon/)
|
|
40
40
|
|
|
41
|
-
The
|
|
42
|
-
application. The library includes type definitions for all request params and response fields,
|
|
43
|
-
and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).
|
|
41
|
+
The Tzafon Python SDK provides programmatic control of Chromium browsers and Linux desktop environments. Automate web interactions with simple method calls - navigate, click, type, and capture screenshots.
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
**Key Features:**
|
|
44
|
+
- Browser and desktop automation
|
|
45
|
+
- Synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx)
|
|
46
|
+
- Type-safe API with full type definitions
|
|
47
|
+
- Context manager support for automatic cleanup
|
|
46
48
|
|
|
47
49
|
## Documentation
|
|
48
50
|
|
|
49
|
-
The REST API documentation can be found
|
|
51
|
+
The REST API documentation can be found at [docs.tzafon.ai](https://docs.tzafon.ai). The full API of this library can be found in [api.md](https://github.com/tzafon/computer-python/tree/main/api.md).
|
|
50
52
|
|
|
51
53
|
## Installation
|
|
52
54
|
|
|
@@ -57,53 +59,47 @@ pip install tzafon
|
|
|
57
59
|
|
|
58
60
|
## Usage
|
|
59
61
|
|
|
60
|
-
The full API of this library can be found in [api.md](https://github.com/tzafon/computer-python/tree/main/api.md).
|
|
61
|
-
|
|
62
62
|
```python
|
|
63
|
-
import os
|
|
64
63
|
from tzafon import Computer
|
|
65
64
|
|
|
66
|
-
client = Computer(
|
|
67
|
-
api_key=os.environ.get("TZAFON_API_KEY"), # This is the default and can be omitted
|
|
68
|
-
)
|
|
65
|
+
client = Computer() # Reads TZAFON_API_KEY from environment
|
|
69
66
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
)
|
|
73
|
-
|
|
67
|
+
# Create and control a browser instance
|
|
68
|
+
with client.create(kind="browser") as computer:
|
|
69
|
+
computer.navigate("https://google.com")
|
|
70
|
+
computer.type("Tzafon AI")
|
|
71
|
+
computer.click(100, 200)
|
|
72
|
+
screenshot = computer.screenshot()
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The client automatically reads `TZAFON_API_KEY` from your environment. You can also pass it explicitly:
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
client = Computer(api_key="your-api-key")
|
|
74
79
|
```
|
|
75
80
|
|
|
76
|
-
|
|
77
|
-
we recommend using [python-dotenv](https://pypi.org/project/python-dotenv/)
|
|
78
|
-
to add `TZAFON_API_KEY="My API Key"` to your `.env` file
|
|
79
|
-
so that your API Key is not stored in source control.
|
|
81
|
+
We recommend using [python-dotenv](https://pypi.org/project/python-dotenv/) to manage your API key in a `.env` file.
|
|
80
82
|
|
|
81
|
-
## Async
|
|
83
|
+
## Async Usage
|
|
82
84
|
|
|
83
|
-
|
|
85
|
+
Import `AsyncComputer` and use `await` with each action:
|
|
84
86
|
|
|
85
87
|
```python
|
|
86
|
-
import os
|
|
87
88
|
import asyncio
|
|
88
89
|
from tzafon import AsyncComputer
|
|
89
90
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
)
|
|
99
|
-
print(computer_response.id)
|
|
100
|
-
|
|
91
|
+
async def main():
|
|
92
|
+
client = AsyncComputer()
|
|
93
|
+
|
|
94
|
+
async with client.create(kind="browser") as computer:
|
|
95
|
+
await computer.navigate("https://google.com")
|
|
96
|
+
await computer.type("Tzafon AI")
|
|
97
|
+
await computer.click(100, 200)
|
|
98
|
+
screenshot = await computer.screenshot()
|
|
101
99
|
|
|
102
100
|
asyncio.run(main())
|
|
103
101
|
```
|
|
104
102
|
|
|
105
|
-
Functionality between the synchronous and asynchronous clients is otherwise identical.
|
|
106
|
-
|
|
107
103
|
### With aiohttp
|
|
108
104
|
|
|
109
105
|
By default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend.
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Tzafon Python SDK
|
|
2
2
|
|
|
3
3
|
<!-- prettier-ignore -->
|
|
4
4
|
[)](https://pypi.org/project/tzafon/)
|
|
5
5
|
|
|
6
|
-
The
|
|
7
|
-
application. The library includes type definitions for all request params and response fields,
|
|
8
|
-
and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).
|
|
6
|
+
The Tzafon Python SDK provides programmatic control of Chromium browsers and Linux desktop environments. Automate web interactions with simple method calls - navigate, click, type, and capture screenshots.
|
|
9
7
|
|
|
10
|
-
|
|
8
|
+
**Key Features:**
|
|
9
|
+
- Browser and desktop automation
|
|
10
|
+
- Synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx)
|
|
11
|
+
- Type-safe API with full type definitions
|
|
12
|
+
- Context manager support for automatic cleanup
|
|
11
13
|
|
|
12
14
|
## Documentation
|
|
13
15
|
|
|
14
|
-
The REST API documentation can be found
|
|
16
|
+
The REST API documentation can be found at [docs.tzafon.ai](https://docs.tzafon.ai). The full API of this library can be found in [api.md](api.md).
|
|
15
17
|
|
|
16
18
|
## Installation
|
|
17
19
|
|
|
@@ -22,53 +24,47 @@ pip install tzafon
|
|
|
22
24
|
|
|
23
25
|
## Usage
|
|
24
26
|
|
|
25
|
-
The full API of this library can be found in [api.md](api.md).
|
|
26
|
-
|
|
27
27
|
```python
|
|
28
|
-
import os
|
|
29
28
|
from tzafon import Computer
|
|
30
29
|
|
|
31
|
-
client = Computer(
|
|
32
|
-
api_key=os.environ.get("TZAFON_API_KEY"), # This is the default and can be omitted
|
|
33
|
-
)
|
|
30
|
+
client = Computer() # Reads TZAFON_API_KEY from environment
|
|
34
31
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
)
|
|
38
|
-
|
|
32
|
+
# Create and control a browser instance
|
|
33
|
+
with client.create(kind="browser") as computer:
|
|
34
|
+
computer.navigate("https://google.com")
|
|
35
|
+
computer.type("Tzafon AI")
|
|
36
|
+
computer.click(100, 200)
|
|
37
|
+
screenshot = computer.screenshot()
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The client automatically reads `TZAFON_API_KEY` from your environment. You can also pass it explicitly:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
client = Computer(api_key="your-api-key")
|
|
39
44
|
```
|
|
40
45
|
|
|
41
|
-
|
|
42
|
-
we recommend using [python-dotenv](https://pypi.org/project/python-dotenv/)
|
|
43
|
-
to add `TZAFON_API_KEY="My API Key"` to your `.env` file
|
|
44
|
-
so that your API Key is not stored in source control.
|
|
46
|
+
We recommend using [python-dotenv](https://pypi.org/project/python-dotenv/) to manage your API key in a `.env` file.
|
|
45
47
|
|
|
46
|
-
## Async
|
|
48
|
+
## Async Usage
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
Import `AsyncComputer` and use `await` with each action:
|
|
49
51
|
|
|
50
52
|
```python
|
|
51
|
-
import os
|
|
52
53
|
import asyncio
|
|
53
54
|
from tzafon import AsyncComputer
|
|
54
55
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
)
|
|
64
|
-
print(computer_response.id)
|
|
65
|
-
|
|
56
|
+
async def main():
|
|
57
|
+
client = AsyncComputer()
|
|
58
|
+
|
|
59
|
+
async with client.create(kind="browser") as computer:
|
|
60
|
+
await computer.navigate("https://google.com")
|
|
61
|
+
await computer.type("Tzafon AI")
|
|
62
|
+
await computer.click(100, 200)
|
|
63
|
+
screenshot = await computer.screenshot()
|
|
66
64
|
|
|
67
65
|
asyncio.run(main())
|
|
68
66
|
```
|
|
69
67
|
|
|
70
|
-
Functionality between the synchronous and asynchronous clients is otherwise identical.
|
|
71
|
-
|
|
72
68
|
### With aiohttp
|
|
73
69
|
|
|
74
70
|
By default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend.
|
|
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
|
|
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
|
|
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
|
|
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
|