Metadata-Version: 2.1
Name: HA4T
Version: 0.0.1
Summary: 跨平台的UI自动化框架，适用于混合型app
Home-page: https://github.com/1103837067/HA4T
Author: caishilong
Author-email: 1103837067@qq.com
License: Apache License 2.0
Keywords: automation,automated-test,game,android,ios,hybird-app
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Requires-Dist: colorlog ~=6.8.2
Requires-Dist: pillow ~=10.4.0
Requires-Dist: requests ~=2.32.3
Requires-Dist: uiautomator2 ~=3.2.2
Requires-Dist: websockets ~=10.4
Requires-Dist: numpy ~=1.26.4
Requires-Dist: paddleocr ~=2.8.1
Requires-Dist: setuptools ~=73.0.1
Requires-Dist: six ~=1.16.0
Requires-Dist: wheel ~=0.43.0
Requires-Dist: tornado ~=6.4.1
Requires-Dist: logzero ~=1.7.0
Requires-Dist: logging-reset
Requires-Dist: adbutils ~=2.7.2
Requires-Dist: facebook-wda
Requires-Dist: paddlepaddle
Requires-Dist: paddleocr
Requires-Dist: tidevice
Requires-Dist: deepdiff ~=7.0.1
Requires-Dist: opencv-python ~=4.10.0.84
Requires-Dist: matplotlib ~=3.9.2
Requires-Dist: pytest ~=8.3.3
Requires-Dist: pywin32
Provides-Extra: dev
Requires-Dist: flake8 ; extra == 'dev'
Requires-Dist: black ==22.3.0 ; extra == 'dev'
Requires-Dist: isort ; extra == 'dev'
Requires-Dist: twine ; extra == 'dev'
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: wheel ; extra == 'dev'

# HA4T 🐍
跨平台的UI自动化框架，适用于混合型app，游戏，web，原生app等，基于 aircv，orc，cdp，uiautomator2，facebook_wda 进行开发

## Installation

You can install the package using pip

```bash
pip install ha4t
```


## Structure

The project has the following structure

```
├── .github
│   └── workflows
│       └── test.yml # holds our github action config 
├── .gitignore
├── Makefile
├── README.md
├── setup.py
├── src
│   ├── __init__.py 
│   ├── hello.py 
└── test 
    └── test_hello.py
```

### Code Quality 🧹

We provide two handy commands inside the `Makefile`, namely:

- `make style` to format the code
- `make check_code_quality` to check code quality (PEP8 basically)

So far, **there is no types checking with mypy**. See [issue](https://github.com/roboflow-ai/template-python/issues/4). 

### Tests 🧪

[`pytests`](https://docs.pytest.org/en/7.1.x/) is used to run our tests.

### Publish on PyPi 🚀

**Important**: Before publishing, edit `__version__` in [src/__init__](/src/__init__.py) to match the wanted new version.

We use [`twine`](https://twine.readthedocs.io/en/stable/) to make our life easier. You can publish by using

```
export PYPI_USERNAME="you_username"
export PYPI_PASSWORD="your_password"
export PYPI_TEST_PASSWORD="your_password_for_test_pypi"
make publish -e PYPI_USERNAME=$PYPI_USERNAME -e PYPI_PASSWORD=$PYPI_PASSWORD -e PYPI_TEST_PASSWORD=$PYPI_TEST_PASSWORD
```

You can also use token for auth, see [pypi doc](https://pypi.org/help/#apitoken). In that case,

```
export PYPI_USERNAME="__token__"
export PYPI_PASSWORD="your_token"
export PYPI_TEST_PASSWORD="your_token_for_test_pypi"
make publish -e PYPI_USERNAME=$PYPI_USERNAME -e PYPI_PASSWORD=$PYPI_PASSWORD -e PYPI_TEST_PASSWORD=$PYPI_TEST_PASSWORD
```

**Note**: We will try to push to [test pypi](https://test.pypi.org/) before pushing to pypi, to assert everything will work

### CI/CD 🤖

We use [GitHub actions](https://github.com/features/actions) to automatically run tests and check code quality when a new PR is done on `main`.

On any pull request, we will check the code quality and tests.

When a new release is created, we will try to push the new code to PyPi. We use [`twine`](https://twine.readthedocs.io/en/stable/) to make our life easier. 

The **correct steps** to create a new realease are the following:
- edit `__version__` in [src/__init__](/src/__init__.py) to match the wanted new version.
- create a new [`tag`](https://git-scm.com/docs/git-tag) with the release name, e.g. `git tag v0.0.1 && git push origin v0.0.1` or from the GitHub UI.
- create a new release from GitHub UI

The CI will run when you create the new release.

# Q&A

## Why no cookiecutter?
This is a template repo, it's meant to be used inside GitHub upon repo creation.

## Why reinvent the wheel?

There are several very good templates on GitHub, I prefer to use code we wrote instead of blinding taking the most starred template and having features we don't need. From experience, it's better to keep it simple and general enough for our specific use cases.
