Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
Conflicts:
	VERSION
	conf/buildout.cfg
	docs/changelog.rst
	docs/conf.py
	geotrek/common/parsers.py
	geotrek/common/templates/common/parser_report.txt
	geotrek/trekking/locale/fr/LC_MESSAGES/django.po
	install.sh
	setup.py
  • Loading branch information
gutard committed Jul 20, 2015
2 parents ec1ffd8 + ea7be14 commit d0eefe2
Show file tree
Hide file tree
Showing 124 changed files with 3,908 additions and 1,026 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,4 @@ local/
bootstrap.py
/.buildout
geotrek/settings/custom.py
/parsers.py
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.35.1
2.0.0.dev0
5 changes: 5 additions & 0 deletions bulkimport/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
try:
import importlib
importlib.import_module('parsers')
except ImportError:
pass
2 changes: 2 additions & 0 deletions conf/buildout-dev.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ eggs +=
pydot
pyparsing

unzip=true

[bpython]
recipe = zc.recipe.egg:scripts
eggs = ${buildout:eggs}
Expand Down
10 changes: 10 additions & 0 deletions conf/buildout-prod.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,15 @@ errorlog = ${django:deployroot}/var/log/${django:project}.log
input = ${buildout:directory}/conf/gunicorn.conf.in
output = ${django:deployroot}/etc/gunicorn-${django:project}_api.conf

[gunicorn-celery-conf]
recipe = collective.recipe.genshi
# workers and timeout are set ``conf/settings-default.cfg`` and can be overidden
bind = unix:${django:deployroot}/var/run/gunicorn-${django:project}_celery.sock
pidfile = ${django:deployroot}/var/run/gunicorn-${django:project}_celery.pid
errorlog = ${django:deployroot}/var/log/${django:project}.log
input = ${buildout:directory}/conf/gunicorn.conf.in
output = ${django:deployroot}/etc/gunicorn-${django:project}_celery.conf

[nginx-conf]
recipe = collective.recipe.genshi
port = 80
Expand Down Expand Up @@ -99,6 +108,7 @@ geotrek-programs =
# Priority means order of start/shutdown
20 ${django:project} (stdout_logfile=${django:deployroot}/var/log/${django:project}.log stderr_logfile=${django:deployroot}/var/log/${django:project}.log) ${django:deployroot}/bin/django [run_gunicorn --config=${gunicorn-app-conf:output}] ${django:deployroot}/etc true
20 ${django:project}_api (stdout_logfile=${django:deployroot}/var/log/${django:project}.log stderr_logfile=${django:deployroot}/var/log/${django:project}.log) ${django:deployroot}/bin/django [run_gunicorn --config=${gunicorn-api-conf:output}] ${django:deployroot}/etc true
20 ${django:project}_celery (stdout_logfile=${django:deployroot}/var/log/${django:project}_celery.log stderr_logfile=${django:deployroot}/var/log/${django:project}_celery.log) ${django:deployroot}/bin/django [celery worker] ${django:deployroot}/etc true
programs =
${supervisor:geotrek-programs}

Expand Down
9 changes: 7 additions & 2 deletions conf/buildout.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ zc.buildout = 1.7.1
# From Geotrek
#
Django = 1.6.5
mapentity = 1.16.0
mapentity = 2.4.1
GDAL=1.10.0
tif2geojson=0.1.3
django-extended-choices = 0.3.0
Expand All @@ -96,7 +96,7 @@ geojson = 1.0.7
appy = 0.9.2
paperclip = 0.4.1
convertit = 1.1.5
django-leaflet = 0.15.0
django-leaflet = 0.16.0
django-geojson = 2.6.0
django-appypod = 0.0.2
django-screamshot = 0.4.0
Expand All @@ -121,6 +121,11 @@ djangorestframework = 2.4.2
djangorestframework-gis = 0.7
django-embed-video = 0.11
xlrd = 0.9.3
landez = 2.3.0
bpython = 0.14
cffi = 1.1.2
WeasyPrint = 0.23
django-weasyprint = 0.1

[sources]
#
Expand Down
2 changes: 1 addition & 1 deletion conf/tools/check_ign_key.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

referer=$1
key=$2
layers_jpeg="GEOGRAPHICALGRIDSYSTEMS.MAPS GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.CLASSIQUE ORTHOIMAGERY.ORTHOPHOTOS"
layers_jpeg="GEOGRAPHICALGRIDSYSTEMS.MAPS GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.CLASSIQUE GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD ORTHOIMAGERY.ORTHOPHOTOS"
layers_png="CADASTRALPARCELS.PARCELS"

