Skip to content

Commit a6baad3

Browse files
authored
Merge pull request #142 from GIScience/fix/package-upgrades
fix: upgrade dependencies
2 parents 42df1aa + 0d58b33 commit a6baad3

File tree

9 files changed

+93
-86
lines changed

9 files changed

+93
-86
lines changed

.github/workflows/run_tests.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
name: run tests
1+
name: CI Tests
22

3-
on: [push, pull_request]
3+
on:
4+
push:
5+
branches: [ "main" ]
6+
pull_request:
7+
branches: [ "main" ]
48

59
jobs:
610
run_tests:
7-
runs-on: ubuntu-20.04
11+
runs-on: ubuntu-22.04
812
steps:
913
- name: Check out source
1014
uses: actions/checkout@v2

docker-compose.yml

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ services:
1717
ports:
1818
- "5000:5000"
1919
depends_on:
20-
- db
20+
db:
21+
condition: service_healthy
2122
mem_limit: 28g
2223
networks:
2324
- poi_network
@@ -38,6 +39,11 @@ services:
3839
- ALLOW_IP_RANGE=0.0.0.0/0
3940
ports:
4041
- 5432:5432
42+
healthcheck:
43+
test: ["CMD-SHELL", "pg_isready", "-d", "${POSTGRES_DB}"]
44+
interval: 10s
45+
timeout: 10s
46+
retries: 10
4147
restart: on-failure
4248
networks:
4349
- poi_network
@@ -56,7 +62,8 @@ services:
5662
- ./ops_settings_docker.yml:/deploy/app/openpoiservice/server/ops_settings.yml
5763
- ./categories_docker.yml:/deploy/app/openpoiservice/server/categories/categories.yml
5864
depends_on:
59-
- db
65+
db:
66+
condition: service_healthy
6067
mem_limit: 28g
6168
networks:
6269
- poi_network
@@ -74,7 +81,8 @@ services:
7481
- ./ops_settings_docker.yml:/deploy/app/openpoiservice/server/ops_settings.yml
7582
- ./categories_docker.yml:/deploy/app/openpoiservice/server/categories/categories.yml
7683
depends_on:
77-
- db
84+
db:
85+
condition: service_healthy
7886
mem_limit: 28g
7987
networks:
8088
- poi_network
@@ -92,7 +100,8 @@ services:
92100
- ./ops_settings_docker.yml:/deploy/app/openpoiservice/server/ops_settings.yml
93101
- ./categories_docker.yml:/deploy/app/openpoiservice/server/categories/categories.yml
94102
depends_on:
95-
- db
103+
db:
104+
condition: service_healthy
96105
mem_limit: 8g
97106
networks:
98107
- poi_network

manage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def import_data():
8989

9090
logger.info(f"Starting to import OSM data ({len(osm_files)} files in batch)")
9191
logger.debug(f"Files in import batch: {osm_files}")
92-
parser.run_import(osm_files, import_log)
92+
parser.run_import(osm_files, import_log, db)
9393

9494
with open(logfile, "w") as f:
9595
json.dump(import_log, f, indent=4, sort_keys=True)

openpoiservice/server/api/views.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,9 @@ def parse_geometries(geometry):
237237
# parse geom if valid
238238
geojson_obj = check_validity(g2)
239239

240+
if geojson_obj.is_empty:
241+
raise api_exceptions.InvalidUsage(status_code=400, error_code=4007, message=str("geojson is empty"))
242+
240243
if geojson_obj.geom_type == 'Point':
241244
check_for_buffer(geometry, ops_settings['maximum_search_radius_for_points'])
242245

openpoiservice/server/db_import/parser.py

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,13 @@ def parse_file(osm_file, osm_file_index=0, update_mode=False):
7171

7272

7373
@timeit
74-
def run_import(osm_files_to_import, import_log):
74+
def run_import(osm_files_to_import, import_log, db_con):
7575
try:
7676
update_mode = False
77-
# run query on separate database connection, will conflict otherwise since parse_import runs in separate process
78-
separate_db_con = SQLAlchemy()
79-
prev_poi_count = separate_db_con.session.query(POIs.osm_type, POIs.osm_id).count()
77+
prev_poi_count = db_con.session.query(POIs.osm_type, POIs.osm_id).count()
8078
if prev_poi_count > 0:
8179
update_mode = True
8280
logger.info("Data import running in UPDATE MODE")
83-
separate_db_con.session.remove()
84-
separate_db_con.engine.dispose()
8581
except sqlalchemy.exc.ProgrammingError:
8682
logger.error("Database has not been initialized! Existing.")
8783
return
@@ -92,35 +88,29 @@ def run_import(osm_files_to_import, import_log):
9288
continue
9389

