Skip to content

Commit a97e6a5

Browse files
committed
Migrate to uv
1 parent 0be3c72 commit a97e6a5

File tree

6 files changed

+428
-27
lines changed

6 files changed

+428
-27
lines changed

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.venv

Dockerfile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
FROM sourcepole/qwc-uwsgi-base:alpine-v2023.10.26
1+
FROM sourcepole/qwc-uwsgi-base:alpine-v2025.01.24
22

3-
ADD requirements.txt /srv/qwc_service/requirements.txt
3+
WORKDIR /srv/qwc_service
4+
ADD pyproject.toml uv.lock ./
45

56
# git: Required for pip with git repos
67
RUN \
78
apk add --no-cache --update --virtual build-deps git && \
8-
pip3 install --no-cache-dir -r /srv/qwc_service/requirements.txt && \
9+
uv sync --frozen && \
910
apk del build-deps
1011

1112
ADD src /srv/qwc_service/

README.md

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ See also [flask-ldap3-login](https://flask-ldap3-login.readthedocs.io/en/latest/
1111

1212
ENV | default value | description
1313
--------------------------------|-------------------------|---------
14-
`JWT_SECRET_KEY` | `********` | secret key for JWT token (same for all services)
14+
`JWT_SECRET_KEY` | `********` | secret key for JWT token (same for all services)
1515
`LDAP_HOST` | `localhost` | Hostname of your LDAP Server
1616
`LDAP_PORT` | `389` | The port number of your LDAP server.
1717
`LDAP_USE_SSL` | `False` | Set to True if your server uses SSL
@@ -37,7 +37,7 @@ Usage
3737

3838
Run standalone application:
3939

40-
python src/server.py
40+
uv run src/server.py
4141

4242
Endpoints:
4343

@@ -51,33 +51,21 @@ Endpoints:
5151
Development
5252
-----------
5353

54-
Create a virtual environment:
55-
56-
python3 -m venv .venv
57-
58-
Activate virtual environment:
59-
60-
source .venv/bin/activate
61-
62-
Install requirements:
63-
64-
pip install -r requirements.txt
65-
66-
Configure environment:
54+
Install dependencies and run service:
6755

6856
echo FLASK_ENV=development >.flaskenv
6957

7058
Start local service:
7159

72-
python src/server.py
60+
uv run src/server.py
7361

7462
Testing with https://github.com/rroemhild/docker-test-openldap
7563

7664
docker run -d -p 10389:10389 -p 10636:10636 rroemhild/test-openldap:2.1
7765

7866
Start service:
7967

80-
LDAP_PORT=10389 LDAP_BIND_USER_DN="cn=admin,dc=planetexpress,dc=com" LDAP_BIND_USER_PASSWORD=GoodNewsEveryone LDAP_BASE_DN="dc=planetexpress,dc=com" LDAP_USER_DN="ou=people" LDAP_GROUP_DN="ou=people" LDAP_SEARCH_FOR_GROUPS=True LDAP_GROUP_MEMBERS_ATTR="member" python src/server.py
68+
LDAP_PORT=10389 LDAP_BIND_USER_DN="cn=admin,dc=planetexpress,dc=com" LDAP_BIND_USER_PASSWORD=GoodNewsEveryone LDAP_BASE_DN="dc=planetexpress,dc=com" LDAP_USER_DN="ou=people" LDAP_GROUP_DN="ou=people" LDAP_SEARCH_FOR_GROUPS=True LDAP_GROUP_MEMBERS_ATTR="member" uv run src/server.py
8169

8270
* User: Philip J. Fry
8371
* Password: fry

pyproject.toml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[project]
2+
name = "qwc-ldap-auth"
3+
version = "v2024.11.18"
4+
description = "Authentication with LDAP/Active Directory"
5+
readme = "README.md"
6+
requires-python = ">=3.10"
7+
dependencies = [
8+
"Flask~=3.0.0",
9+
"Werkzeug~=3.0.6",
10+
"Flask-JWT-Extended~=4.6.0",
11+
"flask_login~=0.6.3",
12+
"Flask-WTF~=1.2.1",
13+
"flask-ldap3-login @ git+https://github.com/nickw444/flask-ldap3-login.git@dd1e9df71ff586a080afbf62923f00f4c3926776",
14+
"python-i18n~=0.3.9",
15+
"qwc-services-core~=1.3.34"
16+
]
17+
18+
[dependency-groups]
19+
dev = [
20+
"python-dotenv>=1.0.1",
21+
]

requirements.txt

Lines changed: 102 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,103 @@
1-
Flask==3.0.0
2-
Werkzeug==3.0.6
3-
Flask-JWT-Extended==4.6.0
4-
flask_login==0.6.3
5-
Flask-WTF==1.2.1
1+
# This file was autogenerated by uv via the following command:
2+
# uv export --format requirements-txt --no-dev
3+
blinker==1.9.0 \
4+
--hash=sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf \
5+
--hash=sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc
6+
click==8.1.8 \
7+
--hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \
8+
--hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a
9+
colorama==0.4.6 ; sys_platform == 'win32' \
10+
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
11+
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
12+
flask==3.0.3 \
13+
--hash=sha256:34e815dfaa43340d1d15a5c3a02b8476004037eb4840b34910c6e21679d288f3 \
14+
--hash=sha256:ceb27b0af3823ea2737928a4d99d125a06175b8512c445cbd9a9ce200ef76842
15+
flask-jwt-extended==4.6.0 \
16+
--hash=sha256:63a28fc9731bcc6c4b8815b6f954b5904caa534fc2ae9b93b1d3ef12930dca95 \
17+
--hash=sha256:9215d05a9413d3855764bcd67035e75819d23af2fafb6b55197eb5a3313fdfb2
618
flask-ldap3-login @ git+https://github.com/nickw444/flask-ldap3-login.git@dd1e9df71ff586a080afbf62923f00f4c3926776
7-
python-i18n==0.3.9
8-
qwc-services-core==1.3.34
19+
flask-login==0.6.3 \
20+
--hash=sha256:5e23d14a607ef12806c699590b89d0f0e0d67baeec599d75947bf9c147330333 \
21+
--hash=sha256:849b25b82a436bf830a054e74214074af59097171562ab10bfa999e6b78aae5d
22+
flask-wtf==1.2.2 \
23+
--hash=sha256:79d2ee1e436cf570bccb7d916533fa18757a2f18c290accffab1b9a0b684666b \
24+
--hash=sha256:e93160c5c5b6b571cf99300b6e01b72f9a101027cab1579901f8b10c5daf0b70
25+
itsdangerous==2.2.0 \
26+
--hash=sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef \
27+
--hash=sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173
28+
jinja2==3.1.5 \
29+
--hash=sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb \
30+
--hash=sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb
31+
ldap3==2.9.1 \
32+
--hash=sha256:5869596fc4948797020d3f03b7939da938778a0f9e2009f7a072ccf92b8e8d70 \
33+
--hash=sha256:f3e7fc4718e3f09dda568b57100095e0ce58633bcabbed8667ce3f8fbaa4229f
34+
markupsafe==3.0.2 \
35+
--hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \
36+
--hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \
37+
--hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \
38+
--hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \
39+
--hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \
40+
--hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \
41+
--hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \
42+
--hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \
43+
--hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \
44+
--hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \
45+
--hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \
46+
--hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \
47+
--hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \
48+
--hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \
49+
--hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \
50+
--hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \
51+
--hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \
52+
--hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \
53+
--hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \
54+
--hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \
55+
--hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \
56+
--hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \
57+
--hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \
58+
--hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \
59+
--hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \
60+
--hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \
61+
--hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \
62+
--hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \
63+
--hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \
64+
--hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \
65+
--hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \
66+
--hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \
67+
--hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \
68+
--hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \
69+
--hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \
70+
--hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \
71+
--hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \
72+
--hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \
73+
--hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \
74+
--hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \
75+
--hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \
76+
--hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \
77+
--hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \
78+
--hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \
79+
--hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \
80+
--hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \
81+
--hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \
82+
--hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \
83+
--hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \
84+
--hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \
85+
--hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50
86+
pyasn1==0.6.1 \
87+
--hash=sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629 \
88+
--hash=sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034
89+
pyjwt==2.10.1 \
90+
--hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \
91+
--hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb
92+
python-i18n==0.3.9 \
93+
--hash=sha256:bda5b8d889ebd51973e22e53746417bd32783c9bd6780fd27cadbb733915651d \
94+
--hash=sha256:df97f3d2364bf3a7ebfbd6cbefe8e45483468e52a9e30b909c6078f5f471e4e8
95+
qwc-services-core==1.3.35 \
96+
--hash=sha256:7c2330dfcbd58fb965ec6a8a369e715ec4a809123781ceac4a77aaa7abb8a991 \
97+
--hash=sha256:8001c648f6cffa5952b620adb4418a4795469fc8e21c8bc7accba7b09a82a1cc
98+
werkzeug==3.0.6 \
99+
--hash=sha256:1bc0c2310d2fbb07b1dd1105eba2f7af72f322e1e455f2f93c993bee8c8a5f17 \
100+
--hash=sha256:a8dd59d4de28ca70471a34cba79bed5f7ef2e036a76b3ab0835474246eb41f8d
101+
wtforms==3.2.1 \
102+
--hash=sha256:583bad77ba1dd7286463f21e11aa3043ca4869d03575921d1a1698d0715e0fd4 \
103+
--hash=sha256:df3e6b70f3192e92623128123ec8dca3067df9cfadd43d59681e210cfb8d4682

0 commit comments

Comments
 (0)