for layer in $layers_jpeg; do
Expand Down
30 changes: 30 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,32 @@
CHANGELOG
=========

2.0.0.dev0
-------------------

**Breaking changes**

* Rework API URL schemas

**New features**

* Static API to disconnect Geotrek-rando from Geotrek-Admin (fixes #1428)
* Build zip files for mobile application
* Trek / Touristic content association distance depending on trek practice
* Option to hide published treks nearby topologies
* Add previous/next treks and category slugs to geojson API
* Add external id in trekking/tourism detail pages and exports
* Zip touristic contents as POI for mobile app v1
* Add external id field on Path
* Order intersections in Geotrek light mode
* Add reservation id field for touristic contents
* Integration of WeasyPrint to generate PDF from HTML/CSS instead of ODT

**Bug fixes**

* Remove HTTP calls to SoundCloud API at serialization
* Allow DEM to partially cover spatial extent


0.35.1 (2015-07-17)
-------------------
Expand Down Expand Up @@ -41,6 +67,10 @@ CHANGELOG
* Fix duration notation
* Flatten altimetry profiles

**Bug fixes**

* Show accessibility in trek detail page (fixes #1399)


0.33.4 (2015-04-07)
-------------------
Expand Down
4 changes: 2 additions & 2 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@
# built documents.
#
# The short X.Y version.
version = '0.35'
version = '2.0'
# The full version, including alpha/beta/rc tags.
release = '0.35.1'
release = '2.0.0.dev0'

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
Expand Down
2 changes: 2 additions & 0 deletions geotrek/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import absolute_import

pkg_resources = __import__('pkg_resources')
distribution = pkg_resources.get_distribution('geotrek')

Expand Down
4 changes: 2 additions & 2 deletions geotrek/altimetry/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from django.conf import settings
from django.contrib.gis.db import models
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import get_language, ugettext_lazy as _
from django.template.defaultfilters import floatformat

from mapentity.helpers import is_file_newer, convertit_download, smart_urljoin
Expand Down Expand Up @@ -59,7 +59,7 @@ def get_elevation_chart_url(self):
"""
app_label = self._meta.app_label
model_name = self._meta.module_name
return ('%s:%s_profile_svg' % (app_label, model_name), [str(self.pk)])
return ('%s:%s_profile_svg' % (app_label, model_name), [], {'lang': get_language(), 'pk': self.pk})

def get_elevation_chart_path(self, language):
"""Path to the PNG version of elevation chart.
Expand Down
7 changes: 4 additions & 3 deletions geotrek/altimetry/serializers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from rest_framework import serializers as rest_serializers
from django.core.urlresolvers import reverse
from django.utils.translation import get_language

from geotrek.core.models import AltimetryMixin

Expand All @@ -16,14 +17,14 @@ class Meta:
def get_elevation_area_url(self, obj):
appname = obj._meta.app_label
modelname = obj._meta.module_name
return reverse('%s:%s_elevation_area' % (appname, modelname), kwargs={'pk': obj.pk})
return reverse('%s:%s_elevation_area' % (appname, modelname), kwargs={'lang': get_language(), 'pk': obj.pk})

def get_elevation_svg_url(self, obj):
appname = obj._meta.app_label
modelname = obj._meta.module_name
return reverse('%s:%s_profile_svg' % (appname, modelname), kwargs={'pk': obj.pk})
return reverse('%s:%s_profile_svg' % (appname, modelname), kwargs={'lang': get_language(), 'pk': obj.pk})

def get_altimetric_profile_url(self, obj):
appname = obj._meta.app_label
modelname = obj._meta.module_name
return reverse('%s:%s_profile' % (appname, modelname), kwargs={'pk': obj.pk})
return reverse('%s:%s_profile' % (appname, modelname), kwargs={'lang': get_language(), 'pk': obj.pk})
3 changes: 3 additions & 0 deletions geotrek/altimetry/sql/10_utilities.sql
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ BEGIN
SELECT ST_Value(rast, 1, geom)::integer INTO ele
FROM mnt
WHERE ST_Intersects(rast, geom);
IF NOT FOUND THEN
ele := 0;
END IF;
END IF;

geom3d := ST_MakePoint(ST_X(geom), ST_Y(geom), ele);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@
});

$(window).on('detailmap:ready', function () {
$('#altitudegraph').append('<img src="{% url profile_url object.pk %}">');
$('#altitudegraph').append('<img src="{% url profile_url LANGUAGE_CODE object.pk %}">');
});
</script>
11 changes: 11 additions & 0 deletions geotrek/altimetry/tests/test_elevation.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,17 @@ def test_elevation_topology_point_offset(self):
self.assertEqual(topo.min_elevation, 15)
self.assertEqual(topo.max_elevation, 15)

