Skip to content

Commit 84dcdf6

Browse files
[Dockerfile] Update to include an install dev deps flag & add faker to dev deps
1 parent 22dff36 commit 84dcdf6

2 files changed

Lines changed: 112 additions & 104 deletions

File tree

docker/app/Dockerfile

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,19 @@ WORKDIR /app
1919
# copy the full project source
2020
COPY . .
2121

22-
# install dependencies using uv
22+
# Define an optional build argument
23+
ARG INSTALL_DEV=false
24+
ENV INSTALL_DEV=${INSTALL_DEV}
25+
26+
# Install dependencies using uv (conditionally include dev dependencies)
2327
ENV UV_PROJECT_ENVIRONMENT="/usr/local/"
24-
RUN uv sync --locked
28+
RUN if [ "$INSTALL_DEV" = "true" ]; then \
29+
echo "Installing all groups (including dev)..." && \
30+
uv sync --locked --all-groups; \
31+
else \
32+
echo "Installing only production dependencies..." && \
33+
uv sync --locked; \
34+
fi
2535

2636
# expose FastAPI's default dev port
2737
EXPOSE 8000

pyproject.toml

Lines changed: 100 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -5,99 +5,99 @@ description = "Add your description here"
55
readme = "README.md"
66
requires-python = ">=3.13"
77
dependencies = [
8-
"aiofiles==24.1.0",
9-
"aiohappyeyeballs==2.6.1",
10-
"aiohttp==3.12.15",
11-
"aiosignal==1.4.0",
12-
"aiosqlite==0.21.0",
13-
"alembic==1.17.0",
14-
"annotated-types==0.7.0",
15-
"anyio==4.10.0",
16-
"asgiref==3.9.1",
17-
"asn1crypto==1.5.1",
18-
"asyncpg==0.30.0",
19-
"attrs==25.4.0",
20-
"authlib>=1.6.0",
21-
"bcrypt==4.3.0",
22-
"cachetools==5.5.2",
23-
"certifi==2025.8.3",
24-
"cffi==1.17.1",
25-
"charset-normalizer==3.4.3",
26-
"click==8.3.0",
27-
"cloud-sql-python-connector==1.18.4",
28-
"cryptography==45.0.6",
29-
"dnspython==2.7.0",
30-
"dotenv>=0.9.9",
31-
"email-validator==2.2.0",
32-
"fastapi==0.116.1",
33-
"fastapi-pagination==0.14.3",
34-
"frozenlist==1.7.0",
35-
"geoalchemy2==0.18.0",
36-
"google-api-core==2.25.1",
37-
"google-auth==2.41.1",
38-
"google-cloud-core==2.4.3",
39-
"google-cloud-storage==3.3.0",
40-
"google-crc32c==1.7.1",
41-
"google-resumable-media==2.7.2",
42-
"googleapis-common-protos==1.70.0",
43-
"greenlet==3.2.4",
44-
"gunicorn==23.0.0",
45-
"h11==0.16.0",
46-
"httpcore==1.0.9",
47-
"httpx==0.28.1",
48-
"idna==3.10",
49-
"iniconfig==2.1.0",
50-
"itsdangerous>=2.2.0",
51-
"jinja2>=3.1.6",
52-
"mako==1.3.10",
53-
"markupsafe==3.0.2",
54-
"multidict==6.6.3",
55-
"numpy==2.3.3",
56-
"packaging==25.0",
57-
"pandas==2.3.2",
58-
"pandas-stubs==2.3.0.250703",
59-
"pg8000==1.31.4",
60-
"phonenumbers==9.0.13",
61-
"pillow==11.3.0",
62-
"pluggy==1.6.0",
63-
"pre-commit==4.3.0",
64-
"propcache==0.3.2",
65-
"proto-plus==1.26.1",
66-
"protobuf==6.32.1",
67-
"psycopg2-binary>=2.9.10",
68-
"pyasn1==0.6.1",
69-
"pyasn1-modules==0.4.2",
70-
"pycparser==2.23",
71-
"pydantic==2.11.7",
72-
"pydantic-core==2.33.2",
73-
"pygments==2.19.2",
74-
"pyjwt==2.10.1",
75-
"pyproj==3.7.2",
76-
"pyshp==2.3.1",
77-
"pytest==8.4.1",
78-
"pytest-cov>=6.2.1",
79-
"python-dateutil==2.9.0.post0",
80-
"python-jose>=3.5.0",
81-
"python-multipart==0.0.20",
82-
"pytz==2025.2",
83-
"requests==2.32.5",
84-
"rsa==4.9.1",
85-
"scramp==1.4.6",
86-
"sentry-sdk[fastapi]>=2.35.0",
87-
"shapely==2.1.1",
88-
"six==1.17.0",
89-
"sniffio==1.3.1",
90-
"sqlalchemy==2.0.43",
91-
"sqlalchemy-continuum==1.4.2",
92-
"sqlalchemy-searchable==2.1.0",
93-
"sqlalchemy-utils==0.42.0",
94-
"starlette==0.47.3",
95-
"typing-extensions==4.15.0",
96-
"typing-inspection==0.4.1",
97-
"tzdata==2025.2",
98-
"urllib3==2.5.0",
99-
"uvicorn==0.38.0",
100-
"yarl==1.20.1",
8+
"aiofiles==24.1.0",
9+
"aiohappyeyeballs==2.6.1",
10+
"aiohttp==3.12.15",
11+
"aiosignal==1.4.0",
12+
"aiosqlite==0.21.0",
13+
"alembic==1.17.0",
14+
"annotated-types==0.7.0",
15+
"anyio==4.10.0",
16+
"asgiref==3.9.1",
17+
"asn1crypto==1.5.1",
18+
"asyncpg==0.30.0",
19+
"attrs==25.4.0",
20+
"authlib>=1.6.0",
21+
"bcrypt==4.3.0",
22+
"cachetools==5.5.2",
23+
"certifi==2025.8.3",
24+
"cffi==1.17.1",
25+
"charset-normalizer==3.4.3",
26+
"click==8.3.0",
27+
"cloud-sql-python-connector==1.18.4",
28+
"cryptography==45.0.6",
29+
"dnspython==2.7.0",
30+
"dotenv>=0.9.9",
31+
"email-validator==2.2.0",
32+
"fastapi==0.116.1",
33+
"fastapi-pagination==0.14.3",
34+
"frozenlist==1.7.0",
35+
"geoalchemy2==0.18.0",
36+
"google-api-core==2.25.1",
37+
"google-auth==2.41.1",
38+
"google-cloud-core==2.4.3",
39+
"google-cloud-storage==3.3.0",
40+
"google-crc32c==1.7.1",
41+
"google-resumable-media==2.7.2",
42+
"googleapis-common-protos==1.70.0",
43+
"greenlet==3.2.4",
44+
"gunicorn==23.0.0",
45+
"h11==0.16.0",
46+
"httpcore==1.0.9",
47+
"httpx==0.28.1",
48+
"idna==3.10",
49+
"iniconfig==2.1.0",
50+
"itsdangerous>=2.2.0",
51+
"jinja2>=3.1.6",
52+
"mako==1.3.10",
53+
"markupsafe==3.0.2",
54+
"multidict==6.6.3",
55+
"numpy==2.3.3",
56+
"packaging==25.0",
57+
"pandas==2.3.2",
58+
"pandas-stubs==2.3.0.250703",
59+
"pg8000==1.31.4",
60+
"phonenumbers==9.0.13",
61+
"pillow==11.3.0",
62+
"pluggy==1.6.0",
63+
"pre-commit==4.3.0",
64+
"propcache==0.3.2",
65+
"proto-plus==1.26.1",
66+
"protobuf==6.32.1",
67+
"psycopg2-binary>=2.9.10",
68+
"pyasn1==0.6.1",
69+
"pyasn1-modules==0.4.2",
70+
"pycparser==2.23",
71+
"pydantic==2.11.7",
72+
"pydantic-core==2.33.2",
73+
"pygments==2.19.2",
74+
"pyjwt==2.10.1",
75+
"pyproj==3.7.2",
76+
"pyshp==2.3.1",
77+
"pytest==8.4.1",
78+
"pytest-cov>=6.2.1",
79+
"python-dateutil==2.9.0.post0",
80+
"python-jose>=3.5.0",
81+
"python-multipart==0.0.20",
82+
"pytz==2025.2",
83+
"requests==2.32.5",
84+
"rsa==4.9.1",
85+
"scramp==1.4.6",
86+
"sentry-sdk[fastapi]>=2.35.0",
87+
"shapely==2.1.1",
88+
"six==1.17.0",
89+
"sniffio==1.3.1",
90+
"sqlalchemy==2.0.43",
91+
"sqlalchemy-continuum==1.4.2",
92+
"sqlalchemy-searchable==2.1.0",
93+
"sqlalchemy-utils==0.42.0",
94+
"starlette==0.47.3",
95+
"typing-extensions==4.15.0",
96+
"typing-inspection==0.4.1",
97+
"tzdata==2025.2",
98+
"urllib3==2.5.0",
99+
"uvicorn==0.38.0",
100+
"yarl==1.20.1",
101101
]
102102
[tool.alembic]
103103

@@ -114,17 +114,16 @@ script_location = "%(here)s/alembic"
114114
# file_template = "%%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s"
115115

116116
# additional paths to be prepended to sys.path. defaults to the current working directory.
117-
prepend_sys_path = [
118-
"."
119-
]
117+
prepend_sys_path = ["."]
120118

121119
[dependency-groups]
122120
dev = [
123-
"behave>=1.3.3",
124-
"pytest>=8.4.0",
125-
"python-dotenv>=1.1.1",
126-
"requests>=2.32.5",
127-
"pyhamcrest>=2.0.3",
121+
"behave>=1.3.3",
122+
"pytest>=8.4.0",
123+
"python-dotenv>=1.1.1",
124+
"requests>=2.32.5",
125+
"pyhamcrest>=2.0.3",
126+
"faker>=25.0.0",
128127
]
129128

130129
# timezone to use when rendering the date within the migration file
@@ -183,4 +182,3 @@ dev = [
183182
# type = "exec"
184183
# executable = "%(here)s/.venv/bin/ruff"
185184
# options = "check --fix REVISION_SCRIPT_FILENAME"
186-

0 commit comments

Comments
 (0)