{"id":19509251,"url":"https://github.com/opentmi/py-stf-client","last_synced_at":"2025-08-05T16:25:44.217Z","repository":{"id":145139351,"uuid":"537334360","full_name":"OpenTMI/py-stf-client","owner":"OpenTMI","description":"stf python client","archived":false,"fork":false,"pushed_at":"2022-09-16T07:20:26.000Z","size":93,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-09T14:48:23.048Z","etag":null,"topics":["devicefarm","stf"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenTMI.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-16T06:31:57.000Z","updated_at":"2022-09-16T07:02:51.000Z","dependencies_parsed_at":"2023-04-28T13:00:52.132Z","dependency_job_id":null,"html_url":"https://github.com/OpenTMI/py-stf-client","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTMI%2Fpy-stf-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTMI%2Fpy-stf-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTMI%2Fpy-stf-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTMI%2Fpy-stf-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenTMI","download_url":"https://codeload.github.com/OpenTMI/py-stf-client/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240761095,"owners_count":19853254,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devicefarm","stf"],"created_at":"2024-11-10T23:11:28.748Z","updated_at":"2025-02-25T22:43:19.814Z","avatar_url":"https://github.com/OpenTMI.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# stf-client\nControl and manages real Smartphone devices from browser and restful apis\n\nThis Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:\n\n- API version: 2.4.0\n- Package version: 1.0.0\n- Build package: org.openapitools.codegen.languages.PythonClientCodegen\nFor more information, please visit [http://openstf.io/](http://openstf.io/)\n\n## Requirements.\n\nPython \u003e=3.6\n\n## Installation \u0026 Usage\n### pip install\n\nIf the python package is hosted on a repository, you can install directly using:\n\n```sh\npip install git+https://github.com/opentmi/py-stf-client.git\n```\n(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/opentmi/py-stf-client.git`)\n\nThen import the package:\n```python\nimport stf_client\n```\n\n### Setuptools\n\nInstall via [Setuptools](http://pypi.python.org/pypi/setuptools).\n\n```sh\npython setup.py install --user\n```\n(or `sudo python setup.py install` to install the package for all users)\n\nThen import the package:\n```python\nimport stf_client\n```\n\n## Getting Started\n\nPlease follow the [installation procedure](#installation--usage) and then run the following:\n\n```python\n\nimport time\nimport stf_client\nfrom pprint import pprint\nfrom stf_client.api import admin_api\nfrom stf_client.model.device_list_response import DeviceListResponse\nfrom stf_client.model.device_payload import DevicePayload\nfrom stf_client.model.device_response import DeviceResponse\nfrom stf_client.model.devices_payload import DevicesPayload\nfrom stf_client.model.group_list_response import GroupListResponse\nfrom stf_client.model.remote_connect_user_device_response import RemoteConnectUserDeviceResponse\nfrom stf_client.model.response import Response\nfrom stf_client.model.unexpected_error_response import UnexpectedErrorResponse\nfrom stf_client.model.user_access_token_response import UserAccessTokenResponse\nfrom stf_client.model.user_access_tokens_response import UserAccessTokensResponse\nfrom stf_client.model.user_response import UserResponse\nfrom stf_client.model.users_payload import UsersPayload\n# Defining the host is optional and defaults to /api/v1\n# See configuration.py for a list of all supported configuration parameters.\nconfiguration = stf_client.Configuration(\n    host = \"/api/v1\"\n)\n\n# The client must configure the authentication and authorization parameters\n# in accordance with the API server security policy.\n# Examples for each auth method are provided below, use the example that\n# satisfies your auth use case.\n\n# Configure API key authorization: accessTokenAuth\nconfiguration.api_key['accessTokenAuth'] = 'YOUR_API_KEY'\n\n# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed\n# configuration.api_key_prefix['accessTokenAuth'] = 'Bearer'\n\n\n# Enter a context with an instance of the API client\nwith stf_client.ApiClient(configuration) as api_client:\n    # Create an instance of the API class\n    api_instance = admin_api.AdminApi(api_client)\n    serial = \"serial_example\" # str | Device identifier (serial)\n    id = \"id_example\" # str | Group identifier\n\n    try:\n        # Adds a device into an origin group\n        api_response = api_instance.add_origin_group_device(serial, id)\n        pprint(api_response)\n    except stf_client.ApiException as e:\n        print(\"Exception when calling AdminApi-\u003eadd_origin_group_device: %s\\n\" % e)\n```\n\n## Documentation for API Endpoints\n\nAll URIs are relative to */api/v1*\n\nClass | Method | HTTP request | Description\n------------ | ------------- | ------------- | -------------\n*AdminApi* | [**add_origin_group_device**](docs/AdminApi.md#add_origin_group_device) | **PUT** /devices/{serial}/groups/{id} | Adds a device into an origin group\n*AdminApi* | [**add_origin_group_devices**](docs/AdminApi.md#add_origin_group_devices) | **PUT** /devices/groups/{id} | Adds devices into an origin group\n*AdminApi* | [**add_user_device_v3**](docs/AdminApi.md#add_user_device_v3) | **POST** /users/{email}/devices/{serial} | Places a device under user control\n*AdminApi* | [**create_user**](docs/AdminApi.md#create_user) | **POST** /users/{email} | Creates a user\n*AdminApi* | [**create_user_access_token**](docs/AdminApi.md#create_user_access_token) | **POST** /users/{email}/accessTokens | Create an access token for a user\n*AdminApi* | [**delete_device**](docs/AdminApi.md#delete_device) | **DELETE** /devices/{serial} | Removes a device\n*AdminApi* | [**delete_devices**](docs/AdminApi.md#delete_devices) | **DELETE** /devices | Removes devices\n*AdminApi* | [**delete_user**](docs/AdminApi.md#delete_user) | **DELETE** /users/{email} | Removes a user\n*AdminApi* | [**delete_user_access_token**](docs/AdminApi.md#delete_user_access_token) | **DELETE** /users/{email}/accessTokens/{id} | Removes an access token of a user\n*AdminApi* | [**delete_user_access_tokens**](docs/AdminApi.md#delete_user_access_tokens) | **DELETE** /users/{email}/accessTokens | Remove the access tokens of a user\n*AdminApi* | [**delete_user_device**](docs/AdminApi.md#delete_user_device) | **DELETE** /users/{email}/devices/{serial} | Remove a device from the user control\n*AdminApi* | [**delete_users**](docs/AdminApi.md#delete_users) | **DELETE** /users | Removes users\n*AdminApi* | [**get_device_groups**](docs/AdminApi.md#get_device_groups) | **GET** /devices/{serial}/groups | Gets the groups to which the device belongs\n*AdminApi* | [**get_user_access_token**](docs/AdminApi.md#get_user_access_token) | **GET** /users/{email}/accessTokens/{id} | Gets an access token of a user\n*AdminApi* | [**get_user_access_tokens_v2**](docs/AdminApi.md#get_user_access_tokens_v2) | **GET** /users/{email}/accessTokens | Gets the access tokens of a user\n*AdminApi* | [**get_user_device**](docs/AdminApi.md#get_user_device) | **GET** /users/{email}/devices/{serial} | Gets a device controlled by a user\n*AdminApi* | [**get_user_devices_v2**](docs/AdminApi.md#get_user_devices_v2) | **GET** /users/{email}/devices | Gets the devices controlled by a user\n*AdminApi* | [**put_device_by_serial**](docs/AdminApi.md#put_device_by_serial) | **PUT** /devices/{serial} | Adds device informatin\n*AdminApi* | [**remote_connect_user_device**](docs/AdminApi.md#remote_connect_user_device) | **POST** /users/{email}/devices/{serial}/remoteConnect | Allows to remotely connect to a device controlled by a user\n*AdminApi* | [**remote_disconnect_user_device**](docs/AdminApi.md#remote_disconnect_user_device) | **DELETE** /users/{email}/devices/{serial}/remoteConnect | Forbids to remotely connect to a device controlled by a user\n*AdminApi* | [**remove_origin_group_device**](docs/AdminApi.md#remove_origin_group_device) | **DELETE** /devices/{serial}/groups/{id} | Removes a device from an origin group\n*AdminApi* | [**remove_origin_group_devices**](docs/AdminApi.md#remove_origin_group_devices) | **DELETE** /devices/groups/{id} | Removes devices from an origin group\n*AdminApi* | [**update_default_user_groups_quotas**](docs/AdminApi.md#update_default_user_groups_quotas) | **PUT** /users/groupsQuotas | Updates the default groups quotas of users\n*AdminApi* | [**update_user_groups_quotas**](docs/AdminApi.md#update_user_groups_quotas) | **PUT** /users/{email}/groupsQuotas | Updates the groups quotas of a user\n*DevicesApi* | [**get_device_bookings**](docs/DevicesApi.md#get_device_bookings) | **GET** /devices/{serial}/bookings | Gets the bookings to which the device belongs\n*DevicesApi* | [**get_device_by_serial**](docs/DevicesApi.md#get_device_by_serial) | **GET** /devices/{serial} | Device Information\n*DevicesApi* | [**get_devices**](docs/DevicesApi.md#get_devices) | **GET** /devices | Device List\n*GroupsApi* | [**add_group_device**](docs/GroupsApi.md#add_group_device) | **PUT** /groups/{id}/devices/{serial} | Adds a device into a transient group\n*GroupsApi* | [**add_group_devices**](docs/GroupsApi.md#add_group_devices) | **PUT** /groups/{id}/devices | Adds devices into a transient group\n*GroupsApi* | [**add_group_user**](docs/GroupsApi.md#add_group_user) | **PUT** /groups/{id}/users/{email} | Adds a user into a group\n*GroupsApi* | [**add_group_users**](docs/GroupsApi.md#add_group_users) | **PUT** /groups/{id}/users | Adds users into a group\n*GroupsApi* | [**create_group**](docs/GroupsApi.md#create_group) | **POST** /groups | Creates a group\n*GroupsApi* | [**delete_group**](docs/GroupsApi.md#delete_group) | **DELETE** /groups/{id} | Removes a group\n*GroupsApi* | [**delete_groups**](docs/GroupsApi.md#delete_groups) | **DELETE** /groups | Removes groups\n*GroupsApi* | [**get_group**](docs/GroupsApi.md#get_group) | **GET** /groups/{id} | Gets a group\n*GroupsApi* | [**get_group_device**](docs/GroupsApi.md#get_group_device) | **GET** /groups/{id}/devices/{serial} | Gets a device of a group\n*GroupsApi* | [**get_group_devices**](docs/GroupsApi.md#get_group_devices) | **GET** /groups/{id}/devices | Gets the devices of a group\n*GroupsApi* | [**get_group_user**](docs/GroupsApi.md#get_group_user) | **GET** /groups/{id}/users/{email} | Gets a user of a group\n*GroupsApi* | [**get_group_users**](docs/GroupsApi.md#get_group_users) | **GET** /groups/{id}/users | Gets the users of a group\n*GroupsApi* | [**get_groups**](docs/GroupsApi.md#get_groups) | **GET** /groups | Gets groups\n*GroupsApi* | [**remove_group_device**](docs/GroupsApi.md#remove_group_device) | **DELETE** /groups/{id}/devices/{serial} | Removes a device from a transient group\n*GroupsApi* | [**remove_group_devices**](docs/GroupsApi.md#remove_group_devices) | **DELETE** /groups/{id}/devices | Removes devices from a transient group\n*GroupsApi* | [**remove_group_user**](docs/GroupsApi.md#remove_group_user) | **DELETE** /groups/{id}/users/{email} | Removes a user from a group\n*GroupsApi* | [**remove_group_users**](docs/GroupsApi.md#remove_group_users) | **DELETE** /groups/{id}/users | Removes users from a group\n*GroupsApi* | [**update_group**](docs/GroupsApi.md#update_group) | **PUT** /groups/{id} | Updates a group\n*UserApi* | [**add_adb_public_key**](docs/UserApi.md#add_adb_public_key) | **POST** /user/adbPublicKeys | Adb public keys\n*UserApi* | [**add_user_device**](docs/UserApi.md#add_user_device) | **POST** /user/devices | Add a device to a user\n*UserApi* | [**add_user_device_v2**](docs/UserApi.md#add_user_device_v2) | **POST** /user/devices/{serial} | Places a device under user control\n*UserApi* | [**create_access_token**](docs/UserApi.md#create_access_token) | **POST** /user/accessTokens | Create an access token\n*UserApi* | [**delete_access_token**](docs/UserApi.md#delete_access_token) | **DELETE** /user/accessTokens/{id} | Removes an access token\n*UserApi* | [**delete_access_tokens**](docs/UserApi.md#delete_access_tokens) | **DELETE** /user/accessTokens | Removes your access tokens\n*UserApi* | [**delete_user_device_by_serial**](docs/UserApi.md#delete_user_device_by_serial) | **DELETE** /user/devices/{serial} | Delete User Device\n*UserApi* | [**get_access_token**](docs/UserApi.md#get_access_token) | **GET** /user/accessTokens/{id} | Gets an access token\n*UserApi* | [**get_access_tokens**](docs/UserApi.md#get_access_tokens) | **GET** /user/fullAccessTokens | Gets your access tokens\n*UserApi* | [**get_user**](docs/UserApi.md#get_user) | **GET** /user | User Profile\n*UserApi* | [**get_user_access_tokens**](docs/UserApi.md#get_user_access_tokens) | **GET** /user/accessTokens | Access Tokens\n*UserApi* | [**get_user_device_by_serial**](docs/UserApi.md#get_user_device_by_serial) | **GET** /user/devices/{serial} | User Device\n*UserApi* | [**get_user_devices**](docs/UserApi.md#get_user_devices) | **GET** /user/devices | User Devices\n*UserApi* | [**remote_connect_user_device_by_serial**](docs/UserApi.md#remote_connect_user_device_by_serial) | **POST** /user/devices/{serial}/remoteConnect | Remote Connect\n*UserApi* | [**remote_disconnect_user_device_by_serial**](docs/UserApi.md#remote_disconnect_user_device_by_serial) | **DELETE** /user/devices/{serial}/remoteConnect | Remote Disconnect\n*UsersApi* | [**get_user_by_email**](docs/UsersApi.md#get_user_by_email) | **GET** /users/{email} | Gets a user\n*UsersApi* | [**get_users**](docs/UsersApi.md#get_users) | **GET** /users | Gets users\n\n\n## Documentation For Models\n\n - [AccessTokensResponse](docs/AccessTokensResponse.md)\n - [AddAdbPublicKeyRequest](docs/AddAdbPublicKeyRequest.md)\n - [AddUserDevicePayload](docs/AddUserDevicePayload.md)\n - [Conflict](docs/Conflict.md)\n - [ConflictDate](docs/ConflictDate.md)\n - [ConflictOwner](docs/ConflictOwner.md)\n - [ConflictsResponse](docs/ConflictsResponse.md)\n - [DeviceListResponse](docs/DeviceListResponse.md)\n - [DevicePayload](docs/DevicePayload.md)\n - [DeviceResponse](docs/DeviceResponse.md)\n - [DevicesPayload](docs/DevicesPayload.md)\n - [ErrorResponse](docs/ErrorResponse.md)\n - [GroupListResponse](docs/GroupListResponse.md)\n - [GroupPayload](docs/GroupPayload.md)\n - [GroupResponse](docs/GroupResponse.md)\n - [GroupsPayload](docs/GroupsPayload.md)\n - [RemoteConnectUserDeviceResponse](docs/RemoteConnectUserDeviceResponse.md)\n - [Response](docs/Response.md)\n - [Token](docs/Token.md)\n - [UnexpectedErrorResponse](docs/UnexpectedErrorResponse.md)\n - [UserAccessTokenResponse](docs/UserAccessTokenResponse.md)\n - [UserAccessTokensResponse](docs/UserAccessTokensResponse.md)\n - [UserListResponse](docs/UserListResponse.md)\n - [UserResponse](docs/UserResponse.md)\n - [UsersPayload](docs/UsersPayload.md)\n\n\n## Documentation For Authorization\n\n\n## accessTokenAuth\n\n- **Type**: API key\n- **API key parameter name**: authorization\n- **Location**: HTTP header\n\n\n## Author\n\ncontact@openstf.io\n\n\n## Notes for Large OpenAPI documents\nIf the OpenAPI document is large, imports in stf_client.apis and stf_client.models may fail with a\nRecursionError indicating the maximum recursion limit has been exceeded. In that case, there are a couple of solutions:\n\nSolution 1:\nUse specific imports for apis and models like:\n- `from stf_client.api.default_api import DefaultApi`\n- `from stf_client.model.pet import Pet`\n\nSolution 2:\nBefore importing the package, adjust the maximum recursion limit as shown below:\n```\nimport sys\nsys.setrecursionlimit(1500)\nimport stf_client\nfrom stf_client.apis import *\nfrom stf_client.models import *\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopentmi%2Fpy-stf-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopentmi%2Fpy-stf-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopentmi%2Fpy-stf-client/lists"}