trivial: apply black
This commit is contained in:
parent
3e5838c9ac
commit
f7348a846d
|
@ -16,11 +16,14 @@
|
|||
|
||||
import django.apps
|
||||
|
||||
|
||||
class AppConfig(django.apps.AppConfig):
|
||||
name = 'passerelle_montpellier_encombrants'
|
||||
|
||||
def get_after_urls(self):
|
||||
from . import urls
|
||||
|
||||
return urls.urlpatterns
|
||||
|
||||
|
||||
default_app_config = 'passerelle_montpellier_encombrants.AppConfig'
|
||||
|
|
|
@ -36,9 +36,7 @@ class ListValidator(object):
|
|||
|
||||
|
||||
class CommaSeparatedEmailField(forms.Field):
|
||||
|
||||
def __init__(self, dedup=True, max_length=None, min_length=None, *args,
|
||||
**kwargs):
|
||||
def __init__(self, dedup=True, max_length=None, min_length=None, *args, **kwargs):
|
||||
self.dedup = dedup
|
||||
self.max_length = max_length
|
||||
self.min_length = min_length
|
||||
|
@ -64,7 +62,6 @@ class CommaSeparatedEmailField(forms.Field):
|
|||
|
||||
|
||||
class EncombrantsManagementForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = EncombrantsManagement
|
||||
exclude = ('slug', 'users')
|
||||
|
@ -74,6 +71,7 @@ class EncombrantsManagementForm(forms.ModelForm):
|
|||
self.instance.slug = slugify(self.instance.title)
|
||||
return super(EncombrantsManagementForm, self).save(commit=commit)
|
||||
|
||||
|
||||
class EncombrantsManagementUpdateForm(EncombrantsManagementForm):
|
||||
class Meta:
|
||||
model = EncombrantsManagement
|
||||
|
@ -87,9 +85,11 @@ class NoStreetsCommuneForm(forms.ModelForm):
|
|||
|
||||
|
||||
class CommuneForm(forms.ModelForm):
|
||||
streets = forms.CharField(widget=forms.Textarea(attrs={'cols': 25, 'rows': 10}),
|
||||
help_text=_('one street by line'),
|
||||
required=False)
|
||||
streets = forms.CharField(
|
||||
widget=forms.Textarea(attrs={'cols': 25, 'rows': 10}),
|
||||
help_text=_('one street by line'),
|
||||
required=False,
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Commune
|
||||
|
@ -106,15 +106,18 @@ class CommuneForm(forms.ModelForm):
|
|||
|
||||
|
||||
class SectorForm(forms.ModelForm):
|
||||
contact_email = CommaSeparatedEmailField(label=_('Emails'),
|
||||
required=False,
|
||||
help_text=_('separated by commas'))
|
||||
contact_email = CommaSeparatedEmailField(
|
||||
label=_('Emails'), required=False, help_text=_('separated by commas')
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Sector
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class StreetsForm(forms.Form):
|
||||
streets = forms.CharField(widget=forms.Textarea(attrs={'cols': 25, 'rows': 10}),
|
||||
help_text=_('one street by line'),
|
||||
required=False)
|
||||
streets = forms.CharField(
|
||||
widget=forms.Textarea(attrs={'cols': 25, 'rows': 10}),
|
||||
help_text=_('one street by line'),
|
||||
required=False,
|
||||
)
|
||||
|
|
|
@ -12,13 +12,12 @@ from passerelle_montpellier_encombrants.utils import email_sectors
|
|||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
||||
def get(self, url, sign=False):
|
||||
api_user = getattr(settings, 'ENCOMBRANTS_API_USER')
|
||||
secret = getattr(settings, 'ENCOMBRANTS_API_SECRET')
|
||||
orig = getattr(settings, 'ENCOMBRANTS_API_ORIG')
|
||||
if sign:
|
||||
url = sign_url(url + '&email=' + urllib.quote(api_user), secret) + '&orig='+urllib.quote(orig)
|
||||
url = sign_url(url + '&email=' + urllib.quote(api_user), secret) + '&orig=' + urllib.quote(orig)
|
||||
return requests.get(url, headers={'Accept': 'application/json'})
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
|
@ -39,5 +38,7 @@ class Command(BaseCommand):
|
|||
response = r.json()
|
||||
if 'err' in response:
|
||||
raise CommandError('Error while retrieving formdefs: %s' % r.json())
|
||||
response = [x for x in response if x.get('workflow', {}).get('status', {}).get('name') != u'Annulé']
|
||||
response = [
|
||||
x for x in response if x.get('workflow', {}).get('status', {}).get('name') != u'Annulé'
|
||||
]
|
||||
email_sectors(response, tomorrow)
|
||||
|
|
|
@ -14,7 +14,10 @@ class Migration(migrations.Migration):
|
|||
migrations.CreateModel(
|
||||
name='EncombrantsManagement',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
(
|
||||
'id',
|
||||
models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
|
||||
),
|
||||
('title', models.CharField(verbose_name='Title', max_length=50)),
|
||||
('slug', models.SlugField(verbose_name='Identifier', unique=True)),
|
||||
('description', models.TextField(verbose_name='Description')),
|
||||
|
|
|
@ -14,7 +14,10 @@ class Migration(migrations.Migration):
|
|||
migrations.CreateModel(
|
||||
name='CollectDay',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
(
|
||||
'id',
|
||||
models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
|
||||
),
|
||||
('date', models.DateField()),
|
||||
],
|
||||
options={
|
||||
|
@ -25,21 +28,25 @@ class Migration(migrations.Migration):
|
|||
migrations.CreateModel(
|
||||
name='Commune',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
(
|
||||
'id',
|
||||
models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
|
||||
),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('insee', models.CharField(max_length=10)),
|
||||
],
|
||||
options={
|
||||
},
|
||||
options={},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Sector',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
(
|
||||
'id',
|
||||
models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
|
||||
),
|
||||
],
|
||||
options={
|
||||
},
|
||||
options={},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.AddField(
|
||||
|
|
|
@ -14,12 +14,14 @@ class Migration(migrations.Migration):
|
|||
migrations.CreateModel(
|
||||
name='Street',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
(
|
||||
'id',
|
||||
models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
|
||||
),
|
||||
('name', models.CharField(max_length=128, verbose_name='Street')),
|
||||
('commune', models.ForeignKey(to='passerelle_montpellier_encombrants.Commune')),
|
||||
],
|
||||
options={
|
||||
},
|
||||
options={},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
]
|
||||
|
|
|
@ -14,7 +14,9 @@ class Migration(migrations.Migration):
|
|||
migrations.AlterField(
|
||||
model_name='sector',
|
||||
name='contact_email',
|
||||
field=models.CharField(help_text='separated by commas', max_length=128, verbose_name='Contact Emails', blank=True),
|
||||
field=models.CharField(
|
||||
help_text='separated by commas', max_length=128, verbose_name='Contact Emails', blank=True
|
||||
),
|
||||
preserve_default=True,
|
||||
),
|
||||
]
|
||||
|
|
|
@ -14,7 +14,9 @@ class Migration(migrations.Migration):
|
|||
migrations.AlterField(
|
||||
model_name='sector',
|
||||
name='contact_email',
|
||||
field=models.CharField(help_text='separated by commas', max_length=1024, verbose_name='Contact Emails', blank=True),
|
||||
field=models.CharField(
|
||||
help_text='separated by commas', max_length=1024, verbose_name='Contact Emails', blank=True
|
||||
),
|
||||
preserve_default=True,
|
||||
),
|
||||
]
|
||||
|
|
|
@ -14,6 +14,19 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='encombrantsmanagement',
|
||||
name='log_level',
|
||||
field=models.CharField(default=b'NOTSET', max_length=10, verbose_name='Log Level', choices=[(b'NOTSET', b'NOTSET'), (b'DEBUG', b'DEBUG'), (b'INFO', b'INFO'), (b'WARNING', b'WARNING'), (b'ERROR', b'ERROR'), (b'CRITICAL', b'CRITICAL'), (b'FATAL', b'FATAL')]),
|
||||
field=models.CharField(
|
||||
default=b'NOTSET',
|
||||
max_length=10,
|
||||
verbose_name='Log Level',
|
||||
choices=[
|
||||
(b'NOTSET', b'NOTSET'),
|
||||
(b'DEBUG', b'DEBUG'),
|
||||
(b'INFO', b'INFO'),
|
||||
(b'WARNING', b'WARNING'),
|
||||
(b'ERROR', b'ERROR'),
|
||||
(b'CRITICAL', b'CRITICAL'),
|
||||
(b'FATAL', b'FATAL'),
|
||||
],
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
@ -15,6 +15,19 @@ class Migration(migrations.Migration):
|
|||
migrations.AlterField(
|
||||
model_name='encombrantsmanagement',
|
||||
name='log_level',
|
||||
field=models.CharField(choices=[(b'NOTSET', b'NOTSET'), (b'DEBUG', b'DEBUG'), (b'INFO', b'INFO'), (b'WARNING', b'WARNING'), (b'ERROR', b'ERROR'), (b'CRITICAL', b'CRITICAL'), (b'FATAL', b'FATAL')], default=b'INFO', max_length=10, verbose_name='Log Level'),
|
||||
field=models.CharField(
|
||||
choices=[
|
||||
(b'NOTSET', b'NOTSET'),
|
||||
(b'DEBUG', b'DEBUG'),
|
||||
(b'INFO', b'INFO'),
|
||||
(b'WARNING', b'WARNING'),
|
||||
(b'ERROR', b'ERROR'),
|
||||
(b'CRITICAL', b'CRITICAL'),
|
||||
(b'FATAL', b'FATAL'),
|
||||
],
|
||||
default=b'INFO',
|
||||
max_length=10,
|
||||
verbose_name='Log Level',
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
@ -21,6 +21,7 @@ from django.utils.translation import ugettext_lazy as _
|
|||
|
||||
from passerelle.base.models import BaseResource
|
||||
|
||||
|
||||
class EncombrantsManagement(BaseResource):
|
||||
category = _('Business Process Connectors')
|
||||
|
||||
|
@ -45,9 +46,9 @@ class EncombrantsManagement(BaseResource):
|
|||
|
||||
@six.python_2_unicode_compatible
|
||||
class Sector(models.Model):
|
||||
contact_email = models.CharField(max_length=1024, blank=True,
|
||||
verbose_name=_('Contact Emails'),
|
||||
help_text=_('separated by commas'))
|
||||
contact_email = models.CharField(
|
||||
max_length=1024, blank=True, verbose_name=_('Contact Emails'), help_text=_('separated by commas')
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('Sector')
|
||||
|
@ -61,10 +62,8 @@ class Sector(models.Model):
|
|||
|
||||
@six.python_2_unicode_compatible
|
||||
class Commune(models.Model):
|
||||
name = models.CharField(max_length=50, blank=False,
|
||||
verbose_name=_('Name'))
|
||||
insee = models.CharField(max_length=10, blank=False,
|
||||
verbose_name=_('INSEE Code'))
|
||||
name = models.CharField(max_length=50, blank=False, verbose_name=_('Name'))
|
||||
insee = models.CharField(max_length=10, blank=False, verbose_name=_('INSEE Code'))
|
||||
sector = models.ForeignKey(Sector, verbose_name=_('Sector'))
|
||||
|
||||
def __str__(self):
|
||||
|
@ -74,8 +73,7 @@ class Commune(models.Model):
|
|||
@six.python_2_unicode_compatible
|
||||
class Street(models.Model):
|
||||
commune = models.ForeignKey(Commune)
|
||||
name = models.CharField(max_length=128, blank=False,
|
||||
verbose_name=_('Street'))
|
||||
name = models.CharField(max_length=128, blank=False, verbose_name=_('Street'))
|
||||
|
||||
def __str__(self):
|
||||
return '%s, %s' % (self.name, self.commune)
|
||||
|
@ -83,8 +81,7 @@ class Street(models.Model):
|
|||
|
||||
@six.python_2_unicode_compatible
|
||||
class CollectDay(models.Model):
|
||||
sector = models.ForeignKey(Sector,
|
||||
verbose_name=_('Sector'))
|
||||
sector = models.ForeignKey(Sector, verbose_name=_('Sector'))
|
||||
date = models.DateField(verbose_name=_('Date'))
|
||||
|
||||
class Meta:
|
||||
|
|
|
@ -52,17 +52,23 @@ class Workbook(object):
|
|||
z = zipfile.ZipFile(output, 'w')
|
||||
z.writestr('content.xml', self.get_data())
|
||||
z.writestr('mimetype', 'application/vnd.oasis.opendocument.spreadsheet')
|
||||
z.writestr('META-INF/manifest.xml', '''<?xml version="1.0" encoding="UTF-8"?>
|
||||
z.writestr(
|
||||
'META-INF/manifest.xml',
|
||||
'''<?xml version="1.0" encoding="UTF-8"?>
|
||||
<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
|
||||
<manifest:file-entry manifest:full-path="/" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>
|
||||
<manifest:file-entry manifest:full-path="styles.xml" manifest:media-type="text/xml"/>
|
||||
<manifest:file-entry manifest:full-path="content.xml" manifest:media-type="text/xml"/>
|
||||
<manifest:file-entry manifest:full-path="META-INF/manifest.xml" manifest:media-type="text/xml"/>
|
||||
<manifest:file-entry manifest:full-path="mimetype" manifest:media-type="text/plain"/>
|
||||
</manifest:manifest>''')
|
||||
z.writestr('styles.xml', '''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
</manifest:manifest>''',
|
||||
)
|
||||
z.writestr(
|
||||
'styles.xml',
|
||||
'''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<office:document-styles xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0">
|
||||
</office:document-styles>''')
|
||||
</office:document-styles>''',
|
||||
)
|
||||
z.close()
|
||||
|
||||
|
||||
|
@ -81,9 +87,9 @@ class WorkSheet(object):
|
|||
root = ET.Element('{%s}table' % TABLE_NS)
|
||||
root.attrib['{%s}name' % TABLE_NS] = self.name
|
||||
ET.SubElement(root, '{%s}table-column' % TABLE_NS)
|
||||
for i in range(0, max(self.cells.keys())+1):
|
||||
for i in range(0, max(self.cells.keys()) + 1):
|
||||
row = ET.SubElement(root, '{%s}table-row' % TABLE_NS)
|
||||
for j in range(0, max(self.cells.get(i).keys())+1):
|
||||
for j in range(0, max(self.cells.get(i).keys()) + 1):
|
||||
cell = self.cells.get(i, {}).get(j, None)
|
||||
if not cell:
|
||||
ET.SubElement(row, '{%s}table-cell' % TABLE_NS)
|
||||
|
|
|
@ -21,51 +21,76 @@ from django.contrib.auth.decorators import login_required
|
|||
from .views import *
|
||||
|
||||
public_urlpatterns = [
|
||||
url(r'^(?P<slug>[\w,-]+)/$', EncombrantsManagementDetailView.as_view(),
|
||||
name='montpellier-encombrants-view'),
|
||||
url(r'^(?P<slug>[\w,-]+)/available/(?P<insee>\d+)$', AvailableDaysView.as_view(),
|
||||
name='montpellier-encombrants-available-days'),
|
||||
url(
|
||||
r'^(?P<slug>[\w,-]+)/$',
|
||||
EncombrantsManagementDetailView.as_view(),
|
||||
name='montpellier-encombrants-view',
|
||||
),
|
||||
url(
|
||||
r'^(?P<slug>[\w,-]+)/available/(?P<insee>\d+)$',
|
||||
AvailableDaysView.as_view(),
|
||||
name='montpellier-encombrants-available-days',
|
||||
),
|
||||
]
|
||||
|
||||
management_urlpatterns = [
|
||||
url(r'^add$', EncombrantsManagementCreateView.as_view(),
|
||||
name='montpellier-encombrants-add'),
|
||||
url(r'^(?P<slug>[\w,-]+)/edit$', EncombrantsManagementUpdateView.as_view(),
|
||||
name='montpellier-encombrants-edit'),
|
||||
url(r'^(?P<slug>[\w,-]+)/delete$', EncombrantsManagementDeleteView.as_view(),
|
||||
name='montpellier-encombrants-delete'),
|
||||
url(r'^sectors/$', SectorListView.as_view(),
|
||||
name='montpellier-encombrants-sector-listing'),
|
||||
url(r'^sectors/add$', SectorCreateView.as_view(),
|
||||
name='montpellier-encombrants-sector-add'),
|
||||
url(r'^sectors/(?P<pk>[\w,-]+)/$', SectorUpdateView.as_view(),
|
||||
name='montpellier-encombrants-sector-update'),
|
||||
url(r'^sectors/(?P<pk>[\w,-]+)/delete$', SectorDeleteView.as_view(),
|
||||
name='montpellier-encombrants-sector-remove'),
|
||||
url(r'^communes/$', CommuneListView.as_view(),
|
||||
name='montpellier-encombrants-commune-listing'),
|
||||
url(r'^communes/add$', CommuneCreateView.as_view(),
|
||||
name='montpellier-encombrants-commune-add'),
|
||||
url(r'^communes/(?P<pk>[\w,-]+)/edit$', CommuneUpdateView.as_view(),
|
||||
name='montpellier-encombrants-commune-edit'),
|
||||
url(r'^communes/(?P<pk>[\w,-]+)$', CommuneView.as_view(),
|
||||
name='montpellier-encombrants-commune-view'),
|
||||
url(r'^communes/(?P<pk>[\w,-]+)/streets$', StreetEditView.as_view(),
|
||||
name='montpellier-encombrants-commune-streets-edit-view'),
|
||||
url(r'^communes/(?P<pk>[\w,-]+)/delete$', CommuneDeleteView.as_view(),
|
||||
name='montpellier-encombrants-commune-remove'),
|
||||
url(r'^collectdays/$', CollectDayListView.as_view(),
|
||||
name='montpellier-encombrants-collectday-listing'),
|
||||
url(r'^collectdays/add$', CollectDayCreateView.as_view(),
|
||||
name='montpellier-encombrants-collectday-add'),
|
||||
url(r'^collectdays/(?P<pk>[\w,-]+)/delete$', CollectDayDeleteView.as_view(),
|
||||
name='montpellier-encombrants-collectday-remove'),
|
||||
url(r'^add$', EncombrantsManagementCreateView.as_view(), name='montpellier-encombrants-add'),
|
||||
url(
|
||||
r'^(?P<slug>[\w,-]+)/edit$',
|
||||
EncombrantsManagementUpdateView.as_view(),
|
||||
name='montpellier-encombrants-edit',
|
||||
),
|
||||
url(
|
||||
r'^(?P<slug>[\w,-]+)/delete$',
|
||||
EncombrantsManagementDeleteView.as_view(),
|
||||
name='montpellier-encombrants-delete',
|
||||
),
|
||||
url(r'^sectors/$', SectorListView.as_view(), name='montpellier-encombrants-sector-listing'),
|
||||
url(r'^sectors/add$', SectorCreateView.as_view(), name='montpellier-encombrants-sector-add'),
|
||||
url(
|
||||
r'^sectors/(?P<pk>[\w,-]+)/$',
|
||||
SectorUpdateView.as_view(),
|
||||
name='montpellier-encombrants-sector-update',
|
||||
),
|
||||
url(
|
||||
r'^sectors/(?P<pk>[\w,-]+)/delete$',
|
||||
SectorDeleteView.as_view(),
|
||||
name='montpellier-encombrants-sector-remove',
|
||||
),
|
||||
url(r'^communes/$', CommuneListView.as_view(), name='montpellier-encombrants-commune-listing'),
|
||||
url(r'^communes/add$', CommuneCreateView.as_view(), name='montpellier-encombrants-commune-add'),
|
||||
url(
|
||||
r'^communes/(?P<pk>[\w,-]+)/edit$',
|
||||
CommuneUpdateView.as_view(),
|
||||
name='montpellier-encombrants-commune-edit',
|
||||
),
|
||||
url(r'^communes/(?P<pk>[\w,-]+)$', CommuneView.as_view(), name='montpellier-encombrants-commune-view'),
|
||||
url(
|
||||
r'^communes/(?P<pk>[\w,-]+)/streets$',
|
||||
StreetEditView.as_view(),
|
||||
name='montpellier-encombrants-commune-streets-edit-view',
|
||||
),
|
||||
url(
|
||||
r'^communes/(?P<pk>[\w,-]+)/delete$',
|
||||
CommuneDeleteView.as_view(),
|
||||
name='montpellier-encombrants-commune-remove',
|
||||
),
|
||||
url(r'^collectdays/$', CollectDayListView.as_view(), name='montpellier-encombrants-collectday-listing'),
|
||||
url(r'^collectdays/add$', CollectDayCreateView.as_view(), name='montpellier-encombrants-collectday-add'),
|
||||
url(
|
||||
r'^collectdays/(?P<pk>[\w,-]+)/delete$',
|
||||
CollectDayDeleteView.as_view(),
|
||||
name='montpellier-encombrants-collectday-remove',
|
||||
),
|
||||
]
|
||||
|
||||
urlpatterns = required(
|
||||
app_enabled('passerelle_montpellier_encombrants'), [
|
||||
app_enabled('passerelle_montpellier_encombrants'),
|
||||
[
|
||||
url(r'^montpellier-encombrants/', include(public_urlpatterns)),
|
||||
url(r'^manage/montpellier-encombrants/',
|
||||
decorated_includes(login_required, include(management_urlpatterns))),
|
||||
]
|
||||
url(
|
||||
r'^manage/montpellier-encombrants/',
|
||||
decorated_includes(login_required, include(management_urlpatterns)),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
|
|
@ -43,35 +43,37 @@ prefix_map = {
|
|||
'ENCL': 'ENCLOS',
|
||||
'ESP': 'ESPLANADE',
|
||||
'ESPA': 'ESPACE',
|
||||
'GR': '', # "GR GRAND-RUE JEAN MOULIN"
|
||||
'GR': '', # "GR GRAND-RUE JEAN MOULIN"
|
||||
'IMP': 'IMPASSE',
|
||||
'JARD': 'JARDIN',
|
||||
'MAIL': '', # "MAIL LE GRAND MAIL"
|
||||
'MAIL': '', # "MAIL LE GRAND MAIL"
|
||||
'PARC': 'PARC',
|
||||
'PARV': '', # "PARV PARVIS DE LA LEGION D HONNEUR"
|
||||
'PARV': '', # "PARV PARVIS DE LA LEGION D HONNEUR"
|
||||
'PAS': 'PASSAGE',
|
||||
'PL': 'PLACE',
|
||||
'PLAN': 'PLAN',
|
||||
'PONT': 'PONT',
|
||||
'QUA': 'QUAI',
|
||||
'R': 'RUE',
|
||||
'RAMB': '', # "RAMB RAMBLA DES CALISSONS"
|
||||
'RAMB': '', # "RAMB RAMBLA DES CALISSONS"
|
||||
'RPT': 'ROND-POINT',
|
||||
'RTE': 'ROUTE',
|
||||
'SQ': 'SQUARE',
|
||||
'TSSE': '', # "TSSE TERRASSE DES ALLEES DU BOIS"
|
||||
'TSSE': '', # "TSSE TERRASSE DES ALLEES DU BOIS"
|
||||
'TUN': 'TUNNEL',
|
||||
'VIAD': 'VIADUC',
|
||||
'VOI': 'VOIE',
|
||||
}
|
||||
|
||||
|
||||
def prefix_cleanup(name):
|
||||
name = name.strip()
|
||||
for prefix, full in prefix_map.items():
|
||||
if name.startswith(prefix + ' '):
|
||||
name = (full + name[len(prefix):]).strip()
|
||||
name = (full + name[len(prefix) :]).strip()
|
||||
return name
|
||||
|
||||
|
||||
def get_sector(insee, address=None):
|
||||
communes = Commune.objects.filter(insee=insee)
|
||||
for commune in communes:
|
||||
|
@ -83,6 +85,7 @@ def get_sector(insee, address=None):
|
|||
else:
|
||||
return commune.sector
|
||||
|
||||
|
||||
def email_sectors(formdatas, when):
|
||||
subject = get_template('passerelle_montpellier_encombrants/email_subject.txt')
|
||||
message = get_template('passerelle_montpellier_encombrants/email_body.txt')
|
||||
|
@ -95,8 +98,10 @@ def email_sectors(formdatas, when):
|
|||
for data in formdatas:
|
||||
fields = data['fields']
|
||||
|
||||
data = [fields.get(d) or '' for d in ('commune', 'prenom', 'nom', 'numero',
|
||||
'voie', 'date', 'telephone', 'commentaire')]
|
||||
data = [
|
||||
fields.get(d) or ''
|
||||
for d in ('commune', 'prenom', 'nom', 'numero', 'voie', 'date', 'telephone', 'commentaire')
|
||||
]
|
||||
|
||||
sector = get_sector(fields.get('commune_raw'), fields.get('adresse'))
|
||||
if sector:
|
||||
|
@ -104,8 +109,12 @@ def email_sectors(formdatas, when):
|
|||
|
||||
for destination, data in sectors.items():
|
||||
destinations = [d.strip() for d in destination.split(',') if d.strip()]
|
||||
mail = EmailMessage(subject.render(context).strip(), message.render(context),
|
||||
settings.DEFAULT_FROM_EMAIL, destinations)
|
||||
mail = EmailMessage(
|
||||
subject.render(context).strip(),
|
||||
message.render(context),
|
||||
settings.DEFAULT_FROM_EMAIL,
|
||||
destinations,
|
||||
)
|
||||
attachement_body = BytesIO()
|
||||
|
||||
# create ods
|
||||
|
@ -119,9 +128,11 @@ def email_sectors(formdatas, when):
|
|||
|
||||
for i, d in enumerate(data):
|
||||
for j, e in enumerate(d):
|
||||
ws.write(i+1, j, e)
|
||||
ws.write(i + 1, j, e)
|
||||
|
||||
ods.save(attachement_body)
|
||||
|
||||
mail.attach('demandes.ods', attachement_body.getvalue(), 'application/vnd.oasis.opendocument.spreadsheet')
|
||||
mail.attach(
|
||||
'demandes.ods', attachement_body.getvalue(), 'application/vnd.oasis.opendocument.spreadsheet'
|
||||
)
|
||||
mail.send()
|
||||
|
|
|
@ -26,8 +26,13 @@ from django.db import transaction
|
|||
from passerelle import utils as passerelle_utils
|
||||
|
||||
from .models import EncombrantsManagement, Sector, Commune, CollectDay, Street
|
||||
from .forms import (EncombrantsManagementForm, EncombrantsManagementUpdateForm, CommuneForm,
|
||||
StreetsForm, NoStreetsCommuneForm)
|
||||
from .forms import (
|
||||
EncombrantsManagementForm,
|
||||
EncombrantsManagementUpdateForm,
|
||||
CommuneForm,
|
||||
StreetsForm,
|
||||
NoStreetsCommuneForm,
|
||||
)
|
||||
from .forms import SectorForm
|
||||
from .utils import prefix_cleanup, get_sector
|
||||
|
||||
|
@ -164,10 +169,11 @@ class AvailableDaysView(View, SingleObjectMixin):
|
|||
else:
|
||||
collect_days = []
|
||||
limit = request.GET.get('limit')
|
||||
result = [{'id': x.date.strftime('%Y-%m-%d'),
|
||||
'text': x.date.strftime('%d/%m/%Y')} for x in collect_days]
|
||||
result = [
|
||||
{'id': x.date.strftime('%Y-%m-%d'), 'text': x.date.strftime('%d/%m/%Y')} for x in collect_days
|
||||
]
|
||||
if limit:
|
||||
result = result[:int(limit)]
|
||||
result = result[: int(limit)]
|
||||
return passerelle_utils.response_for_json(request, {'data': result})
|
||||
|
||||
|
||||
|
@ -176,8 +182,7 @@ class StreetEditView(FormView):
|
|||
template_name = 'passerelle/manage/service_form.html'
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse('montpellier-encombrants-commune-view',
|
||||
kwargs={'pk': self.kwargs['pk']})
|
||||
return reverse('montpellier-encombrants-commune-view', kwargs={'pk': self.kwargs['pk']})
|
||||
|
||||
def get_initial(self):
|
||||
try:
|
||||
|
|
14
setup.py
14
setup.py
|
@ -25,9 +25,9 @@ class eo_sdist(sdist):
|
|||
|
||||
|
||||
def get_version():
|
||||
'''Use the VERSION, if absent generates a version with git describe, if not
|
||||
tag exists, take 0.0- and add the length of the commit log.
|
||||
'''
|
||||
"""Use the VERSION, if absent generates a version with git describe, if not
|
||||
tag exists, take 0.0- and add the length of the commit log.
|
||||
"""
|
||||
if os.path.exists('VERSION'):
|
||||
with open('VERSION', 'r') as v:
|
||||
return v.read()
|
||||
|
@ -65,6 +65,7 @@ class compile_translations(Command):
|
|||
curdir = os.getcwd()
|
||||
try:
|
||||
from django.core.management import call_command
|
||||
|
||||
for path, dirs, files in os.walk('passerelle_montpellier_encombrants'):
|
||||
if 'locale' not in dirs:
|
||||
continue
|
||||
|
@ -104,13 +105,14 @@ setup(
|
|||
'Programming Language :: Python',
|
||||
'Programming Language :: Python :: 2',
|
||||
],
|
||||
install_requires=['django>=1.11, <1.12',
|
||||
],
|
||||
install_requires=[
|
||||
'django>=1.11, <1.12',
|
||||
],
|
||||
zip_safe=False,
|
||||
cmdclass={
|
||||
'build': build,
|
||||
'compile_translations': compile_translations,
|
||||
'install_lib': install_lib,
|
||||
'sdist': eo_sdist,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
|
|
@ -3,15 +3,14 @@ import os
|
|||
LANGUAGE_CODE = 'en-us'
|
||||
TIME_ZONE = 'UTC'
|
||||
|
||||
INSTALLED_APPS += (
|
||||
'passerelle_montpellier_encombrants',
|
||||
)
|
||||
INSTALLED_APPS += ('passerelle_montpellier_encombrants',)
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': os.environ.get('DB_ENGINE', 'django.db.backends.sqlite3'),
|
||||
'TEST': {
|
||||
'NAME': 'passerelle-montpellier-encombrants-test-%s' % os.environ.get('BRANCH_NAME', '').replace('/', '-')[:63],
|
||||
'NAME': 'passerelle-montpellier-encombrants-test-%s'
|
||||
% os.environ.get('BRANCH_NAME', '').replace('/', '-')[:63],
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,15 +11,29 @@ from django.core.urlresolvers import reverse
|
|||
from django.utils.encoding import force_text
|
||||
|
||||
from passerelle_montpellier_encombrants.models import (
|
||||
EncombrantsManagement, Commune, Sector, CollectDay, Street)
|
||||
EncombrantsManagement,
|
||||
Commune,
|
||||
Sector,
|
||||
CollectDay,
|
||||
Street,
|
||||
)
|
||||
|
||||
maurin_streets = ('CHE DES JARDINS DE MAGUELONE', 'RTE DEPARTEMENTALE 132',
|
||||
'CHE DE SAINT-HUBERT', 'PLAN DU MAS DE SARDAN',
|
||||
'R DES ROBINIERS')
|
||||
maurin_streets = (
|
||||
'CHE DES JARDINS DE MAGUELONE',
|
||||
'RTE DEPARTEMENTALE 132',
|
||||
'CHE DE SAINT-HUBERT',
|
||||
'PLAN DU MAS DE SARDAN',
|
||||
'R DES ROBINIERS',
|
||||
)
|
||||
|
||||
lattes_streets = ('AV DE BOIRARGUES', 'RPT DE LA FONTVIN', 'PLAN ROSSINI',
|
||||
'R DES CYCLAMENS', 'RTE DEPARTEMENTALE 172',
|
||||
'CHE DU MAS DE CAUSSE À L\'ESTELLE')
|
||||
lattes_streets = (
|
||||
'AV DE BOIRARGUES',
|
||||
'RPT DE LA FONTVIN',
|
||||
'PLAN ROSSINI',
|
||||
'R DES CYCLAMENS',
|
||||
'RTE DEPARTEMENTALE 172',
|
||||
'CHE DU MAS DE CAUSSE À L\'ESTELLE',
|
||||
)
|
||||
|
||||
|
||||
class EncombrantsTestCase(TestCase):
|
||||
|
@ -27,15 +41,17 @@ class EncombrantsTestCase(TestCase):
|
|||
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
self.instance = EncombrantsManagement.objects.create(title='montpellier',
|
||||
slug='montpellier',
|
||||
description='encombrants')
|
||||
self.instance = EncombrantsManagement.objects.create(
|
||||
title='montpellier', slug='montpellier', description='encombrants'
|
||||
)
|
||||
self.now = datetime.datetime.now()
|
||||
for mail, insee, name in (('cournonsec@montpellier3m.fr', '34087', 'Cournonsec'),
|
||||
('jacou@montpellier3m.fr', '34120', 'Jacou'),
|
||||
('castelnau@montpellier3m.fr', '34057', 'Castelnau'),
|
||||
('prades@montpellier3m.fr', '34217', 'Prades'),
|
||||
('sussargues@montpellier3m.fr', '34307', 'Sussargues')):
|
||||
for mail, insee, name in (
|
||||
('cournonsec@montpellier3m.fr', '34087', 'Cournonsec'),
|
||||
('jacou@montpellier3m.fr', '34120', 'Jacou'),
|
||||
('castelnau@montpellier3m.fr', '34057', 'Castelnau'),
|
||||
('prades@montpellier3m.fr', '34217', 'Prades'),
|
||||
('sussargues@montpellier3m.fr', '34307', 'Sussargues'),
|
||||
):
|
||||
sector = Sector.objects.create(contact_email=mail)
|
||||
commune = Commune.objects.create(sector=sector, insee=insee, name=name)
|
||||
for i in range(2, randint(3, 10)):
|
||||
|
@ -44,75 +60,90 @@ class EncombrantsTestCase(TestCase):
|
|||
|
||||
def test_collectdays(self):
|
||||
for commune in Commune.objects.all():
|
||||
r = self.client.get(reverse('montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug, 'insee': commune.insee}))
|
||||
r = self.client.get(
|
||||
reverse(
|
||||
'montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug, 'insee': commune.insee},
|
||||
)
|
||||
)
|
||||
data = json.loads(force_text(r.content))
|
||||
|
||||
def test_collectdays_in_communes_with_street(self):
|
||||
|
||||
maurin_sector = Sector.objects.create(contact_email='maurin@montpellier3m.fr')
|
||||
maurin_commune = Commune.objects.create(sector=maurin_sector, name='Maurin',
|
||||
insee='34970')
|
||||
maurin_commune = Commune.objects.create(sector=maurin_sector, name='Maurin', insee='34970')
|
||||
|
||||
lattes_sector = Sector.objects.create(contact_email='lattes@montpellier3m.fr')
|
||||
lattes_commune = Commune.objects.create(sector=lattes_sector, name='Lattes',
|
||||
insee='34970')
|
||||
lattes_commune = Commune.objects.create(sector=lattes_sector, name='Lattes', insee='34970')
|
||||
|
||||
for s in maurin_streets:
|
||||
Street.objects.create(commune=maurin_commune, name=s)
|
||||
|
||||
|
||||
CollectDay.objects.create(sector=maurin_sector,
|
||||
date=self.now + datetime.timedelta(days=2))
|
||||
|
||||
CollectDay.objects.create(sector=maurin_sector, date=self.now + datetime.timedelta(days=2))
|
||||
|
||||
# Maurin
|
||||
r = self.client.get(reverse('montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug,
|
||||
'insee': '34970'}), {'adresse': 'PLAN DU MAS DE SARDAN'})
|
||||
r = self.client.get(
|
||||
reverse(
|
||||
'montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug, 'insee': '34970'},
|
||||
),
|
||||
{'adresse': 'PLAN DU MAS DE SARDAN'},
|
||||
)
|
||||
data = json.loads(force_text(r.content))
|
||||
#self.assertNotEqual(data['data'], [])
|
||||
# self.assertNotEqual(data['data'], [])
|
||||
|
||||
# Lattes
|
||||
for s in lattes_streets:
|
||||
Street.objects.create(commune=lattes_commune, name=s)
|
||||
|
||||
r = self.client.get(reverse('montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug,
|
||||
'insee': '34970'}), {'adresse': 'ROUTE DEPARTEMENTALE 172'})
|
||||
r = self.client.get(
|
||||
reverse(
|
||||
'montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug, 'insee': '34970'},
|
||||
),
|
||||
{'adresse': 'ROUTE DEPARTEMENTALE 172'},
|
||||
)
|
||||
data = json.loads(force_text(r.content))
|
||||
#self.assertEqual(data['data'], [])
|
||||
# self.assertEqual(data['data'], [])
|
||||
|
||||
CollectDay.objects.create(sector=lattes_sector,
|
||||
date=self.now + datetime.timedelta(days=4))
|
||||
CollectDay.objects.create(sector=lattes_sector, date=self.now + datetime.timedelta(days=4))
|
||||
|
||||
r = self.client.get(reverse('montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug,
|
||||
'insee': '34970'}), {'adresse': 'ROUTE DEPARTEMENTALE 172'})
|
||||
r = self.client.get(
|
||||
reverse(
|
||||
'montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug, 'insee': '34970'},
|
||||
),
|
||||
{'adresse': 'ROUTE DEPARTEMENTALE 172'},
|
||||
)
|
||||
data = json.loads(force_text(r.content))
|
||||
self.assertNotEqual(data['data'], [])
|
||||
|
||||
|
||||
def test_collectdays_nonexisting_street(self):
|
||||
r = self.client.get(reverse('montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug,
|
||||
'insee': '34970'}), {'adresse': 'Nonexisting street'})
|
||||
r = self.client.get(
|
||||
reverse(
|
||||
'montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug, 'insee': '34970'},
|
||||
),
|
||||
{'adresse': 'Nonexisting street'},
|
||||
)
|
||||
data = json.loads(force_text(r.content))
|
||||
self.assertEqual(data['data'], [])
|
||||
|
||||
def test_collectdays_random_case_street(self):
|
||||
lattes_sector = Sector.objects.create(contact_email='lattes@montpellier3m.fr')
|
||||
lattes_commune = Commune.objects.create(sector=lattes_sector, name='Lattes',
|
||||
insee='34970')
|
||||
lattes_commune = Commune.objects.create(sector=lattes_sector, name='Lattes', insee='34970')
|
||||
|
||||
for s in lattes_streets:
|
||||
Street.objects.create(commune=lattes_commune, name=s)
|
||||
|
||||
CollectDay.objects.create(sector=lattes_sector,
|
||||
date=self.now + datetime.timedelta(days=10))
|
||||
CollectDay.objects.create(sector=lattes_sector, date=self.now + datetime.timedelta(days=10))
|
||||
|
||||
r = self.client.get(reverse('montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug,
|
||||
'insee': '34970'}), {'adresse': 'route departementale 172'})
|
||||
r = self.client.get(
|
||||
reverse(
|
||||
'montpellier-encombrants-available-days',
|
||||
kwargs={'slug': self.instance.slug, 'insee': '34970'},
|
||||
),
|
||||
{'adresse': 'route departementale 172'},
|
||||
)
|
||||
data = json.loads(force_text(r.content))
|
||||
self.assertNotEqual(data['data'], [])
|
||||
|
|
Loading…
Reference in New Issue