1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5
6 # build-system
7 setuptools,
8
9 # dependencies
10 deprecated,
11 google-api-core,
12 google-cloud-core,
13 google-cloud-testutils,
14 grpc-google-iam-v1,
15 grpc-interceptor,
16 proto-plus,
17 protobuf,
18 sqlparse,
19
20 # optional dependencies
21 libcst,
22 opentelemetry-api,
23 opentelemetry-sdk,
24 opentelemetry-semantic-conventions,
25 google-cloud-monitoring,
26 mmh3,
27
28 # testing
29 mock,
30 pytest-asyncio,
31 pytestCheckHook,
32}:
33
34buildPythonPackage rec {
35 pname = "google-cloud-spanner";
36 version = "3.58.0";
37 pyproject = true;
38
39 src = fetchFromGitHub {
40 owner = "googleapis";
41 repo = "python-spanner";
42 tag = "v${version}";
43 hash = "sha256-bIagQjQv+oatIo8mkA8t5wP9igMnorkiudgyWkVnJcg=";
44 };
45
46 build-system = [ setuptools ];
47
48 dependencies = [
49 deprecated
50 google-api-core
51 google-cloud-core
52 grpc-google-iam-v1
53 grpc-interceptor
54 proto-plus
55 protobuf
56 sqlparse
57 ];
58
59 optional-dependencies = {
60 libcst = [ libcst ];
61 tracing = [
62 opentelemetry-api
63 opentelemetry-sdk
64 opentelemetry-semantic-conventions
65 # opentelemetry-resourcedetector-gcp # Not available in nixpkgs
66 google-cloud-monitoring
67 mmh3
68 ];
69 };
70
71 nativeCheckInputs = [
72 google-cloud-monitoring
73 google-cloud-testutils
74 mmh3
75 mock
76 opentelemetry-api
77 opentelemetry-sdk
78 opentelemetry-semantic-conventions
79 pytest-asyncio
80 pytestCheckHook
81 ]
82 ++ lib.flatten (lib.attrValues optional-dependencies);
83
84 preCheck = ''
85 # prevent google directory from shadowing google imports
86 rm -r google
87 '';
88
89 disabledTests = [
90 # Requires credentials
91 "test_list_backup"
92 "test_list_database"
93 "test_list_instance"
94 # can't import mmh3
95 "test_generate_client_hash"
96 # Flaky, compares to execution time
97 "test_snapshot_read_concurrent"
98 # Flaky, can retry too quickly and fail
99 "test_retry_helper"
100 ];
101
102 disabledTestPaths = [
103 # Requires credentials
104 "tests/system/test_backup_api.py"
105 "tests/system/test_database_api.py"
106 "tests/system/test_dbapi.py"
107 "tests/system/test_instance_api.py"
108 "tests/system/test_session_api.py"
109 "tests/system/test_streaming_chunking.py"
110 "tests/system/test_table_api.py"
111 "tests/unit/test_metrics.py"
112 "tests/unit/test_metrics_capture.py"
113 "tests/unit/test_metrics_exporter.py"
114 "tests/unit/test_metrics_interceptor.py"
115 "tests/unit/spanner_dbapi/test_connect.py"
116 "tests/unit/spanner_dbapi/test_connection.py"
117 "tests/unit/spanner_dbapi/test_cursor.py"
118 "samples/samples/"
119 ];
120
121 pythonImportsCheck = [
122 "google.cloud.spanner_admin_database_v1"
123 "google.cloud.spanner_admin_instance_v1"
124 "google.cloud.spanner_dbapi"
125 "google.cloud.spanner_v1"
126 ];
127
128 __darwinAllowLocalNetworking = true;
129
130 meta = {
131 description = "Cloud Spanner API client library";
132 homepage = "https://github.com/googleapis/python-spanner";
133 changelog = "https://github.com/googleapis/python-spanner/blob/${src.tag}/CHANGELOG.md";
134 license = lib.licenses.asl20;
135 maintainers = [ lib.maintainers.sarahec ];
136 };
137}