1{ 2 lib, 3 isPyPy, 4 pythonOlder, 5 fetchFromGitHub, 6 buildPythonPackage, 7 8 # build 9 cython, 10 setuptools, 11 12 # propagates 13 greenlet, 14 typing-extensions, 15 16 # optionals 17 aiomysql, 18 aiosqlite, 19 asyncmy, 20 asyncpg, 21 cx-oracle, 22 mariadb, 23 mypy, 24 mysql-connector, 25 mysqlclient, 26 oracledb, 27 pg8000, 28 psycopg, 29 psycopg2, 30 psycopg2cffi, 31 # TODO: pymssql 32 pymysql, 33 pyodbc, 34 # TODO: sqlcipher3 35 36 # tests 37 mock, 38 pytest-xdist, 39 pytestCheckHook, 40}: 41 42buildPythonPackage rec { 43 pname = "sqlalchemy"; 44 version = "2.0.30"; 45 format = "pyproject"; 46 47 disabled = pythonOlder "3.7"; 48 49 src = fetchFromGitHub { 50 owner = "sqlalchemy"; 51 repo = "sqlalchemy"; 52 rev = "refs/tags/rel_${lib.replaceStrings [ "." ] [ "_" ] version}"; 53 hash = "sha256-l6VxBK4RT/sAFkz3g633MrfQH9Bvp/JE12mdtqjsxd8="; 54 }; 55 56 postPatch = '' 57 sed -i '/tag_build = dev/d' setup.cfg 58 ''; 59 60 nativeBuildInputs = [ setuptools ] ++ lib.optionals (!isPyPy) [ cython ]; 61 62 propagatedBuildInputs = [ 63 greenlet 64 typing-extensions 65 ]; 66 67 passthru.optional-dependencies = lib.fix (self: { 68 asyncio = [ greenlet ]; 69 mypy = [ mypy ]; 70 mssql = [ pyodbc ]; 71 mssql_pymysql = [ 72 # TODO: pymssql 73 ]; 74 mssql_pyodbc = [ pyodbc ]; 75 mysql = [ mysqlclient ]; 76 mysql_connector = [ mysql-connector ]; 77 mariadb_connector = [ mariadb ]; 78 oracle = [ cx-oracle ]; 79 oracle_oracledb = [ oracledb ]; 80 postgresql = [ psycopg2 ]; 81 postgresql_pg8000 = [ pg8000 ]; 82 postgresql_asyncpg = [ asyncpg ] ++ self.asyncio; 83 postgresql_psycopg2binary = [ psycopg2 ]; 84 postgresql_psycopg2cffi = [ psycopg2cffi ]; 85 postgresql_psycopg = [ psycopg ]; 86 postgresql_psycopgbinary = [ psycopg ]; 87 pymysql = [ pymysql ]; 88 aiomysql = [ aiomysql ] ++ self.asyncio; 89 asyncmy = [ asyncmy ] ++ self.asyncio; 90 aiosqlite = [ 91 aiosqlite 92 typing-extensions 93 ] ++ self.asyncio; 94 sqlcipher = [ 95 # TODO: sqlcipher3 96 ]; 97 }); 98 99 nativeCheckInputs = [ 100 pytest-xdist 101 pytestCheckHook 102 mock 103 ]; 104 105 disabledTestPaths = [ 106 # typing correctness, not interesting 107 "test/ext/mypy" 108 "test/typing" 109 # slow and high memory usage, not interesting 110 "test/aaa_profiling" 111 ]; 112 113 meta = with lib; { 114 changelog = "https://github.com/sqlalchemy/sqlalchemy/releases/tag/rel_${ 115 builtins.replaceStrings [ "." ] [ "_" ] version 116 }"; 117 description = "The Python SQL toolkit and Object Relational Mapper"; 118 homepage = "http://www.sqlalchemy.org/"; 119 license = licenses.mit; 120 }; 121}