diff options
Diffstat (limited to 'app/unused_apps/birds/models.py')
-rw-r--r-- | app/unused_apps/birds/models.py | 295 |
1 files changed, 0 insertions, 295 deletions
diff --git a/app/unused_apps/birds/models.py b/app/unused_apps/birds/models.py deleted file mode 100644 index 5a14786..0000000 --- a/app/unused_apps/birds/models.py +++ /dev/null @@ -1,295 +0,0 @@ -import datetime -from django.urls import reverse -from django.template.defaultfilters import slugify -from django.contrib.gis.db import models -from django.contrib.auth.models import User -from django.utils import timezone -from locations.models import Location -from django import forms -from django.conf import settings - -from photos.models import LuxImage - - -def get_upload_path(self, filename): - return "images/bird-images/%s/%s" % (datetime.datetime.today().strftime("%Y"), filename) - - -# from http://aba.org/checklist/codes.html -ABA_CODES = ( - (0, 'unknown'), - (1, 'regular occurring - common'), - (2, 'regular occurring - less common'), - (3, 'rare'), - (4, 'casual'), - (5, 'accidental'), - (6, 'Cannot be found'), -) - -KIND_LIST = ( - (1, 'Bird'), - (2, 'Mammal'), - (3, 'Reptile'), - (4, 'Amphibian'), - (5, 'Plant'), -) - - -class APClass(models.Model): - common_name = models.CharField(max_length=200) - scientific_name = models.CharField(max_length=200) - kind = models.IntegerField(choices=KIND_LIST, default=1) - - class Meta: - verbose_name_plural = 'Animal/Plant Class' - ordering = ["kind", "common_name"] - - def __str__(self): - return self.common_name - -class AP(models.Model): - common_name = models.CharField(max_length=200) - slug = models.SlugField() - scientific_name = models.CharField(max_length=200) - code = models.IntegerField(choices=ABA_CODES, default=0) - apclass = models.ForeignKey(APClass, on_delete=models.CASCADE) - image = models.FileField(upload_to=get_upload_path, null=True, blank=True, help_text="width of high res is 1360px") - image_credit = models.CharField(max_length=200, blank=True, null=True) - - def __str__(self): - return self.common_name - - def get_image_url(self): - return "%s%s" % (settings.IMAGES_URL, self.image.url.split("media")[1][8:]) - - def get_absolute_url(self): - return reverse("sightings:detail", kwargs={"slug": self.slug}) - - def kind(self): - return self.apclass.kind - - class Meta: - verbose_name_plural = 'Animal/Plant' - verbose_name = 'Animal/Plant' - ordering = ["common_name", ] - - def save(self, *args, **kwargs): - self.slug = slugify(self.common_name[:50]) - super(AP, self).save(*args, **kwargs) - - -class Sighting(models.Model): - ap = models.ForeignKey(AP, on_delete=models.CASCADE) - point = models.PointField(blank=True) - location = models.ForeignKey(Location, on_delete=models.CASCADE, blank=True, related_name="location_old") - date = models.DateTimeField('Date', default=timezone.now) - seen_by = models.ManyToManyField(User, related_name="seenby_old") - images = models.ManyToManyField(LuxImage, blank=True, related_name="images_old") - #audio = models.ManyToManyField(BirdAudio, blank=True) - - class Meta: - ordering = ["-date", ] - - @property - def state(self): - return self.location.state - - @property - def country(self): - return self.location.state.country - - @property - def region(self): - return self.location.state.country.lux_region - - @property - def longitude(self): - '''Get the site's longitude.''' - return self.point.x - - @property - def latitude(self): - '''Get the site's latitude.''' - return self.point.y - - def get_small_image(self): - for img in self.images.all(): - for size in img.sizes.all(): - if size.width > 360 and size.width < 700: - return img.get_image_by_size(size) - - def get_absolute_url(self): - return reverse("birds:detail", kwargs={"slug": self.bird.slug}) - - def __str__(self): - return self.ap.common_name - - def save(self): - if not self.point: - self.point = Sighting.objects.latest().point - try: - self.location = Location.objects.filter( - geometry__contains=self.point - ).get() - except Location.DoesNotExist: - raise forms.ValidationError("There is no location associated with that point, add it: %sadmin/locations/location/add/" % (settings.BASE_URL)) - super(Sighting, self).save() - -""" -Migration from Birds to abstract: -birdclass = BirdClass.objects.all() -for b in birdclass: - APClass.objects.create( - common_name = b.common_name, - scientific_name = b.scientific_name, - kind = 1 - ) - -birds = Bird.objects.all() -for b in birds: - ap = APClass.objects.get(scientific_name=b.bird_class.scientific_name) - print(ap) - AP.objects.create( - common_name = b.common_name, - scientific_name = b.scientific_name, - code = b.code, - apclass = ap, - image = b.image, - image_credit = b.image_credit, - ) - print(t) - -birdsighting = BirdSighting.objects.all() -for bird in birdsighting: - ap = AP.objects.get(scientific_name=bird.bird.scientific_name) - s = Sighting.objects.create( - ap = ap, - point = bird.point, - location = bird.location, - date = bird.date, - ) - for t in bird.images.all(): - s.images.add(t) - for t in bird.seen_by.all(): - s.seen_by.add(t) -""" - - -class BirdClass(models.Model): - common_name = models.CharField(max_length=200) - scientific_name = models.CharField(max_length=200) - - class Meta: - verbose_name_plural = 'Bird Class' - ordering = ["common_name", ] - - def __str__(self): - return self.common_name - - -class Bird(models.Model): - common_name = models.CharField(max_length=200) - slug = models.SlugField() - scientific_name = models.CharField(max_length=200) - code = models.IntegerField(choices=ABA_CODES, default=0) - bird_class = models.ForeignKey(BirdClass, on_delete=models.CASCADE) - image = models.FileField(upload_to=get_upload_path, null=True, blank=True, help_text="width of high res is 1360px") - image_credit = models.CharField(max_length=200, blank=True, null=True) - - def __str__(self): - return self.common_name - - # function to resize large image to 680px wide and use as normal image - # the question is, should this happen here, or with some universale image - # model that can be attached to other models, loaded in entries and - # displayed in galleries. I suppose the answer is yes then isn't it? - # the problem is that I still can't see exactly what that looks like... - - def get_image_url(self): - return "%s%s" % (settings.IMAGES_URL, self.image.url.split("media")[1][8:]) - - def get_absolute_url(self): - return reverse("birds:detail", kwargs={"slug": self.slug}) - - class Meta: - ordering = ["common_name", ] - - def save(self): - self.slug = slugify(self.common_name[:50]) - super(Bird, self).save() - - -class BirdAudio(models.Model): - bird = models.ForeignKey(Bird, on_delete=models.CASCADE, related_name='recordings') - audio = models.FileField(upload_to='audio/birds/') - recorder = models.CharField(max_length=200, null=True, blank=True) - pub_date = models.DateTimeField() - location = models.CharField(max_length=200, null=True, blank=True) - link = models.CharField(max_length=450, null=True, blank=True) - copyright = models.CharField(max_length=250, null=True, blank=True) - - class Meta: - verbose_name_plural = 'Bird Audio' - ordering = ["bird", ] - - def __str__(self): - return self.bird.common_name - - -class BirdSighting(models.Model): - bird = models.ForeignKey(Bird, on_delete=models.CASCADE) - point = models.PointField(blank=True) - location = models.ForeignKey(Location, on_delete=models.CASCADE, blank=True) - date = models.DateTimeField('Date', default=timezone.now) - seen_by = models.ManyToManyField(User) - images = models.ManyToManyField(LuxImage, blank=True) - audio = models.ManyToManyField(BirdAudio, blank=True) - - class Meta: - verbose_name_plural = 'Bird Sighting' - get_latest_by = 'date' - - @property - def state(self): - return self.location.state - - @property - def country(self): - return self.location.state.country - - @property - def region(self): - return self.location.state.country.lux_region - - @property - def longitude(self): - '''Get the site's longitude.''' - return self.point.x - - @property - def latitude(self): - '''Get the site's latitude.''' - return self.point.y - - def get_small_image(self): - for img in self.images.all(): - for size in img.sizes.all(): - if size.width > 360 and size.width < 700: - return img.get_image_by_size(size) - - def get_absolute_url(self): - return reverse("birds:detail", kwargs={"slug": self.bird.slug}) - - def __str__(self): - return self.bird.common_name - - def save(self): - if not self.point: - self.point = BirdSighting.objects.latest().point - try: - self.location = Location.objects.filter( - geometry__contains=self.point - ).get() - except Location.DoesNotExist: - raise forms.ValidationError("There is no location associated with that point, add it: %sadmin/locations/location/add/" % (settings.BASE_URL)) - super(BirdSighting, self).save() |