Adding the core applications code to the repository
This commit is contained in:
41
maraudes/compte_rendu.py
Normal file
41
maraudes/compte_rendu.py
Normal file
@@ -0,0 +1,41 @@
|
||||
from .models import Maraude
|
||||
|
||||
from collections import OrderedDict
|
||||
|
||||
class CompteRendu(Maraude):
|
||||
""" Proxy for Maraude objects.
|
||||
Gives access to related Observation and Rencontre
|
||||
"""
|
||||
|
||||
def __iter__(self):
|
||||
return self._iter()
|
||||
|
||||
def reversed(self):
|
||||
return self._iter(order="-heure_debut")
|
||||
|
||||
def _iter(self, order="heure_debut"):
|
||||
for r in self.rencontres.get_queryset().order_by(order):
|
||||
yield (r, [o for o in r.observations.all()])
|
||||
|
||||
def as_list(self, **kwargs):
|
||||
return [t for t in self._iter(**kwargs)]
|
||||
|
||||
def as_dict(self, key_field="lieu"):
|
||||
""" Returns an 'OrderedDict' with given 'key_field' value as keys and
|
||||
the corresponding (rencontre, observations) tuple
|
||||
"""
|
||||
condensed = OrderedDict()
|
||||
for r, obs in self.__iter__():
|
||||
val = getattr(r, key_field, None)
|
||||
if not val:
|
||||
pass
|
||||
if not val in condensed:
|
||||
condensed[val] = [(r, obs)]
|
||||
else:
|
||||
condensed[val].append((r, obs))
|
||||
return condensed
|
||||
|
||||
class Meta:
|
||||
proxy = True
|
||||
|
||||
|
||||
Reference in New Issue
Block a user