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