summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2023-05-05 13:02:01 +0200
committerRicardo Wurmus <rekado@elephly.net>2023-05-05 15:39:28 +0200
commitf41c9409f23068b21432b21d689156d7875a86e5 (patch)
treef6ef484be1b8819f1da1bf0c681e156259c9ddfa /gnu
parent484b843c2e59fa7eddacfe1a775818297ec4c350 (diff)
downloadguix-f41c9409f23068b21432b21d689156d7875a86e5.tar.gz
gnu: Add python-mysql-connector-python.
* gnu/packages/python-xyz.scm (python-mysql-connector-python): New variable.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/packages/python-xyz.scm81
1 files changed, 81 insertions, 0 deletions
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 137e07b0db..766cf8aa3a 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -917,6 +917,87 @@ template")
 variables into the markdown template")
     (license license:expat)))
 
+(define-public python-mysql-connector-python
+  (package
+    (name "python-mysql-connector-python")
+    (version "8.0.33")
+    ;; The archive on PyPi does not contain a build system
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://cdn.mysql.com/Downloads/"
+                                  "Connector-Python/mysql-connector-python-"
+                                  version "-src.tar.gz"))
+              (sha256
+               (base32
+                "00j9xgd43yzx5yiijnlmpaqpa58m5lscjglsgzg48dibhr69br0l"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:configure-flags
+      #~(list (string-append "--with-mysql-capi="
+                             #$(this-package-input "mysql"))
+              (string-append "--with-protobuf-include-dir="
+                             #$(this-package-input "protobuf")
+                             "/include/google/protobuf")
+              (string-append "--with-protobuf-lib-dir="
+                             #$(this-package-input "protobuf")
+                             "/lib")
+              (string-append "--with-protoc="
+                             #$(this-package-input "protobuf")
+                             "/bin/protoc"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'compatibility
+            (lambda _
+              (substitute* "src/mysql_capi.c"
+                (("res = mysql_options\\(&self->session, MYSQL_OPT_LOAD_DATA_LOCAL_DIR.*")
+                 "res = 0;")
+                (("mysql_options\\(&self->session, MYSQL_OPT_LOAD_DATA_LOCAL_DIR.*")
+                 "")
+                (("mysql_options\\(&self->session, MYSQL_OPT_TLS_CIPHERSUITES.*")
+                 "")
+                ;; The C API does not have mysql_bind_param, so we produce an
+                ;; error here.
+                (("status = mysql_bind_param.*") "status = 1;"))
+              ;; See https://github.com/protocolbuffers/protobuf/issues/9943
+              (substitute* "src/mysqlxpb/mysqlxpb.cc"
+                (("google::protobuf::string") "std::string"))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                ;; Some of these tests might be failing due to the build
+                ;; container's restrictions, others are due to the version
+                ;; mismatch.
+                (substitute* "tests/cext/test_cext_api.py"
+                  (("def test_change_user") "def _do_not_test_change_user")
+                  (("def test_get_character_set_info")
+                   "def _do_not_test_get_character_set_info"))
+                (substitute* "tests/test_bugs.py"
+                  (("def test_change_user") "def _do_not_test_change_user")
+                  (("def test_lost_connection") "def _do_not_test_lost_connection")
+                  (("def test_kill_query") "def _do_not_test_kill_query"))
+                (substitute* "tests/test_connection.py"
+                  (("def test_allow_local_infile_in_path")
+                   "def _do_not_test_allow_local_infile_in_path"))
+                (substitute* "tests/test_constants.py"
+                  (("def test_deprecated")
+                   "def _do_not_test_deprecated"))
+                (mkdir-p "/tmp/datadir")
+                (invoke "python3" "unittests.py"
+                        "--verbosity=3"
+                        (string-append "--with-mysql=" #$(this-package-input "mysql"))
+                        "--keep"
+                        "--mysql-topdir=/tmp/datadir"
+                        "--unix-socket=/tmp/datadir")))))))
+    (propagated-inputs (list python-protobuf))
+    (inputs (list mysql protobuf-3.20 openssl-1.1 zlib))
+    (home-page "https://dev.mysql.com/doc/connector-python/en/index.html")
+    (synopsis "MySQL driver written in Python")
+    (description "MySQL Connector/Python enables Python programs to access
+MySQL databases, using an API that is compliant with the Python Database API
+Specification v2.0 (PEP 249).")
+    (license license:gpl2)))
+
 (define-public python-py4j
   (package
     (name "python-py4j")