Skip to content

Commit

Permalink
Implement Daily and Unit Tests
Browse files Browse the repository at this point in the history
  • Loading branch information
davidvonthenen committed Jul 30, 2024
1 parent 22dc7d0 commit 8f8e7fb
Show file tree
Hide file tree
Showing 82 changed files with 2,069 additions and 972 deletions.
72 changes: 72 additions & 0 deletions .github/workflows/tests-daily.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Test - Daily

on:
workflow_dispatch:
repository_dispatch:
types:
- manual-daily-text
schedule:
- cron: "0 9 * * *"

jobs:
daily-tests:
name: Daily Tests
# Only run this job if we're in the main repo, not a fork.
if: github.repository == 'deepgram/deepgram-python-sdk'
runs-on: ubuntu-latest
permissions:
pull-requests: write
timeout-minutes: 30
steps:

- name: Checkout code by commit
uses: actions/checkout@v4

- uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Config git
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global init.defaultBranch main
git config --global pull.rebase true
git config --global url."https://git:[email protected]".insteadOf "https://github.com"
- name: Get dependencies
shell: bash
run: |
make ensure-deps
- name: Install Dependencies
run: |
pip install -r requirements.txt
pip install -r requirements-dev.txt
pip install -r examples/requirements-examples.txt
- name: Run all checks
shell: bash
env:
DEEPGRAM_API_KEY: ${{ secrets.DEEPGRAM_API_KEY }}
run: |
make daily-test
- name: Get dependencies
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
BRANCH_NAME="response-shape-${{ github.run_id }}"
git checkout -b "$BRANCH_NAME"
# create a PR
git add -A ./tests/response_data
git commit -s -m "auto-generated - update Response Shapes"
git push origin "$BRANCH_NAME"
gh pr create --title "auto-generated - update Response Shapes" --body "auto-generated - update Response Shapes" --base "main" --head "$BRANCH_NAME"
sleep 10
gh pr merge "$BRANCH_NAME" --delete-branch --squash --admin
57 changes: 0 additions & 57 deletions .github/workflows/tests-daily.yaml.DISABLE

This file was deleted.

37 changes: 37 additions & 0 deletions .github/workflows/tests-unit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Test - Unit

on:
pull_request:
types:
- assigned
- opened
- synchronize
- reopened
jobs:
build:
name: Unit Tests
# Only run this job if we're in the main repo, not a fork.
if: github.repository == 'deepgram/deepgram-python-sdk'
runs-on: ubuntu-latest
timeout-minutes: 5
steps:

- name: Checkout code by commit
uses: actions/checkout@v4

- uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Install Dependencies
run: |
pip install -r requirements.txt
pip install -r requirements-dev.txt
pip install -r examples/requirements-examples.txt
- name: Run all checks
shell: bash
env:
DEEPGRAM_API_KEY: ${{ secrets.DEEPGRAM_API_KEY }}
run: |
make unit-test
47 changes: 0 additions & 47 deletions .github/workflows/tests-unit.yaml.DISABLE

This file was deleted.

2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ venv.bak/
__pycache__
*.egg-info
dist/
.mypy_cache/
.pytest_cache/

# build
build/
Expand Down
29 changes: 21 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ version: #### display version of components
@echo 'GOARCH: $(GOARCH)'
@echo 'go version: $(shell go version)'

.PHONY: check lint pylint format black blackformat lint_files lint_diff static mypy mdlint shellcheck actionlint yamllint ### Performs all of the checks, lint'ing, etc available
.PHONY: check lint pylint format black blackformat lint-files lint-diff static mypy mdlint shellcheck actionlint yamllint ### Performs all of the checks, lint'ing, etc available
check: lint static mdlint shellcheck actionlint yamllint

.PHONY: ensure-deps
Expand All @@ -44,22 +44,21 @@ ensure-deps: #### Ensure that all required dependency utilities are downloaded o
GO_MODULES=$(shell find . -path "*/go.mod" | xargs -I _ dirname _)

PYTHON_FILES=.
lint_files: PYTHON_FILES=deepgram/ examples/
lint_diff: PYTHON_FILES=$(shell git diff --name-only --diff-filter=d main | grep -E '\.py$$')
lint-files: PYTHON_FILES=deepgram/ examples/
lint-diff: PYTHON_FILES=$(shell git diff --name-only --diff-filter=d main | grep -E '\.py$$')

lint_files lint_diff: #### Performs Python formatting
lint-files lint-diff: #### Performs Python formatting
black --target-version py310 $(PYTHON_FILES)

black blackformat format: lint_files
black blackformat format: lint-files

pylint: lint_files #### Performs Python linting
pylint: lint-files #### Performs Python linting
pylint --disable=W0622 --disable=W0404 --disable=W0611 --rcfile .pylintrc deepgram

lint: pylint #### Performs Golang programming lint

