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}