From a9b59eb30289b294ddcbb68656e34b976716d413 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Thu, 18 May 2023 22:01:17 +0900 Subject: [PATCH 01/15] Update Django test setting --- ci/test_mysql.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ci/test_mysql.py b/ci/test_mysql.py index e285f4cf..b098c1cf 100644 --- a/ci/test_mysql.py +++ b/ci/test_mysql.py @@ -37,3 +37,5 @@ PASSWORD_HASHERS = [ "django.contrib.auth.hashers.MD5PasswordHasher", ] + +DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' From 014c6c0e882c9aa1696e4d913960f3208a51c5d5 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Thu, 18 May 2023 23:19:00 +0900 Subject: [PATCH 02/15] Test older version --- .github/workflows/django.yaml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/django.yaml b/.github/workflows/django.yaml index 737f34be..e39aee51 100644 --- a/.github/workflows/django.yaml +++ b/.github/workflows/django.yaml @@ -6,6 +6,9 @@ on: jobs: build: runs-on: ubuntu-latest + env: + PIP_NO_PYTHON_VERSION_WARNING: 1 + PIP_DISABLE_PIP_VERSION_CHECK: 1 steps: - name: Start MySQL run: | @@ -19,17 +22,15 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - # https://www.mail-archive.com/django-updates@googlegroups.com/msg209056.html - python-version: "3.11" + # Django 3.2.9+ supports Python 3.10 + # https://docs.djangoproject.com/ja/3.2/releases/3.2/ + python-version: "3.10" - name: Install mysqlclient - env: - PIP_NO_PYTHON_VERSION_WARNING: 1 - PIP_DISABLE_PIP_VERSION_CHECK: 1 run: | - pip install -r requirements.txt + #pip install -r requirements.txt + pip install mysqlclient # Use stable version pip install . - # pip install mysqlclient # Use stable version - name: Run Django test env: From 2b29cd6094694d7811ed4d01fa898bfd989f3381 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Thu, 18 May 2023 23:20:13 +0900 Subject: [PATCH 03/15] black --- ci/test_mysql.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test_mysql.py b/ci/test_mysql.py index b098c1cf..e6e26f5e 100644 --- a/ci/test_mysql.py +++ b/ci/test_mysql.py @@ -38,4 +38,4 @@ "django.contrib.auth.hashers.MD5PasswordHasher", ] -DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" From 52c6432626889fb728959f1e580cb519c94b04e3 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Thu, 18 May 2023 23:22:36 +0900 Subject: [PATCH 04/15] fix yaml --- .github/workflows/django.yaml | 19 +++++++++++-------- .github/workflows/tests.yaml | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.github/workflows/django.yaml b/.github/workflows/django.yaml index e39aee51..ced622c4 100644 --- a/.github/workflows/django.yaml +++ b/.github/workflows/django.yaml @@ -5,10 +5,12 @@ on: jobs: build: + name: "Run Django LTS test suite" runs-on: ubuntu-latest - env: - PIP_NO_PYTHON_VERSION_WARNING: 1 - PIP_DISABLE_PIP_VERSION_CHECK: 1 + env: + PIP_NO_PYTHON_VERSION_WARNING: 1 + PIP_DISABLE_PIP_VERSION_CHECK: 1 + DJANGO_VERSION: "3.2.19" steps: - name: Start MySQL run: | @@ -32,15 +34,16 @@ jobs: pip install mysqlclient # Use stable version pip install . - - name: Run Django test - env: - DJANGO_VERSION: "3.2.19" + - name: Setup Django run: | sudo apt-get install libmemcached-dev wget https://github.com/django/django/archive/${DJANGO_VERSION}.tar.gz tar xf ${DJANGO_VERSION}.tar.gz cp ci/test_mysql.py django-${DJANGO_VERSION}/tests/ + cd django-${DJANGO_VERSION} + pip install . -r requirements/py3.txt + + - name: Run Django test + run: | cd django-${DJANGO_VERSION}/tests/ - pip install .. - pip install -r requirements/py3.txt PYTHONPATH=.. python3 ./runtests.py --settings=test_mysql diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 31ee34d3..0d9123ef 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -1,7 +1,7 @@ name: Test on: - push: + #push: pull_request: jobs: From 29683d59584f80588d2a849c335f087c88e41391 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Thu, 18 May 2023 23:31:09 +0900 Subject: [PATCH 05/15] Fix requirements --- .github/workflows/django.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/django.yaml b/.github/workflows/django.yaml index ced622c4..d264820e 100644 --- a/.github/workflows/django.yaml +++ b/.github/workflows/django.yaml @@ -41,7 +41,7 @@ jobs: tar xf ${DJANGO_VERSION}.tar.gz cp ci/test_mysql.py django-${DJANGO_VERSION}/tests/ cd django-${DJANGO_VERSION} - pip install . -r requirements/py3.txt + pip install . -r tests/requirements/py3.txt - name: Run Django test run: | From 7e8effd652b741f22998f61df5c2443642a3bbe5 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 19 May 2023 01:03:49 +0900 Subject: [PATCH 06/15] Use utf8mb3 for Django test --- ci/test_mysql.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ci/test_mysql.py b/ci/test_mysql.py index e6e26f5e..e538f9f0 100644 --- a/ci/test_mysql.py +++ b/ci/test_mysql.py @@ -19,7 +19,7 @@ "HOST": "127.0.0.1", "USER": "scott", "PASSWORD": "tiger", - "TEST": {"CHARSET": "utf8mb4", "COLLATION": "utf8mb4_general_ci"}, + "TEST": {"CHARSET": "utf8mb3", "COLLATION": "utf8mb3_general_ci"}, }, "other": { "ENGINE": "django.db.backends.mysql", @@ -27,7 +27,7 @@ "HOST": "127.0.0.1", "USER": "scott", "PASSWORD": "tiger", - "TEST": {"CHARSET": "utf8mb4", "COLLATION": "utf8mb4_general_ci"}, + "TEST": {"CHARSET": "utf8mb3", "COLLATION": "utf8mb3_general_ci"}, }, } @@ -38,4 +38,4 @@ "django.contrib.auth.hashers.MD5PasswordHasher", ] -DEFAULT_AUTO_FIELD = "django.db.models.AutoField" +DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' From fbc402e9877c311de9d6e01b761da5c933d591fd Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 19 May 2023 01:06:17 +0900 Subject: [PATCH 07/15] Update make check --- Makefile | 4 ++-- ci/test_mysql.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index f0e94c3b..bcd4334d 100644 --- a/Makefile +++ b/Makefile @@ -17,5 +17,5 @@ clean: .PHONY: check check: - ruff . - black *.py src + ruff *.py src ci + black *.py src ci diff --git a/ci/test_mysql.py b/ci/test_mysql.py index e538f9f0..9417fc9f 100644 --- a/ci/test_mysql.py +++ b/ci/test_mysql.py @@ -38,4 +38,4 @@ "django.contrib.auth.hashers.MD5PasswordHasher", ] -DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" From d6a1dfcff2969e6972477f9b31e3bd97bf2b2d2e Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 19 May 2023 01:16:53 +0900 Subject: [PATCH 08/15] enable push test --- .github/workflows/tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 0d9123ef..31ee34d3 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -1,7 +1,7 @@ name: Test on: - #push: + push: pull_request: jobs: From e19bb9690d139326516369e837fa1389b55d8709 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 19 May 2023 01:17:58 +0900 Subject: [PATCH 09/15] Do not install stable mysqlclient --- .github/workflows/django.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/django.yaml b/.github/workflows/django.yaml index d264820e..ec4a2dd7 100644 --- a/.github/workflows/django.yaml +++ b/.github/workflows/django.yaml @@ -31,7 +31,7 @@ jobs: - name: Install mysqlclient run: | #pip install -r requirements.txt - pip install mysqlclient # Use stable version + #pip install mysqlclient # Use stable version pip install . - name: Setup Django From ebe31a0927d10a6a65af099f55b29af069a620ba Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 19 May 2023 01:18:47 +0900 Subject: [PATCH 10/15] Run Django test on pull request --- .github/workflows/django.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/django.yaml b/.github/workflows/django.yaml index ec4a2dd7..59112742 100644 --- a/.github/workflows/django.yaml +++ b/.github/workflows/django.yaml @@ -2,6 +2,7 @@ name: Django compat test on: push: + pull_request: jobs: build: From b791c1d550e754a8d8e1dc91c38c4206246cabdc Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 19 May 2023 02:00:58 +0900 Subject: [PATCH 11/15] Cursor.rowcount should be 0 --- src/MySQLdb/cursors.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MySQLdb/cursors.py b/src/MySQLdb/cursors.py index 785fa9a1..cc441026 100644 --- a/src/MySQLdb/cursors.py +++ b/src/MySQLdb/cursors.py @@ -66,7 +66,7 @@ def __init__(self, connection): self.connection = connection self.description = None self.description_flags = None - self.rowcount = -1 + self.rowcount = 0 self.arraysize = 1 self._executed = None @@ -78,7 +78,7 @@ def __init__(self, connection): def _discard(self): self.description = None self.description_flags = None - self.rowcount = -1 + self.rowcount = 0 self.lastrowid = None self._rows = None self.rownumber = None From d6af5578131642e18e7f32a3bdb166ffa3c45c56 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 19 May 2023 02:05:20 +0900 Subject: [PATCH 12/15] Keep rowcount and lastrowid after `__exit__`. --- src/MySQLdb/cursors.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/MySQLdb/cursors.py b/src/MySQLdb/cursors.py index cc441026..7ea7de28 100644 --- a/src/MySQLdb/cursors.py +++ b/src/MySQLdb/cursors.py @@ -78,8 +78,10 @@ def __init__(self, connection): def _discard(self): self.description = None self.description_flags = None - self.rowcount = 0 - self.lastrowid = None + # Django uses some member after __exit__. + # So we keep rowcount and lastrowid here. They are cleared in Cursor._query(). + #self.rowcount = 0 + #self.lastrowid = None self._rows = None self.rownumber = None @@ -323,6 +325,8 @@ def callproc(self, procname, args=()): def _query(self, q): db = self._get_db() self._result = None + self.rowcount = None + self.lastrowid = None db.query(q) self._do_get_result(db) self._post_get_result() From 96b1c6cc3ecab107eacc574f1b1ecd9393e61311 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 19 May 2023 02:06:58 +0900 Subject: [PATCH 13/15] black --- src/MySQLdb/cursors.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MySQLdb/cursors.py b/src/MySQLdb/cursors.py index 7ea7de28..70fbeea4 100644 --- a/src/MySQLdb/cursors.py +++ b/src/MySQLdb/cursors.py @@ -80,8 +80,8 @@ def _discard(self): self.description_flags = None # Django uses some member after __exit__. # So we keep rowcount and lastrowid here. They are cleared in Cursor._query(). - #self.rowcount = 0 - #self.lastrowid = None + # self.rowcount = 0 + # self.lastrowid = None self._rows = None self.rownumber = None From 778c6fbc870bad7a79b0a439e588d7d7dd77ba00 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 19 May 2023 02:15:39 +0900 Subject: [PATCH 14/15] CI: Cache dependency in Django test --- .github/workflows/django.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/django.yaml b/.github/workflows/django.yaml index 59112742..18d2b694 100644 --- a/.github/workflows/django.yaml +++ b/.github/workflows/django.yaml @@ -28,6 +28,8 @@ jobs: # Django 3.2.9+ supports Python 3.10 # https://docs.djangoproject.com/ja/3.2/releases/3.2/ python-version: "3.10" + cache: "pip" + cache-dependency-path: "ci/django-requirements.txt" - name: Install mysqlclient run: | From a605e0e6da16db945a28af68195f8cacadfa7fa0 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 19 May 2023 02:30:50 +0900 Subject: [PATCH 15/15] Tuning mysql server --- .github/workflows/django.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/django.yaml b/.github/workflows/django.yaml index 18d2b694..a7e076ce 100644 --- a/.github/workflows/django.yaml +++ b/.github/workflows/django.yaml @@ -17,6 +17,7 @@ jobs: 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;"