Skip to content

Commit 98e83d9

Browse files
Merge pull request #395 from hotosm/feature/galaxy
Feature/galaxy
2 parents d605304 + 7b46d38 commit 98e83d9

File tree

18 files changed

+269
-84
lines changed

18 files changed

+269
-84
lines changed

.github/workflows/config.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: Unit Test
2+
on:
3+
push:
4+
branches:
5+
- master
6+
pull_request:
7+
branches:
8+
- master
9+
10+
jobs:
11+
deploy:
12+
runs-on:
13+
ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v2
16+
- name: Set up Python 3
17+
uses: actions/setup-python@v1
18+
with:
19+
python-version: 3.8.13
20+
21+
- name: Install gdal
22+
run: |
23+
sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable
24+
sudo apt-get update
25+
sudo apt-get install libgdal-dev osmctools gdal-bin libspatialindex-dev
26+
27+
- name: Install Dependencies
28+
run: |
29+
export CPLUS_INCLUDE_PATH=/usr/include/gdal
30+
export C_INCLUDE_PATH=/usr/include/gdal
31+
pip install -r requirements-dev.txt
32+
- name: Run Tests
33+
run: |
34+
make test

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,6 @@ celerybeat-schedule
8383
core/settings/secret.py
8484
.env
8585
node_modules
86-
ui/static/ui/js/bundle.js
86+
ui/static/ui/js/*
8787
*.js.map
8888
secrets

api/views.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,11 @@
5252
renderer_classes = (JSONRenderer, HOTExportApiRenderer)
5353

5454
DIR = os.path.dirname(os.path.abspath(__file__))
55-
idx = index.Rtree(os.path.join(DIR,'reverse_geocode'))
56-
55+
try:
56+
idx = index.Rtree(os.path.join(DIR,'reverse_geocode'))
57+
except:
58+
pass
59+
# raise ImportError("Can not read indexes")
5760
def bbox_to_geom(s):
5861
try:
5962
return GEOSGeometry(Polygon.from_bbox(s.split(',')), srid=4326)

core/settings/project.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@
6666

6767
# url to overpass api endpoint
6868
OVERPASS_API_URL = os.getenv('OVERPASS_API_URL', 'http://overpass-api.de/api/')
69+
70+
#url to galaxy api endpoint
71+
GALAXY_API_URL = os.getenv('GALAXY_API_URL', 'https://galaxy-api.hotosm.org/v1/raw-data/current-snapshot/')
72+
6973
GENERATE_MWM = os.getenv('GENERATE_MWM','/usr/local/bin/generate_mwm.sh')
7074
GENERATOR_TOOL = os.getenv('GENERATOR_TOOL','/usr/local/bin/generator_tool')
7175
PLANET_FILE = os.getenv('PLANET_FILE','')
@@ -214,7 +218,6 @@
214218

215219
MATOMO_URL = os.getenv('MATOMO_URL')
216220
MATOMO_SITEID = os.getenv('MATOMO_SITEID')
217-
218221
HDX_URL_PREFIX = Configuration.create(
219222
hdx_site=os.getenv('HDX_SITE', 'demo'),
220223
hdx_key=os.getenv('HDX_API_KEY'),

doc/setup-development.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ python manage.py migrate
6868
```bash
6969
cd ui/
7070
yarn install
71+
yarn run dist # for production
7172
yarn start # will watch for changes and re-compile as necessary
7273
```
7374

@@ -110,6 +111,9 @@ Most of these environment variables have reasonable default settings.
110111
* `OSMAND_MAP_CREATOR_DIR` path to directory where OsmAndMapCreator is installed
111112
* `GARMIN_CONFIG`, `GARMIN_MKGMAP` absolute paths to garmin JARs
112113
* `OVERPASS_API_URL` url of Overpass api endpoint
114+
115+
* `GALAXY_API_URL` url of Galaxy api endpoint
116+
113117
* `DATABASE_URL` Database URL. Defaults to `postgres:///exports`
114118
* `DEBUG` Whether to enable debug mode. Defaults to `False` (production).
115119
* `DJANGO_ENV` Django environment. Set to `development` to enable development tools and email logging to console.

hdx_exports/hdx_export_set.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,15 @@ def hdx_note(self, theme):
8787

8888
def datasets(self,is_private,subnational,data_update_frequency,locations,files,public_dir):
8989
HDX_FORMATS = {
90+
'GeoJSON':'geojson',
9091
'shp': 'SHP',
9192
'geopackage': 'Geopackage',
9293
'garmin_img': 'Garmin IMG',
9394
'kml': 'KML'
9495
}
9596

9697
HDX_DESCRIPTIONS = {
98+
'GeoJSON': 'geojson',
9799
'shp':'ESRI Shapefile',
98100
'geopackage':'Geopackage, SQLite compatible',
99101
'garmin_img':'.IMG for Garmin GPS Devices (All OSM layers for area)',
@@ -134,14 +136,24 @@ def datasets(self,is_private,subnational,data_update_frequency,locations,files,p
134136

135137
resources = []
136138
for f in files:
137-
if 'theme' not in f.extra or f.extra['theme'] == theme.name:
138-
file_name = os.path.basename(f.parts[0]) # only one part: the zip file
139-
resources.append({
140-
'name': file_name,
141-
'format': HDX_FORMATS[f.output_name],
142-
'description': HDX_DESCRIPTIONS[f.output_name],
143-
'url': os.path.join(public_dir,file_name)
144-
})
139+
if isinstance(f, dict): # it is coming from galaxy
140+
if f['theme'] == theme.name:
141+
file_name = f['file_name'] # only one part: the zip file
142+
resources.append({
143+
'name': file_name,
144+
'format': HDX_FORMATS[f['output_name']],
145+
'description': HDX_DESCRIPTIONS[f['output_name']],
146+
'url': f['download_url']
147+
})
148+
else:
149+
if 'theme' not in f.extra or f.extra['theme'] == theme.name:
150+
file_name = os.path.basename(f.parts[0]) # only one part: the zip file
151+
resources.append({
152+
'name': file_name,
153+
'format': HDX_FORMATS[f.output_name],
154+
'description': HDX_DESCRIPTIONS[f.output_name],
155+
'url': os.path.join(public_dir,file_name)
156+
})
145157
# stable sort, but put shapefiles first for Geopreview to pick up correctly
146158
resources.sort(key=lambda x: 0 if x['format'] == 'zipped shapefile' else 1)
147159
dataset.add_update_resources(resources)

jobs/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def validate_export_formats(value):
8383
)
8484

8585
for format_name in value:
86-
if format_name not in ['shp','geopackage','garmin_img','kml','mwm','osmand_obf','osm_pbf','osm_xml','bundle','mbtiles','full_pbf']:
86+
if format_name not in ['shp','geojson','geopackage','garmin_img','kml','mwm','osmand_obf','osm_pbf','osm_xml','bundle','mbtiles','full_pbf']:
8787
raise ValidationError(
8888
"Bad format name: %(format_name)s",
8989
params={'format_name': format_name},

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@ boto3~=1.9.238 # needed for cloudwatch
2525
rasterio~=1.0.25
2626
osm-export-tool==0.0.25
2727
rtree==0.9.1
28+
validators

tasks/models.py

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
from django.contrib.gis.admin import GeoModelAdmin
1515
from django.utils.safestring import mark_safe
1616
from django.core.urlresolvers import reverse
17+
import validators
18+
import requests
19+
1720

1821
class ExportRun(models.Model):
1922
"""
@@ -87,17 +90,37 @@ def duration(self):
8790
@property
8891
def download_urls(self):
8992
def fdownload(fname):
90-
try:
91-
filesize_bytes = os.path.getsize(os.path.join(settings.EXPORT_DOWNLOAD_ROOT, str(self.run.uid), fname).encode('utf-8'))
92-
except Exception:
93-
filesize_bytes = 0
94-
95-
download_url = os.path.join(settings.EXPORT_MEDIA_ROOT,str(self.run.uid), fname)
96-
return {
93+
valid=validators.url(fname)
94+
if valid==True:
95+
download_url = fname
96+
absolute_download_url=download_url
97+
try :
98+
value = download_url.split('/')
99+
name=value[-1]
100+
split_name=name.split('_')
101+
download_name=f"{split_name[0]}_{split_name[-1]}" # getting human redable name ignoring unique id
102+
fname=download_name
103+
except:
104+
fname=f"""{self.run.job.name}_{self.name}.zip"""
105+
try:
106+
with open(os.path.join(settings.EXPORT_DOWNLOAD_ROOT, str(self.run.uid),f"{name}_size.txt")) as f :
107+
size=f.readline()
108+
filesize_bytes=int(size)
109+
except:
110+
filesize_bytes=0
111+
112+
else:
113+
try:
114+
filesize_bytes = os.path.getsize(os.path.join(settings.EXPORT_DOWNLOAD_ROOT, str(self.run.uid), fname).encode('utf-8'))
115+
except Exception:
116+
filesize_bytes = 0
117+
download_url = os.path.join(settings.EXPORT_MEDIA_ROOT,str(self.run.uid), fname)
118+
absolute_download_url=settings.HOSTNAME + download_url
119+
return {
97120
"filename":fname,
98121
"filesize_bytes": filesize_bytes,
99122
"download_url":download_url,
100-
"absolute_download_url":settings.HOSTNAME + download_url
123+
"absolute_download_url":absolute_download_url
101124
}
102125
return map(fdownload, self.filenames)
103126

0 commit comments

Comments
 (0)