Skip to content

Commit 5566301

Browse files
authored
Upgrade SQLAlchemy (#101)
* Upgrade SQLAlchemy Remove sqlalchemy-dst, update SQLAlchemy. * Update to compose v2 * Update ci.yml * Update ci.yml
1 parent be91cbd commit 5566301

5 files changed

Lines changed: 77 additions & 43 deletions

File tree

.github/workflows/ci.yml

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,16 @@ jobs:
2020
continue-on-error: true
2121

2222
- name: Pull docker images
23-
run: docker-compose -f test/docker-compose.yml pull
24-
25-
- uses: satackey/action-docker-layer-caching@v0.0.11
26-
continue-on-error: true
27-
23+
run: docker compose -f test/docker-compose.yml pull
24+
2825
- name: Build the Docker image
29-
run: docker-compose -f test/docker-compose.yml -p brainzutils_test build
26+
run: docker compose -f test/docker-compose.yml -p brainzutils_test build
3027

3128
- name: Bring up dependencies
32-
run: docker-compose -f test/docker-compose.yml -p brainzutils_test up -d redis musicbrainz_db
29+
run: docker compose -f test/docker-compose.yml -p brainzutils_test up -d redis musicbrainz_db
3330

3431
- name: Run tests
35-
run: docker-compose -f test/docker-compose.yml -p brainzutils_test run --rm test
36-
37-
- name: Publish Unit Test Results
38-
uses: EnricoMi/publish-unit-test-result-action@v1.11
39-
if: ${{ always() }}
40-
with:
41-
files: reports/test_results.xml
42-
32+
run: docker compose -f test/docker-compose.yml -p brainzutils_test run --rm test
33+
4334
- name: Bring down containers
44-
run: docker-compose -f test/docker-compose.yml -p brainzutils_test down
35+
run: docker compose -f test/docker-compose.yml -p brainzutils_test down

brainzutils/musicbrainz_db/serialize.py

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
from brainzutils.musicbrainz_db.models import ENTITY_MODELS
22
from mbdata.utils.models import get_link_target
3-
from sqlalchemy_dst import row2dict
43

54

65
def serialize_begin_end(entity):
76
begin_date = entity.begin_date
87
end_date = entity.end_date
98
begin = []
109
end = []
11-
if begin_date.year:
10+
if begin_date and begin_date.year:
1211
begin.append(f'{begin_date.year:04}')
1312
if begin_date.month:
1413
begin.append(f'{begin_date.month:02}')
1514
if begin_date.day:
1615
begin.append(f'{begin_date.day:02}')
17-
if end_date.year:
16+
17+
if end_date and end_date.year:
1818
end.append(f'{end_date.year:04}')
1919
if end_date.month:
2020
end.append(f'{end_date.month:02}')
@@ -33,7 +33,7 @@ def serialize_areas(area, includes=None):
3333
if includes is None:
3434
includes = {}
3535
data = {
36-
'mbid': area.gid,
36+
'mbid': str(area.gid),
3737
'name': area.name,
3838
}
3939

@@ -68,7 +68,7 @@ def serialize_relationships(data, source_obj, relationship_objs):
6868
for obj in relationship_objs[relation]:
6969
link_data = {
7070
'type': obj.link.link_type.name,
71-
'type-id': obj.link.link_type.gid,
71+
'type-id': str(obj.link.link_type.gid),
7272
'begin-year': obj.link.begin_date_year,
7373
'end-year': obj.link.end_date_year,
7474
}
@@ -84,7 +84,7 @@ def serialize_artist_credit(artist_credit):
8484
data = []
8585
for artist_credit_name in artist_credit.artists:
8686
artist_credit_data = {
87-
'mbid': artist_credit_name.artist.gid,
87+
'mbid': str(artist_credit_name.artist.gid),
8888
'name': artist_credit_name.artist.name,
8989
}
9090

@@ -104,7 +104,7 @@ def serialize_recording(recording, includes=None):
104104
if includes is None:
105105
includes = {}
106106
data = {
107-
'mbid': recording.gid,
107+
'mbid': str(recording.gid),
108108
'name': recording.name,
109109
}
110110

@@ -137,7 +137,7 @@ def serialize_places(place, includes=None):
137137
if includes is None:
138138
includes = {}
139139
data = {
140-
'mbid': place.gid,
140+
'mbid': str(place.gid),
141141
'name': place.name,
142142
'address': place.address,
143143
}
@@ -170,7 +170,7 @@ def serialize_labels(label, includes=None):
170170
if includes is None:
171171
includes = {}
172172
data = {
173-
'mbid': label.gid,
173+
'mbid': str(label.gid),
174174
'name': label.name,
175175
}
176176

@@ -200,7 +200,7 @@ def serialize_artists(artist, includes=None):
200200
if includes is None:
201201
includes = {}
202202
data = {
203-
'mbid': artist.gid,
203+
'mbid': str(artist.gid),
204204
'name': artist.name,
205205
'sort_name': artist.sort_name,
206206
}
@@ -239,7 +239,7 @@ def serialize_release_groups(release_group, includes=None):
239239
includes = {}
240240

241241
data = {
242-
'mbid': release_group.gid,
242+
'mbid': str(release_group.gid),
243243
'title': release_group.name,
244244
}
245245

@@ -291,12 +291,12 @@ def serialize_medium(medium, includes=None):
291291

292292
def serialize_track(track):
293293
return {
294-
'mbid': track.gid,
294+
'mbid': str(track.gid),
295295
'name': track.name,
296296
'number': track.number,
297297
'position': track.position,
298298
'length': track.length,
299-
'recording_id': track.recording.gid,
299+
'recording_id': str(track.recording.gid),
300300
'recording_title': track.recording.name,
301301
'artist-credit': [serialize_artist_credit_names(artist_credit_name)
302302
for artist_credit_name in track.recording.artist_credit.artists],
@@ -309,7 +309,7 @@ def serialize_releases(release, includes=None):
309309
includes = {}
310310

311311
data = {
312-
'mbid': release.gid,
312+
'mbid': str(release.gid),
313313
'name': release.name,
314314
}
315315

@@ -340,7 +340,7 @@ def serialize_events(event, includes=None):
340340
if includes is None:
341341
includes = {}
342342
data = {
343-
'mbid': event.gid,
343+
'mbid': str(event.gid),
344344
'name': event.name,
345345
}
346346

@@ -366,7 +366,7 @@ def serialize_url(url, includes=None):
366366
if includes is None:
367367
includes = {}
368368
data = {
369-
'mbid': url.gid,
369+
'mbid': str(url.gid),
370370
'url': url.url,
371371
}
372372

@@ -379,7 +379,7 @@ def serialize_works(work, includes=None):
379379
if includes is None:
380380
includes = {}
381381
data = {
382-
'mbid': work.gid,
382+
'mbid': str(work.gid),
383383
'name': work.name,
384384
}
385385

@@ -399,10 +399,25 @@ def serialize_works(work, includes=None):
399399

400400

401401
def serialize_editor(editor, includes=None):
402-
data = row2dict(editor, exclude_pk=True, exclude={'password', 'ha1'})
403-
404402
# TODO: Add includes to data here (BU-18)
405-
403+
data = {
404+
"id": editor.id,
405+
"name": editor.name,
406+
"privs": editor.privs,
407+
"email": editor.email,
408+
"website": editor.website,
409+
"bio": editor.bio,
410+
"member_since": editor.member_since,
411+
"email_confirm_date": editor.email_confirm_date,
412+
"last_login_date": editor.last_login_date,
413+
"last_updated": editor.last_updated,
414+
"birth_date": editor.birth_date,
415+
"deleted": editor.deleted,
416+
"gender": editor.gender,
417+
"area": None
418+
}
419+
if editor.area:
420+
data["area"] = serialize_areas(editor.area)
406421
return data
407422

408423

@@ -411,7 +426,7 @@ def serialize_series(series, includes=None):
411426
includes = {}
412427

413428
data = {
414-
'mbid': series.gid,
429+
'mbid': str(series.gid),
415430
'name': series.name,
416431
}
417432

brainzutils/musicbrainz_db/tests/test_serialize.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from datetime import datetime, date
2+
13
from brainzutils.musicbrainz_db.serialize import serialize_recording, serialize_artist_credit, serialize_editor
24
from brainzutils.musicbrainz_db.test_data import recording_numb_encore_explicit, artistcredit_jay_z_linkin_park, \
35
editor_2
@@ -67,3 +69,22 @@ def test_serialize_editor(self):
6769
editor = serialize_editor(editor_2)
6870
self.assertNotIn("password", editor)
6971
self.assertNotIn("ha1", editor)
72+
self.assertEqual(editor, {
73+
'id': 2324,
74+
'name': 'Editor 2',
75+
'privs': 3,
76+
'email': 'editor@example.com',
77+
'website': 'example.com',
78+
'bio': 'Random\neditor',
79+
'member_since': datetime(2014, 12, 1, 14, 6, 42, 321443),
80+
'email_confirm_date': datetime(2014, 12, 1, 14, 6, 42, 321443),
81+
'last_login_date': datetime(2014, 12, 1, 14, 6, 42, 321443),
82+
'last_updated': datetime(2014, 12, 1, 14, 6, 42, 321443),
83+
'birth_date': date(1999, 1, 1),
84+
'deleted': False,
85+
'gender': None,
86+
'area': {
87+
"mbid": "4479c385-74d8-4a2b-bdab-f48d1e6969ba",
88+
"name": "Hämeenlinna"
89+
}
90+
})

requirements.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@ Jinja2>=3.0
33
itsdangerous>=2.0
44
click>=8.0
55
Werkzeug>=2.0
6-
Flask-DebugToolbar>=0.13.1
6+
Flask-DebugToolbar@git+https://github.com/amCap1712/flask-debugtoolbar.git@f42bb238cd3fbc79c51b93c341164c2be820025e
77
Flask-UUID>=0.2
88
sentry-sdk[flask]>=1.5.8
99
certifi
1010
redis>=4.2.2
1111
msgpack==0.5.6
1212
requests>=2.27.1
13-
SQLAlchemy>=1.3.16,<2.0
13+
SQLAlchemy>=2.0
1414
mbdata@git+https://github.com/acoustid/mbdata.git@v29.0.0
15-
sqlalchemy-dst>=1.0.1
1615
importlib-metadata>=3.10.0;python_version<'3.10'

test.sh

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,18 @@ fi
1919
COMPOSE_FILE_LOC=test/docker-compose.yml
2020
COMPOSE_PROJECT_NAME=brainzutils_test
2121

22+
echo "Checking docker compose version"
23+
if docker compose version &> /dev/null; then
24+
DOCKER_COMPOSE_CMD="docker compose"
25+
else
26+
DOCKER_COMPOSE_CMD="docker-compose"
27+
fi
28+
2229
function invoke_docker_compose {
23-
docker-compose -f $COMPOSE_FILE_LOC \
24-
-p $COMPOSE_PROJECT_NAME \
25-
"$@"
30+
$DOCKER_COMPOSE_CMD \
31+
-f $COMPOSE_FILE_LOC \
32+
-p $COMPOSE_PROJECT_NAME \
33+
"$@"
2634
}
2735

2836
function docker_compose_run {

0 commit comments

Comments
 (0)