Thanks to visit codestin.com
Credit goes to github.com

Skip to content

CI: Run Django test #1121

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
May 25, 2023
66 changes: 66 additions & 0 deletions .github/workflows/django.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Django test

on:
push:
# branches: ["main"]
# pull_request:

jobs:
django-test:
name: "Run Django LTS test suite"
runs-on: ubuntu-latest
# There are some known difference between MySQLdb and PyMySQL.
continue-on-error: true
env:
PIP_NO_PYTHON_VERSION_WARNING: 1
PIP_DISABLE_PIP_VERSION_CHECK: 1
# DJANGO_VERSION: "3.2.19"
strategy:
fail-fast: false
matrix:
include:
# Django 3.2.9+ supports Python 3.10
# https://docs.djangoproject.com/ja/3.2/releases/3.2/
- django: "3.2.19"
python: "3.10"

- django: "4.2.1"
python: "3.11"

steps:
- name: Start MySQL
run: |
sudo systemctl start mysql.service
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot -proot mysql
mysql -uroot -proot -e "set global innodb_flush_log_at_trx_commit=0;"
mysql -uroot -proot -e "CREATE USER 'scott'@'%' IDENTIFIED BY 'tiger'; GRANT ALL ON *.* TO scott;"
mysql -uroot -proot -e "CREATE DATABASE django_default; CREATE DATABASE django_other;"

- uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}

- name: Install mysqlclient
run: |
#pip install mysqlclient # Use stable version
pip install .[rsa]

- name: Setup Django
run: |
sudo apt-get install libmemcached-dev
wget https://github.com/django/django/archive/${{ matrix.django }}.tar.gz
tar xf ${{ matrix.django }}.tar.gz
cp ci/test_mysql.py django-${{ matrix.django }}/tests/
cd django-${{ matrix.django }}
pip install . -r tests/requirements/py3.txt

- name: Run Django test
run: |
cd django-${{ matrix.django }}/tests/
# test_runner does not using our test_mysql.py
# We can't run whole django test suite for now.
# Run olly backends test
DJANGO_SETTINGS_MODULE=test_mysql python runtests.py backends
47 changes: 47 additions & 0 deletions ci/test_mysql.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# This is an example test settings file for use with the Django test suite.
#
# The 'sqlite3' backend requires only the ENGINE setting (an in-
# memory database will be used). All other backends will require a
# NAME and potentially authentication information. See the
# following section in the docs for more information:
#
# https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/
#
# The different databases that Django supports behave differently in certain
# situations, so it is recommended to run the test suite against as many
# database backends as possible. You may want to create a separate settings
# file for each of the backends you test against.

import pymysql

pymysql.install_as_MySQLdb()

DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "django_default",
"HOST": "127.0.0.1",
"USER": "scott",
"PASSWORD": "tiger",
"TEST": {"CHARSET": "utf8mb3", "COLLATION": "utf8mb3_general_ci"},
},
"other": {
"ENGINE": "django.db.backends.mysql",
"NAME": "django_other",
"HOST": "127.0.0.1",
"USER": "scott",
"PASSWORD": "tiger",
"TEST": {"CHARSET": "utf8mb3", "COLLATION": "utf8mb3_general_ci"},
},
}

SECRET_KEY = "django_tests_secret_key"

# Use a fast hasher to speed up tests.
PASSWORD_HASHERS = [
"django.contrib.auth.hashers.MD5PasswordHasher",
]

DEFAULT_AUTO_FIELD = "django.db.models.AutoField"

USE_TZ = False
51 changes: 25 additions & 26 deletions pymysql/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,30 @@
TimestampFromTicks,
)

# PyMySQL version.
# Used by setuptools.
VERSION = (1, 1, 0, "dev", 1)

### for mysqlclient compatibility
### Django checks mysqlclient version.
version_info = (1, 4, 3, "final", 0)
__version__ = "1.4.3"


def get_client_info(): # for MySQLdb compatibility
return __version__


def install_as_MySQLdb():
"""
After this function is called, any application that imports MySQLdb
will unwittingly actually use pymysql.
"""
sys.modules["MySQLdb"] = sys.modules["pymysql"]


# end of mysqlclient compatibility code

VERSION = (1, 0, 3)
if len(VERSION) > 3:
VERSION_STRING = "%d.%d.%d_%s" % VERSION
else:
VERSION_STRING = "%d.%d.%d" % VERSION
threadsafety = 1
apilevel = "2.0"
paramstyle = "pyformat"
Expand Down Expand Up @@ -109,31 +127,12 @@ def Binary(x):
return bytes(x)


Connect = connect = Connection = connections.Connection


def get_client_info(): # for MySQLdb compatibility
return VERSION_STRING


# we include a doctored version_info here for MySQLdb compatibility
version_info = (1, 4, 0, "final", 0)

NULL = "NULL"

__version__ = get_client_info()


def thread_safe():
return True # match MySQLdb.thread_safe()


def install_as_MySQLdb():
"""
After this function is called, any application that imports MySQLdb or
_mysql will unwittingly actually use pymysql.
"""
sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]
Connect = connect = Connection = connections.Connection
NULL = "NULL"


__all__ = [
Expand Down
4 changes: 2 additions & 2 deletions pymysql/connections.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
EOFPacketWrapper,
LoadLocalPacketWrapper,
)
from . import err, VERSION_STRING
from . import err, __version__

try:
import ssl
Expand Down Expand Up @@ -346,7 +346,7 @@ def _config(key, arg):
self._connect_attrs = {
"_client_name": "pymysql",
"_pid": str(os.getpid()),
"_client_version": VERSION_STRING,
"_client_version": __version__,
}

if program_name:
Expand Down