def test_elevation_topology_outside_dem(self):
outside_path = Path.objects.create(geom=LineString((200, 200), (300, 300)))
topo = TopologyFactory.create(no_path=True)
topo.add_path(outside_path, start=0.5, end=0.5)
topo.save()
self.assertEqual(topo.geom_3d.coords[2], 0)
self.assertEqual(topo.ascent, 0)
self.assertEqual(topo.descent, 0)
self.assertEqual(topo.min_elevation, 0)
self.assertEqual(topo.max_elevation, 0)


class ElevationProfileTest(TestCase):
def test_elevation_profile_wrong_geom(self):
Expand Down
6 changes: 3 additions & 3 deletions geotrek/altimetry/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ def scan_views(self, *args, **kwargs):
views = super(AltimetryEntityOptions, self).scan_views(*args, **kwargs)
altimetry_views = patterns(
'',
url(r'^api/%s/(?P<pk>\d+)/profile.json$' % self.modelname,
url(r'^api/(?P<lang>\w+)/{modelname}s/(?P<pk>\d+)/profile.json$'.format(modelname=self.modelname),
self.elevation_profile_view.as_view(model=self.model),
name="%s_profile" % self.modelname),
url(r'^api/%s/(?P<pk>\d+)/dem.json$' % self.modelname,
url(r'^api/(?P<lang>\w+)/{modelname}s/(?P<pk>\d+)/dem.json$'.format(modelname=self.modelname),
self.elevation_area_view.as_view(model=self.model),
name="%s_elevation_area" % self.modelname),
url(r'^api/%s/(?P<pk>\d+)/profile.svg$' % self.modelname,
url(r'^api/(?P<lang>\w+)/{modelname}s/(?P<pk>\d+)/profile.svg$'.format(modelname=self.modelname),
self.elevation_chart_view.as_view(model=self.model),
name='%s_profile_svg' % self.modelname),
)
Expand Down
22 changes: 22 additions & 0 deletions geotrek/celery.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from __future__ import absolute_import

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'geotrek.settings.default')

from django.conf import settings

app = Celery('geotrek')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
42 changes: 42 additions & 0 deletions geotrek/common/forms.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# -*- coding: utf-8 -*-
from django import forms as django_forms
from django.db.models.fields.related import ForeignKey, ManyToManyField, FieldDoesNotExist
from django.utils.translation import ugettext_lazy as _

import floppyforms as forms
from mapentity.forms import MapEntityForm
Expand All @@ -9,6 +11,10 @@

from .mixins import NoDeleteMixin

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Div, Submit
from crispy_forms.bootstrap import FormActions


class CommonForm(MapEntityForm):

Expand Down Expand Up @@ -68,3 +74,39 @@ def __init__(self, *args, **kwargs):

for name, field in self.fields.items():
self.filter_related_field(name, field)


class ImportDatasetForm(django_forms.Form):
parser = forms.TypedChoiceField(
label=_('Parser'),
widget=forms.RadioSelect,
required=True,
)
zipfile = forms.FileField(
label=_('File'),
required=True,
widget=forms.FileInput
)

def __init__(self, choices=None, *args, **kwargs):
super(ImportDatasetForm, self).__init__(*args, **kwargs)

self.fields['parser'].choices = choices

self.helper = FormHelper()
self.helper.layout = Layout(
Div(
Div(
'parser',
'zipfile',
),
FormActions(
Submit('submit', _("Upload"), css_class='button white')
),
css_class='file-attachment-form',
)
)

def clean_zipfile(self):
if self.cleaned_data['zipfile'].content_type != "application/zip":
raise django_forms.ValidationError(_("File must be of ZIP type."), code='invalid')
30 changes: 30 additions & 0 deletions geotrek/common/middleware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import re

from django.utils import translation
from django.utils.datastructures import SortedDict
from django.utils.translation.trans_real import get_supported_language_variant


language_code_prefix_re = re.compile(r'^/api/([\w-]+)(/|$)')


def get_language_from_path(path):
from django.conf import settings
supported = SortedDict(settings.LANGUAGES)
regex_match = language_code_prefix_re.match(path)
if not regex_match:
return None
lang_code = regex_match.group(1)
try:
return get_supported_language_variant(lang_code, supported)
except LookupError:
return None


class APILocaleMiddleware(object):

def process_request(self, request):
language = get_language_from_path(request.path_info)
if language:
translation.activate(language)
request.LANGUAGE_CODE = translation.get_language()

0 comments on commit d0eefe2

Please sign in to comment.