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}