static_files: PYTHON_FILES=deepgram/
static mypy: #### Performs static analysis
mypy --config-file mypy.ini --python-version 3.10 --exclude examples --exclude tests/edge_cases --exclude tests/expected_failures $(PYTHON_FILES)
mypy --config-file mypy.ini --python-version 3.10 --exclude tests --exclude examples $(PYTHON_FILES)

mdlint: #### Performs Markdown lint
# mdlint rules with common errors and possible fixes can be found here:
Expand All @@ -75,3 +74,17 @@ yamllint: #### Performs yaml lint
actionlint: #### Performs GitHub Actions lint
actionlint
##### LINTING TARGETS

##### TESTING TARGETS

.PHONY: test daily-test unit-test
test: daily-test unit-test #### Run ALL tests

daily-test: #### Run daily tests
@echo "Running daily tests"
python -m pytest -k daily_test

unit-test: #### Run unit tests
@echo "Running unit tests"
python -m pytest -k unit_test
##### TESTING TARGETS
22 changes: 20 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -254,14 +254,32 @@ pip install -r requirements.txt
pip install -e .
```

### Testing
### Daily and Unit Tests

If you are looking to contribute or modify pytest code, then you need to install the following dependencies:
If you are looking to use, run, contribute or modify to the daily/unit tests, then you need to install the following dependencies:

```bash
pip install -r requirements-dev.txt
```

#### Daily Tests

The daily tests invoke a series of checks against the actual/real API endpoint and saves the results in `tests/response_data` folder. This response data is updated nightly to reflec the latest response from the server. Running the daily tests does require a `DEEPGRAM_API_KEY` set in your environment variables.

To run the Daily Tests:

```bash
make daily-test
```

#### Unit Tests

The unit tests invoke a series of checks against mock endpoints using the responses saved in `tests/response_data` from the daily tests. These tests are meant to simulate running against the endpoint without actually reaching out to the endpoint; running the unit tests does require a `DEEPGRAM_API_KEY` set in your environment variables but you will not actually reach out to the server.

```bash
make unit-test
```

## Getting Help

We love to hear from you so if you have questions, comments or find a bug in the
Expand Down
20 changes: 17 additions & 3 deletions deepgram/clients/abstract_async_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,12 @@ async def _handle_request(
timeout = httpx.Timeout(30.0, connect=10.0)

try:
async with httpx.AsyncClient(timeout=timeout) as client:
transport = kwargs.get("transport")
async with httpx.AsyncClient(
timeout=timeout, transport=transport
) as client:
if transport:
kwargs.pop("transport")
response = await client.request(
method, _url, headers=_headers, **kwargs
)
Expand Down Expand Up @@ -269,7 +274,12 @@ async def _handle_request_memory(
timeout = httpx.Timeout(30.0, connect=10.0)

try:
async with httpx.AsyncClient(timeout=timeout) as client:
transport = kwargs.get("transport")
async with httpx.AsyncClient(
timeout=timeout, transport=transport
) as client:
if transport:
kwargs.pop("transport")
response = await client.request(
method, _url, headers=_headers, **kwargs
)
Expand Down Expand Up @@ -334,7 +344,11 @@ async def _handle_request_raw(
timeout = httpx.Timeout(30.0, connect=10.0)

try:
client = httpx.AsyncClient(timeout=timeout)
transport = kwargs.get("transport")
client = httpx.AsyncClient(timeout=timeout, transport=transport)
if transport:
kwargs.pop("transport")
kwargs.pop("transport")
req = client.build_request(method, _url, headers=_headers, **kwargs)
return await client.send(req, stream=True)

Expand Down
15 changes: 12 additions & 3 deletions deepgram/clients/abstract_sync_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,10 @@ def _handle_request(
timeout = httpx.Timeout(30.0, connect=10.0)

try:
with httpx.Client(timeout=timeout) as client:
transport = kwargs.get("transport")
with httpx.Client(timeout=timeout, transport=transport) as client:
if transport:
kwargs.pop("transport")
response = client.request(method, _url, headers=_headers, **kwargs)
response.raise_for_status()
return response.text
Expand Down Expand Up @@ -267,7 +270,10 @@ def _handle_request_memory(
timeout = httpx.Timeout(30.0, connect=10.0)

try:
with httpx.Client(timeout=timeout) as client:
transport = kwargs.get("transport")
with httpx.Client(timeout=timeout, transport=transport) as client:
if transport:
kwargs.pop("transport")
response = client.request(method, _url, headers=_headers, **kwargs)
response.raise_for_status()

Expand Down Expand Up @@ -330,7 +336,10 @@ def _handle_request_raw(
timeout = httpx.Timeout(30.0, connect=10.0)

try:
client = httpx.Client(timeout=timeout)
transport = kwargs.get("transport")
with httpx.Client(timeout=timeout, transport=transport) as client:
if transport:
kwargs.pop("transport")
req = client.build_request(method, _url, headers=_headers, **kwargs)
return client.send(req, stream=True)

Expand Down
Loading

0 comments on commit 8f8e7fb

Please sign in to comment.