Skip to content

Commit 3155823

Browse files
authored
⬆️ prune dependencies of simcore-sdk package and downstream services (ITISFoundation#2664)
- pruned simcore-sdk package - refactored tests - added logs in setup
1 parent a357669 commit 3155823

File tree

31 files changed

+351
-393
lines changed

31 files changed

+351
-393
lines changed

packages/service-library/src/servicelib/aiohttp/application_setup.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import functools
22
import inspect
33
import logging
4+
from datetime import datetime
45
from enum import Enum
56
from typing import Any, Callable, Dict, List, Optional, Protocol
67

@@ -120,8 +121,13 @@ def setup_metadata() -> Dict:
120121
@functools.wraps(setup_func)
121122
def _wrapper(app: web.Application, *args, **kargs) -> bool:
122123
# pre-setup
123-
logger.debug(
124-
"Setting up '%s' [%s; %s] ... ", module_name, category.name, depends
124+
head_msg = f"Setup of {module_name}"
125+
started = datetime.now()
126+
logger.info(
127+
"%s (%s, %s) started ... ",
128+
head_msg,
129+
f"{category.name=}",
130+
f"{depends}",
125131
)
126132

127133
if APP_SETUP_KEY not in app:
@@ -179,8 +185,12 @@ def _wrapper(app: web.Application, *args, **kargs) -> bool:
179185
logger.warning("Skipping '%s' setup: %s", module_name, exc.reason)
180186
completed = False
181187

182-
logger.debug(
183-
"'%s' setup %s", module_name, "completed" if completed else "skipped"
188+
elapsed = datetime.now() - started
189+
logger.info(
190+
"%s %s [Elapsed: %3.1f secs]",
191+
head_msg,
192+
"completed" if completed else "skipped",
193+
elapsed.total_seconds(),
184194
)
185195
return completed
186196

packages/simcore-sdk/requirements/_base.in

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,14 @@
33
#
44
--constraint ../../../requirements/constraints.txt
55
--requirement ../../../packages/postgres-database/requirements/_base.in
6-
--requirement ../../../packages/postgres-database/requirements/_migration.in
76
--requirement ../../../packages/service-library/requirements/_base.in
87
--requirement ../../../packages/models-library/requirements/_base.in
98

109
aiofiles
1110
aiohttp
1211
aiopg[sa]
13-
networkx
14-
psycopg2-binary
12+
packaging
1513
pydantic[email]
1614
tenacity
1715
tqdm
1816
trafaret-config
19-
20-
attrs
21-
packaging

packages/simcore-sdk/requirements/_base.txt

Lines changed: 5 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,19 @@ aiopg==1.3.3
2020
aiosignal==1.2.0
2121
# via aiohttp
2222
alembic==1.7.5
23-
# via
24-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
25-
# -r requirements/../../../packages/postgres-database/requirements/_base.in
26-
# -r requirements/../../../packages/postgres-database/requirements/_migration.in
23+
# via -r requirements/../../../packages/postgres-database/requirements/_base.in
2724
async-timeout==4.0.1
2825
# via
2926
# aiohttp
3027
# aiopg
3128
attrs==20.3.0
3229
# via
3330
# -c requirements/../../../packages/service-library/requirements/./constraints.txt
34-
# -r requirements/_base.in
3531
# aiohttp
36-
certifi==2021.10.8
37-
# via requests
3832
charset-normalizer==2.0.8
39-
# via
40-
# aiohttp
41-
# requests
42-
click==8.0.3
43-
# via -r requirements/../../../packages/postgres-database/requirements/_migration.in
33+
# via aiohttp
4434
dnspython==2.1.0
4535
# via email-validator
46-
docker==5.0.3
47-
# via -r requirements/../../../packages/postgres-database/requirements/_migration.in
4836
email-validator==1.1.3
4937
# via pydantic
5038
frozenlist==1.2.0
@@ -53,46 +41,32 @@ frozenlist==1.2.0
5341
# aiosignal
5442
idna==2.10
5543
# via
56-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
5744
# -c requirements/../../../packages/service-library/requirements/./constraints.txt
5845
# -r requirements/../../../packages/models-library/requirements/_base.in
5946
# -r requirements/../../../packages/postgres-database/requirements/_base.in
6047
# email-validator
61-
# requests
6248
# yarl
6349
importlib-metadata==4.8.2
64-
# via
65-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
66-
# alembic
50+
# via alembic
6751
importlib-resources==5.4.0 ; python_version < "3.9"
6852
# via
6953
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
7054
# -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt
71-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
7255
# -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt
7356
# -c requirements/../../../requirements/constraints.txt
7457
# alembic
7558
mako==1.1.6
76-
# via
77-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
78-
# alembic
59+
# via alembic
7960
markupsafe==2.0.1
80-
# via
81-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
82-
# mako
61+
# via mako
8362
multidict==5.2.0
8463
# via
85-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
8664
# aiohttp
8765
# yarl
88-
networkx==2.6.3
89-
# via -r requirements/_base.in
9066
packaging==21.3
9167
# via -r requirements/_base.in
9268
psycopg2-binary==2.9.2
9369
# via
94-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
95-
# -r requirements/_base.in
9670
# aiopg
9771
# sqlalchemy
9872
pydantic==1.8.2
@@ -117,23 +91,17 @@ pyyaml==5.4.1
11791
# -c requirements/../../../requirements/constraints.txt
11892
# -r requirements/../../../packages/service-library/requirements/_base.in
11993
# trafaret-config
120-
requests==2.26.0
121-
# via docker
122-
six==1.16.0
123-
# via websocket-client
12494
sqlalchemy==1.3.24
12595
# via
12696
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
12797
# -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt
128-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
12998
# -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt
13099
# -c requirements/../../../requirements/constraints.txt
131100
# -r requirements/../../../packages/postgres-database/requirements/_base.in
132101
# aiopg
133102
# alembic
134103
tenacity==8.0.1
135104
# via
136-
# -r requirements/../../../packages/postgres-database/requirements/_migration.in
137105
# -r requirements/../../../packages/service-library/requirements/_base.in
138106
# -r requirements/_base.in
139107
tqdm==4.62.3
@@ -146,25 +114,11 @@ typing-extensions==4.0.0
146114
# via
147115
# async-timeout
148116
# pydantic
149-
urllib3==1.26.7
150-
# via
151-
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
152-
# -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt
153-
# -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt
154-
# -c requirements/../../../requirements/constraints.txt
155-
# -r requirements/../../../packages/postgres-database/requirements/_migration.in
156-
# requests
157-
websocket-client==0.59.0
158-
# via
159-
# -r requirements/../../../packages/postgres-database/requirements/_migration.in
160-
# docker
161117
yarl==1.7.2
162118
# via
163-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
164119
# -r requirements/../../../packages/postgres-database/requirements/_base.in
165120
# aiohttp
166121
zipp==3.6.0
167122
# via
168-
# -c requirements/../../../packages/postgres-database/requirements/_base.txt
169123
# importlib-metadata
170124
# importlib-resources

packages/simcore-sdk/requirements/_test.in

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@ pytest-xdist
2121
pytest-lazy-fixture
2222

2323
# mockups/fixtures
24-
alembic
2524
aioresponses
26-
requests
25+
alembic
26+
click
2727
docker
28-
python-dotenv
2928
faker
3029
minio
30+
python-dotenv
31+
requests
3132

3233
# tools for CI
3334
pylint

packages/simcore-sdk/requirements/_test.txt

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,15 @@ attrs==20.3.0
3333
# pytest
3434
certifi==2021.10.8
3535
# via
36-
# -c requirements/_base.txt
3736
# minio
3837
# requests
3938
charset-normalizer==2.0.8
4039
# via
4140
# -c requirements/_base.txt
4241
# aiohttp
4342
# requests
43+
click==8.0.3
44+
# via -r requirements/_test.in
4445
coverage==6.1.2
4546
# via
4647
# -r requirements/_test.in
@@ -49,9 +50,7 @@ coverage==6.1.2
4950
coveralls==3.3.1
5051
# via -r requirements/_test.in
5152
docker==5.0.3
52-
# via
53-
# -c requirements/_base.txt
54-
# -r requirements/_test.in
53+
# via -r requirements/_test.in
5554
docopt==0.6.2
5655
# via coveralls
5756
execnet==1.9.0
@@ -167,15 +166,11 @@ python-dotenv==0.19.2
167166
# via -r requirements/_test.in
168167
requests==2.26.0
169168
# via
170-
# -c requirements/_base.txt
171169
# -r requirements/_test.in
172170
# coveralls
173171
# docker
174172
six==1.16.0
175-
# via
176-
# -c requirements/_base.txt
177-
# python-dateutil
178-
# websocket-client
173+
# via python-dateutil
179174
sqlalchemy==1.3.24
180175
# via
181176
# -c requirements/../../../requirements/constraints.txt
@@ -200,13 +195,10 @@ typing-extensions==4.0.0
200195
urllib3==1.26.7
201196
# via
202197
# -c requirements/../../../requirements/constraints.txt
203-
# -c requirements/_base.txt
204198
# minio
205199
# requests
206-
websocket-client==0.59.0
207-
# via
208-
# -c requirements/_base.txt
209-
# docker
200+
websocket-client==1.2.1
201+
# via docker
210202
wrapt==1.13.3
211203
# via astroid
212204
yarl==1.7.2

packages/simcore-sdk/requirements/_tools.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ cfgv==3.3.1
1414
# via pre-commit
1515
click==8.0.3
1616
# via
17-
# -c requirements/_base.txt
17+
# -c requirements/_test.txt
1818
# black
1919
# pip-tools
2020
distlib==0.3.3
@@ -53,7 +53,6 @@ regex==2021.11.10
5353
# via black
5454
six==1.16.0
5555
# via
56-
# -c requirements/_base.txt
5756
# -c requirements/_test.txt
5857
# virtualenv
5958
toml==0.10.2

packages/simcore-sdk/requirements/ci.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
--requirement _test.txt
1212

1313
# installs this repo's packages
14-
../postgres-database/[migration]
14+
../postgres-database
1515
../pytest-simcore/
1616
../models-library/
1717

packages/simcore-sdk/requirements/dev.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
# installs this repo's packages
1515
--editable ../pytest-simcore/
1616

17-
--editable ../postgres-database/[migration]
17+
--editable ../postgres-database
1818
--editable ../models-library/
1919

2020
# FIXME: these dependencies should be removed

packages/simcore-sdk/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def read_reqs(reqs_path: Path):
1515

1616
install_requirements = read_reqs(here / "requirements" / "_base.in")
1717
test_requirements = read_reqs(here / "requirements" / "_test.txt") + [
18-
"simcore-postgres-database[migration]",
18+
"simcore-postgres-database",
1919
"simcore-service-library",
2020
"simcore-models-library",
2121
]
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
2+
# Steps to prune a library and all services downstream
3+
4+
5+
Libraries evolve and some of the dependencies are not anymore in use but remain listed in their requirements file. These are the steps to prune unused dependencies in a library and all services downstream.
6+
7+
For the sake of simplicity, let's assume we want to prune requirements of the library ``simcore-sdk`` (it should be analogous for any other package in the repository).
8+
9+
10+
First we need to find which dependencies are not anymore used. For that we run [pipreqs](https://github.com/bndr/pipreqs) which will create a list of requirements that the target library is importing. Then, we can compare against the base requirements ``simcore-sdk/requirements/_base.in`` to figure out which have to be pruned from the list. Once the ``_base.in`` has been modified, we can full upgrade the requirements.
11+
12+
13+
1. ``pip install pipreqs``
14+
1. find dependencies in use: ``pipreqs packages/simcore-sdk/src/simcore_sdk`` produces a ``requirements.txt`` file
15+
1. compare this file with ``packages/simcore-sdk/requirements/_base.in`` and remove unused libraries.
16+
1. dependencies with other libraries in the repo under ``packages`` has to be reviewed manually
17+
1. make full upgrade of reqs : ``make touch reqs``
18+
19+
20+
At this point ``simcore-sdk``'s requirement are up-to-date. Now, we need to propagate the changes to the services and libraries that include this library. Notice that during this update, *we should not update any other dependencies other than those added by ``simcore-sdk``*.
21+
22+
23+
6. Find packages that use the library : check for ``/packages/simcore-sdk/requirements/_base.in`` in all the repo including only ``*.in`` files:
24+
```bash
25+
cd osparc-simcore
26+
grep --include=\*.in -rnw -e 'packages/simcore-sdk/requirements/_base.in' .
27+
```
28+
7. Go to those services ``requirements`` folder
29+
1. We want to **selectively upgrade** the dependencies pulled by the upstream library in this service. We can do that by selective upgrade each of the libraries that ``simcore-sdk`` lists. Checking ``/packages/simcore-sdk/requirements/_base.in`` , we select e.g. ``aiohttp`` and proceed with a selective upgrade using our tooling:
30+
```
31+
make touch
32+
make reqs upgrade=aiohttp
33+
```
34+
9. Check changes in the ``requirements`` folder. It should have only a partial upgrade
35+
36+
37+
38+
----
39+
40+
NOTE: An example can be found in PR [#2664](https://github.com/ITISFoundation/osparc-simcore/pull/2664)

0 commit comments

Comments
 (0)