Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ARG VARIANT="3.9"
ARG VARIANT="3.10"
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}

USER vscode
Expand Down
2 changes: 1 addition & 1 deletion .python-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.9.18
3.10.16
2 changes: 1 addition & 1 deletion .stats.yml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
configured_endpoints: 261
configured_endpoints: 266
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<!-- prettier-ignore -->
[![PyPI version](https://img.shields.io/pypi/v/mobilerun-sdk.svg?label=pypi%20(stable))](https://pypi.org/project/mobilerun-sdk/)

The Mobilerun Python library provides convenient access to the Mobilerun REST API from any Python 3.9+
The Mobilerun Python library provides convenient access to the Mobilerun REST API from any Python 3.10+
application. The library includes type definitions for all request params and response fields,
and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).

Expand Down Expand Up @@ -32,7 +32,7 @@ import os
from mobilerun_sdk import Mobilerun

client = Mobilerun(
api_key=os.environ.get("MOBILERUN_CLOUD_API_KEY"), # This is the default and can be omitted
api_key=os.environ.get("MOBILERUN_API_KEY"), # This is the default and can be omitted
)

devices = client.devices.list()
Expand All @@ -41,7 +41,7 @@ print(devices.items)

While you can provide an `api_key` keyword argument,
we recommend using [python-dotenv](https://pypi.org/project/python-dotenv/)
to add `MOBILERUN_CLOUD_API_KEY="My API Key"` to your `.env` file
to add `MOBILERUN_API_KEY="My API Key"` to your `.env` file
so that your API Key is not stored in source control.

## Async usage
Expand All @@ -54,7 +54,7 @@ import asyncio
from mobilerun_sdk import AsyncMobilerun

client = AsyncMobilerun(
api_key=os.environ.get("MOBILERUN_CLOUD_API_KEY"), # This is the default and can be omitted
api_key=os.environ.get("MOBILERUN_API_KEY"), # This is the default and can be omitted
)


Expand Down Expand Up @@ -90,7 +90,7 @@ from mobilerun_sdk import AsyncMobilerun

async def main() -> None:
async with AsyncMobilerun(
api_key=os.environ.get("MOBILERUN_CLOUD_API_KEY"), # This is the default and can be omitted
api_key=os.environ.get("MOBILERUN_API_KEY"), # This is the default and can be omitted
http_client=DefaultAioHttpClient(),
) as client:
devices = await client.devices.list()
Expand Down Expand Up @@ -401,7 +401,7 @@ print(mobilerun_sdk.__version__)

## Requirements

Python 3.9 or higher.
Python 3.10 or higher.

## Contributing

Expand Down
23 changes: 23 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,29 @@ Methods:
- <code title="get /proxies">client.proxies.<a href="./src/mobilerun_sdk/resources/proxies.py">list</a>(\*\*<a href="src/mobilerun_sdk/types/proxy_list_params.py">params</a>) -> <a href="./src/mobilerun_sdk/types/proxy_list_response.py">ProxyListResponse</a></code>
- <code title="delete /proxies/{proxyId}">client.proxies.<a href="./src/mobilerun_sdk/resources/proxies.py">delete</a>(proxy_id) -> <a href="./src/mobilerun_sdk/types/proxy_delete_response.py">ProxyDeleteResponse</a></code>

# Scripts

Types:

```python
from mobilerun_sdk.types import (
Script,
ScriptSource,
ScriptCreateResponse,
ScriptRetrieveResponse,
ScriptListResponse,
ScriptSourceResponse,
)
```

Methods:

- <code title="post /sandbox/scripts">client.scripts.<a href="./src/mobilerun_sdk/resources/scripts.py">create</a>(\*\*<a href="src/mobilerun_sdk/types/script_create_params.py">params</a>) -> <a href="./src/mobilerun_sdk/types/script_create_response.py">ScriptCreateResponse</a></code>
- <code title="get /sandbox/scripts/{scriptId}">client.scripts.<a href="./src/mobilerun_sdk/resources/scripts.py">retrieve</a>(script_id) -> <a href="./src/mobilerun_sdk/types/script_retrieve_response.py">ScriptRetrieveResponse</a></code>
- <code title="get /sandbox/scripts">client.scripts.<a href="./src/mobilerun_sdk/resources/scripts.py">list</a>(\*\*<a href="src/mobilerun_sdk/types/script_list_params.py">params</a>) -> <a href="./src/mobilerun_sdk/types/script_list_response.py">ScriptListResponse</a></code>
- <code title="delete /sandbox/scripts/{scriptId}">client.scripts.<a href="./src/mobilerun_sdk/resources/scripts.py">delete</a>(script_id) -> None</code>
- <code title="get /sandbox/scripts/{scriptId}/source">client.scripts.<a href="./src/mobilerun_sdk/resources/scripts.py">source</a>(script_id) -> <a href="./src/mobilerun_sdk/types/script_source_response.py">ScriptSourceResponse</a></code>

# Connect

## Countries
Expand Down
7 changes: 3 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,10 @@ dependencies = [
"sniffio",
]

requires-python = ">= 3.9"
requires-python = ">= 3.10"
classifiers = [
"Typing :: Typed",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
Expand Down Expand Up @@ -143,7 +142,7 @@ filterwarnings = [
# there are a couple of flags that are still disabled by
# default in strict mode as they are experimental and niche.
typeCheckingMode = "strict"
pythonVersion = "3.9"
pythonVersion = "3.10"

exclude = [
"_dev",
Expand Down Expand Up @@ -213,7 +212,7 @@ ignore_missing_imports = true
[tool.ruff]
line-length = 120
output-format = "grouped"
target-version = "py38"
target-version = "py310"

[tool.ruff.format]
docstring-code-format = true
Expand Down
87 changes: 45 additions & 42 deletions requirements-dev.lock
Original file line number Diff line number Diff line change
Expand Up @@ -10,36 +10,36 @@
# universal: false

-e file:.
aiohappyeyeballs==2.6.1
aiohappyeyeballs==2.7.1
# via aiohttp
aiohttp==3.13.3
aiohttp==3.14.5
# via httpx-aiohttp
# via mobilerun-sdk
aiosignal==1.4.0
# via aiohttp
annotated-types==0.7.0
annotated-types==0.8.0
# via pydantic
anyio==4.12.1
anyio==4.16.0
# via httpx
# via mobilerun-sdk
argcomplete==3.6.3
argcomplete==3.7.2
# via nox
async-timeout==5.0.1
# via aiohttp
attrs==25.4.0
attrs==26.1.0
# via aiohttp
# via nox
backports-asyncio-runner==1.2.0
# via pytest-asyncio
certifi==2026.1.4
certifi==2026.10.23
# via httpcore
# via httpx
colorlog==6.10.1
colorlog==6.12.0
# via nox
dependency-groups==1.3.1
dependency-groups==1.3.2
# via nox
dirty-equals==0.11
distlib==0.4.0
distlib==0.4.4
# via virtualenv
distro==1.9.0
# via mobilerun-sdk
Expand All @@ -48,7 +48,8 @@ exceptiongroup==1.3.1
# via pytest
execnet==2.1.2
# via pytest-xdist
filelock==3.19.1
filelock==4.1.0
# via python-discovery
# via virtualenv
frozenlist==1.8.0
# via aiohttp
Expand All @@ -61,72 +62,74 @@ httpx==0.28.1
# via httpx-aiohttp
# via mobilerun-sdk
# via respx
httpx-aiohttp==0.1.12
httpx-aiohttp==0.2.0
# via mobilerun-sdk
humanize==4.13.0
humanize==4.16.0
# via nox
idna==3.11
idna==3.20
# via anyio
# via httpx
# via yarl
importlib-metadata==8.7.1
iniconfig==2.1.0
importlib-metadata==9.0.1
iniconfig==2.3.1
# via pytest
markdown-it-py==3.0.0
markdown-it-py==4.2.0
# via rich
mdurl==0.1.2
# via markdown-it-py
multidict==6.7.0
multidict==7.1.0
# via aiohttp
# via yarl
mypy==1.17.0
mypy-extensions==1.1.0
mypy-extensions==1.2.0
# via mypy
nodeenv==1.10.0
nodeenv==1.12.0
# via pyright
nox==2025.11.12
packaging==25.0
nox==2026.10.20
packaging==26.3
# via dependency-groups
# via nox
# via pytest
pathspec==1.0.3
# via virtualenv
pathspec==1.1.1
# via mypy
platformdirs==4.4.0
platformdirs==4.12.4
# via nox
# via virtualenv
pluggy==1.6.0
pluggy==1.7.0
# via pytest
propcache==0.4.1
propcache==0.5.4
# via aiohttp
# via yarl
pydantic==2.12.5
# via mobilerun-sdk
pydantic-core==2.41.5
# via pydantic
pygments==2.19.2
pygments==2.21.0
# via pytest
# via rich
pyright==1.1.399
pytest==8.4.2
pytest==9.2.0
# via pytest-asyncio
# via pytest-xdist
pytest-asyncio==1.2.0
pytest-asyncio==1.4.1.post1
pytest-xdist==3.8.0
python-dateutil==2.9.0.post0
# via time-machine
respx==0.22.0
rich==14.2.0
python-discovery==1.9.2
# via nox
# via virtualenv
respx==0.23.1
rich==15.0.0
ruff==0.14.13
six==1.17.0
# via python-dateutil
sniffio==1.3.1
# via mobilerun-sdk
time-machine==2.19.0
tomli==2.4.0
time-machine==3.5.1
tomli==2.5.0
# via dependency-groups
# via mypy
# via nox
# via pytest
typing-extensions==4.15.0
typing-extensions==4.16.0
# via aiohttp
# via aiosignal
# via anyio
# via exceptiongroup
Expand All @@ -139,11 +142,11 @@ typing-extensions==4.15.0
# via pytest-asyncio
# via typing-inspection
# via virtualenv
typing-inspection==0.4.2
typing-inspection==0.4.4
# via pydantic
virtualenv==20.36.1
virtualenv==21.15.3
# via nox
yarl==1.22.0
yarl==1.25.1
# via aiohttp
zipp==3.23.0
zipp==4.1.2
# via importlib-metadata
27 changes: 14 additions & 13 deletions requirements.lock
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,23 @@
# universal: false

-e file:.
aiohappyeyeballs==2.6.1
aiohappyeyeballs==2.7.1
# via aiohttp
aiohttp==3.13.3
aiohttp==3.14.5
# via httpx-aiohttp
# via mobilerun-sdk
aiosignal==1.4.0
# via aiohttp
annotated-types==0.7.0
annotated-types==0.8.0
# via pydantic
anyio==4.12.1
anyio==4.16.0
# via httpx
# via mobilerun-sdk
async-timeout==5.0.1
# via aiohttp
attrs==25.4.0
attrs==26.1.0
# via aiohttp
certifi==2026.1.4
certifi==2026.10.23
# via httpcore
# via httpx
distro==1.9.0
Expand All @@ -43,16 +43,16 @@ httpcore==1.0.9
httpx==0.28.1
# via httpx-aiohttp
# via mobilerun-sdk
httpx-aiohttp==0.1.12
httpx-aiohttp==0.2.0
# via mobilerun-sdk
idna==3.11
idna==3.20
# via anyio
# via httpx
# via yarl
multidict==6.7.0
multidict==7.1.0
# via aiohttp
# via yarl
propcache==0.4.1
propcache==0.5.4
# via aiohttp
# via yarl
pydantic==2.12.5
Expand All @@ -61,7 +61,8 @@ pydantic-core==2.41.5
# via pydantic
sniffio==1.3.1
# via mobilerun-sdk
typing-extensions==4.15.0
typing-extensions==4.16.0
# via aiohttp
# via aiosignal
# via anyio
# via exceptiongroup
Expand All @@ -70,7 +71,7 @@ typing-extensions==4.15.0
# via pydantic
# via pydantic-core
# via typing-inspection
typing-inspection==0.4.2
typing-inspection==0.4.4
# via pydantic
yarl==1.22.0
yarl==1.25.1
# via aiohttp
Loading
Loading