Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ stdenv
2, lib
3, isPyPy
4, pythonOlder
5, fetchPypi
6, buildPythonPackage
7
8# build
9, cython
10
11# propagates
12, greenlet
13, importlib-metadata
14, typing-extensions
15
16# optionals
17, aiosqlite
18, asyncmy
19, asyncpg
20, cx_oracle
21, mariadb
22, mypy
23, mysql-connector
24, mysqlclient
25# TODO: oracledb
26, pg8000
27, psycopg
28, psycopg2
29, psycopg2cffi
30# TODO: pymssql
31, pymysql
32, pyodbc
33# TODO: sqlcipher3
34
35# tests
36, mock
37, pytestCheckHook
38}:
39
40buildPythonPackage rec {
41 pname = "SQLAlchemy";
42 version = "1.4.41"; # TODO: check python3Packages.fastapi when updating to >= 1.4.42
43 disabled = pythonOlder "3.7";
44
45 src = fetchPypi {
46 inherit pname version;
47 hash = "sha256-ApL3DReX48VOhi5vMK5HQBRki8nHI+FKL9pzCtsKl5E=";
48 };
49
50 nativeBuildInputs = lib.optionals (!isPyPy) [
51 cython
52 ];
53
54 propagatedBuildInputs = [
55 greenlet
56 typing-extensions
57 ] ++ lib.optionals (pythonOlder "3.8") [
58 importlib-metadata
59 ];
60
61 passthru.optional-dependencies = rec {
62 asyncio = [
63 greenlet
64 ];
65 mypy = [
66 #mypy
67 ];
68 mssql = [
69 pyodbc
70 ];
71 mssql_pymysql = [
72 # TODO: pymssql
73 ];
74 mssql_pyodbc = [
75 pyodbc
76 ];
77 mysql = [
78 mysqlclient
79 ];
80 mysql_connector = [
81 mysql-connector
82 ];
83 mariadb_connector = [
84 mariadb
85 ];
86 oracle = [
87 cx_oracle
88 ];
89 oracle_oracledb = [
90 # TODO: oracledb
91 ];
92 postgresql = [
93 psycopg2
94 ];
95 postgresql_pg8000 = [
96 pg8000
97 ];
98 postgresql_asyncpg = [
99 asyncpg
100 ] ++ asyncio;
101 postgresql_psycopg2binary = [
102 psycopg2
103 ];
104 postgresql_psycopg2cffi = [
105 psycopg2cffi
106 ];
107 postgresql_psycopg = [
108 psycopg
109 ];
110 pymysql = [
111 pymysql
112 ];
113 aiomysql = [
114 aiomysql
115 ] ++ asyncio;
116 asyncmy = [
117 asyncmy
118 ] ++ asyncio;
119 aiosqlite = [
120 aiosqlite
121 typing-extensions
122 ] ++ asyncio;
123 sqlcipher = [
124 # TODO: sqlcipher3
125 ];
126 };
127
128 checkInputs = [
129 pytestCheckHook
130 mock
131 ];
132
133 # disable mem-usage tests on mac, has trouble serializing pickle files
134 disabledTests = lib.optionals stdenv.isDarwin [
135 "MemUsageWBackendTest"
136 "MemUsageTest"
137 ];
138
139 meta = with lib; {
140 changelog = "https://github.com/sqlalchemy/sqlalchemy/releases/tag/rel_${builtins.replaceStrings [ "." ] [ "_" ] version}";
141 description = "The Python SQL toolkit and Object Relational Mapper";
142 homepage = "http://www.sqlalchemy.org/";
143 license = licenses.mit;
144 };
145}