9490
if update_mode:
95-
separate_db_con = SQLAlchemy()
96-
prev_poi_count_file = separate_db_con.session.query(POIs.osm_type, POIs.osm_id).filter_by(src_index=osm_file_index).count()
91+
prev_poi_count_file = db_con.session.query(POIs.osm_type, POIs.osm_id).filter_by(src_index=osm_file_index).count()
9792
logger.info(f"Setting flags on {prev_poi_count_file} POIs.")
98-
separate_db_con.session.query(POIs).filter_by(src_index=osm_file_index).update({POIs.delflag: True})
99-
separate_db_con.session.commit()
100-
separate_db_con.session.remove()
101-
separate_db_con.engine.dispose()
93+
db_con.session.query(POIs).filter_by(src_index=osm_file_index).update({POIs.delflag: True})
94+
db_con.session.commit()
10295

10396
if parse_file(osm_file, osm_file_index, update_mode=update_mode) == 0:
10497
import_log[osm_file] = os.path.getmtime(osm_file)
10598
else:
10699
import_log[osm_file] = 0 # import failed, this file has to be inserted in the next update
107100

108101
if update_mode:
109-
delete_marked_entries()
102+
delete_marked_entries(db_con)
110103

111104
logger.info(f"Import complete.")
112105

113106

114107
@timeit
115-
def delete_marked_entries():
108+
def delete_marked_entries(db_con):
116109
logger.info(f"Updates complete, now performing delete operations...")
117-
separate_db_con = SQLAlchemy()
118-
to_delete = separate_db_con.session.query(POIs.osm_type, POIs.osm_id).filter_by(delflag=True).count()
110+
to_delete = db_con.session.query(POIs.osm_type, POIs.osm_id).filter_by(delflag=True).count()
119111
if to_delete > 0:
120112
logger.info(f"{to_delete} POIs in the database have been removed from the OSM data, deleting...")
121-
separate_db_con.session.query(POIs).filter_by(delflag=True).delete()
122-
separate_db_con.session.commit()
113+
db_con.session.query(POIs).filter_by(delflag=True).delete()
114+
db_con.session.commit()
123115
else:
124116
logger.info(f"No POIs marked for deletion, nothing to do.")
125-
separate_db_con.session.remove()
126-
separate_db_con.engine.dispose()

openpoiservice/server/utils/decorators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def wrapper(*args, **kwargs):
100100

101101
def timeit(method):
102102
def timed(*args, **kw):
103-
if len(args) == 0:
103+
if len(args) == 1:
104104
operation = "Delete operations"
105105
else:
106106
operation = "File import" if isinstance(args[0], str) else f"Batch of {len(args[0])} files"

openpoiservice/tests/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def setUp(self):
2020
db.session.remove()
2121
db.engine.dispose()
2222
test_file = os.path.join(os.getcwd() + '/osm', 'bremen-tests.osm.pbf')
23-
parser.parse_file(test_file)
23+
parser.parse_file(test_file, 0, False)
2424

2525
def tearDown(self):
2626
db.session.remove()

openpoiservice/tests/test_update.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import json
55
from base import BaseTestCase
66
from openpoiservice.server.db_import import parser
7+
from openpoiservice.server import db
78

89
request_poi_bbox = dict(
910
request='pois',
@@ -18,7 +19,7 @@ def test_import_update_mode(self):
1819

1920
print("======== Perform database update =========")
2021
updated_test_file = os.path.join(os.getcwd() + '/osm_test', 'bremen-tests-mod.osm.pbf')
21-
parser.run_import([updated_test_file], {})
22+
parser.run_import([updated_test_file], {}, db)
2223

2324
response = self.client.post('/pois', data=json.dumps(request_poi_bbox), content_type='application/json')
2425
self.assertEqual(response.status_code, 200)

requirements.txt

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,58 @@
1-
attrs==20.3.0
2-
Automat==20.2.0
3-
blinker==1.4
4-
certifi==2022.12.7
5-
cffi==1.14.4
6-
click==7.1.2
7-
constantly==15.1.0
8-
coverage==5.3.1
9-
cryptography>=3.0.0
10-
cssselect==1.1.0
11-
flasgger==0.9.5
12-
Flask==1.1.2
13-
Flask-Cors==3.0.10
14-
Flask-DebugToolbar==0.11.0
15-
Flask-SQLAlchemy==2.4.4
1+
attrs==23.2.0
2+
Automat==22.10.0
3+
blinker==1.7.0
4+
certifi==2024.2.2
5+
cffi==1.16.0
6+
click==8.1.7
7+
constantly==23.10.4
8+
coverage==7.4.1
9+
cryptography==42.0.3
10+
cssselect==1.2.0
11+
flasgger==0.9.7.1
12+
Flask==3.0.2
13+
Flask-Cors==4.0.0
14+
Flask-DebugToolbar==0.14.1
15+
Flask-SQLAlchemy==3.1.1
1616
Flask-Testing==0.8.1
17-
GeoAlchemy2==0.8.4
18-
geojson==2.5.0
19-
gevent==20.12.1
20-
greenlet==0.4.17
21-
gunicorn==20.0.4
22-
hyperlink==20.0.1
23-
idna==3.1
24-
incremental==17.5.0
25-
itemadapter>=0.1.0
26-
itemloaders>=1.0.0
27-
itsdangerous==1.1.0
28-
Jinja2==2.11.3
29-
jmespath==0.10.0
30-
jsonschema==3.2.0
31-
lxml==4.9.1
32-
MarkupSafe==1.1.1
33-
mistune==2.0.3
34-
parsel==1.6.0
35-
Protego==0.1.16
36-
psycopg2-binary==2.8.6
37-
pyasn1==0.4.8
38-
pyasn1-modules==0.2.8
39-
pycparser==2.20
40-
PyDispatcher==2.0.5
41-
PyHamcrest==2.0.2
42-
pyOpenSSL==20.0.1
43-
pyproj==3.1.0
44-
pyrsistent==0.17.3
17+
GeoAlchemy2==0.14.4
18+
geojson==3.1.0
19+
gevent==24.2.1
20+
greenlet==3.0.3
21+
gunicorn==21.2.0
22+
hyperlink==21.0.0
23+
idna==3.6
24+
incremental==22.10.0
25+
itemadapter==0.8.0
26+
itemloaders==1.1.0
27+
itsdangerous==2.1.2
28+
Jinja2==3.1.3
29+
jmespath==1.0.1
30+
jsonschema==4.21.1
31+
lxml==5.1.0
32+
MarkupSafe==2.1.5
33+
mistune==3.0.2
34+
parsel==1.8.1
35+
Protego==0.3.0
36+
psycopg2-binary==2.9.9
37+
pyasn1==0.5.1
38+
pyasn1-modules==0.3.0
39+
pycparser==2.21
40+
PyDispatcher==2.0.7
41+
PyHamcrest==2.1.0
42+
pyOpenSSL==24.0.0
43+
pyproj==3.6.1
44+
pyrsistent==0.20.0
4545
PyYAML
46-
queuelib==1.5.0
47-
Scrapy>=2.3.0
48-
service-identity==18.1.0
49-
Shapely==1.7.1
50-
six==1.15.0
51-
SQLAlchemy==1.3.22
52-
Twisted==21.2.0
53-
voluptuous==0.12.1
54-
w3lib==1.22.0
55-
Werkzeug==1.0.1
56-
zope.event==4.5.0
57-
zope.interface==5.2.0
46+
queuelib==1.6.2
47+
Scrapy==2.11.1
48+
service-identity==24.1.0
49+
Shapely==2.0.3
50+
six==1.16.0
51+
SQLAlchemy==2.0.27
52+
Twisted==23.10.0
53+
voluptuous==0.14.2
54+
w3lib==2.1.2
55+
Werkzeug==3.0.1
56+
zope.event==5.0
57+
zope.interface==6.2
5858
git+https://github.com/timmccauley/imposm-parser.git@python3

0 commit comments

Comments
 (0)