diff options
Diffstat (limited to 'app/photos/models.py')
-rw-r--r-- | app/photos/models.py | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/app/photos/models.py b/app/photos/models.py new file mode 100644 index 0000000..dcb3d8a --- /dev/null +++ b/app/photos/models.py @@ -0,0 +1,201 @@ +import datetime +import Image +from django.contrib.gis.db import models +from django.contrib.sitemaps import Sitemap +from django.contrib.syndication.views import Feed +from django.utils.encoding import force_unicode +from django.conf import settings + + +from taggit.managers import TaggableManager + +from locations.models import Location,Region + +class Photo(models.Model): + description = models.TextField(blank=True, null=True) + title = models.CharField(blank=True, max_length=300) + pub_date = models.DateTimeField() + tags = TaggableManager(blank=True) + exif_aperture = models.CharField(max_length=50, blank=True, null=True) + exif_make = models.CharField(max_length=50, blank=True, null=True) + exif_model = models.CharField(max_length=50, blank=True, null=True) + exif_exposure = models.CharField(max_length=50, blank=True, null=True) + exif_iso = models.CharField(max_length=50, blank=True, null=True) + exif_focal_length = models.CharField(max_length=50, blank=True, null=True) + exif_lens = models.CharField(max_length=50, blank=True, null=True) + exif_date = models.DateTimeField() + """Flickr Specific Stuff""" + flickr_id = models.CharField(max_length=300) #varchar since Flickr ids are larger than than integerfield can handle and BigIntegerField gets weird in Postgres. + flickr_owner = models.CharField(max_length=20) + flickr_server = models.IntegerField() + flickr_farm = models.IntegerField() + flickr_secret = models.CharField(max_length=50) + flickr_originalsecret = models.CharField(max_length=50) + lon = models.FloatField('Longitude',help_text="Longitude of centerpoint",null=True) + lat = models.FloatField('Latitude',help_text="Latitude of centerpoint",null=True) + location = models.ForeignKey(Location, null=True) + region = models.ForeignKey(Region, null=True) + slideshowimage_width = models.CharField(max_length=4, blank=True, null=True) + slideshowimage_height = models.CharField(max_length=4, blank=True, null=True) + slideshowimage_margintop = models.CharField(max_length=4, blank=True, null=True) + slideshowimage_marginleft = models.CharField(max_length=4, blank=True, null=True) + + + + class Meta: + ordering = ('-pub_date',) + + + def admin_thumbnail(self): + return force_unicode('<a href="%s"><img src="%s"></a>' % \ + (self.get_absolute_url(), self.get_small_square_url())) + admin_thumbnail.allow_tags = True + admin_thumbnail.short_description = 'Thumbnail' + + def get_local_medium_url(self): + return '%sflickr/med/%s/%s.jpg' %(settings.IMAGES_URL,self.pub_date.strftime("%Y"),self.flickr_id) + + def get_local_orig_url(self): + return '%sflickr/full/%s/%s.jpg' %(settings.IMAGES_URL,self.pub_date.strftime("%Y"),self.flickr_id) + + def get_local_slideshow_url(self): + return '%sslideshow/%s/%s.jpg' %(settings.IMAGES_URL,self.pub_date.strftime("%Y"),self.flickr_id) + def __unicode__(self): + return self.title + + def get_absolute_url(self): + return "/photo/%s/" % (self.id) + + def get_model_name(self): + return 'photo' + + def get_small_square_url(self): + return self.get_pic_url(size="small_square") + + def get_large_url(self): + return self.get_pic_url(size="large") + + def get_small_url(self): + return self.get_pic_url(size="small") + + def get_medium_url(self): + return self.get_pic_url(size="medium") + + def get_original_url(self): + #return self.get_pic_url(size="original") + return "http://farm%s.static.flickr.com/%s/%s_%s_o.jpg" % (self.flickr_farm, self.flickr_server, self.flickr_id, self.flickr_originalsecret) + + @property + def get_height(self): + im = Image.open('%sslideshow/%s/%s.jpg' %(settings.IMAGES_ROOT,self.pub_date.strftime("%Y"),self.flickr_id)) + xsize, ysize = im.size + return ysize + @property + def get_width(self): + im = Image.open('%sslideshow/%s/%s.jpg' %(settings.IMAGES_ROOT,self.pub_date.strftime("%Y"),self.flickr_id)) + xsize, ysize = im.size + cal = xsize-120 + return xsize + @property + def get_margin_top(self): + im = Image.open('%sslideshow/%s/%s.jpg' %(settings.IMAGES_ROOT,self.pub_date.strftime("%Y"),self.flickr_id)) + xsize, ysize = im.size + mtop = 340-(ysize/2) + return mtop + + @property + def get_margin_left(self): + im = Image.open('%sslideshow/%s/%s.jpg' %(settings.IMAGES_ROOT,self.pub_date.strftime("%Y"),self.flickr_id)) + xsize, ysize = im.size + mtop = 500-(xsize/2) + return mtop + + @property + def flickr_link(self): + return '%s%s/' %('http://www.flickr.com/photos/luxagraf/', self.flickr_id) + + @property + def is_portait(self): + if int(self.slideshowimage_height) > int(self.slideshowimage_width): + return True + else: + return False + def get_pic_url(self, size='small'): + # small_square=75x75 + # thumb=100 on longest side + # small=240 on longest side + # medium=500 on longest side + # large=1024 on longest side + # original=duh + + base_url = "http://static.flickr.com" + size_char='s' # default to small_square + + if size == 'small_square': + size_char='_s' + elif size == 'thumb': + size_char='_t' + elif size == 'small': + size_char='_m' + elif size == 'medium': + size_char='' + elif size == 'large': + size_char='_b' + elif size == 'original': + size_char='_o' + + return "http://farm%s.static.flickr.com/%s/%s_%s%s.jpg" % (self.flickr_farm, self.flickr_server, self.flickr_id, self.flickr_secret, size_char) + + def get_tumble_image(self): + return "%s/crops/%s/%s.jpg" %(settings.IMAGES_URL, self.pub_date.strftime("%Y/%b").lower(), self.id) + + + def get_previous_published(self): + return self.get_previous_by_pub_date() + + def get_next_published(self): + return self.get_next_by_pub_date() + + def comment_period_open(self): + return self.enable_comments and datetime.datetime.today() - datetime.timedelta(30) <= self.pub_date + + def save(self, *args, **kwargs): + super(Photo, self).save() + +class PhotoGallery(models.Model): + set_id = models.CharField(blank=True, max_length=300) + set_title = models.CharField(blank=True, max_length=300) + set_desc = models.TextField(blank=True, null=True) + set_slug = models.CharField(blank=True, max_length=300) + primary = models.CharField(blank=True, max_length=300) + photos = models.ManyToManyField(Photo) + location = models.ForeignKey(Location, null=True) + region = models.ForeignKey(Region, null=True) + pub_date = models.DateTimeField(null=True) + + class Meta: + ordering = ('-pub_date','id') + verbose_name_plural = 'Photo Galleries' + get_latest_by = 'pub_date' + + + def __unicode__(self): + return self.set_title + + def get_main_image(self): + return "%sgallery_thumbs/%s.jpg" % (settings.IMAGES_URL, self.id) + + def get_absolute_url(self): + return "/photos/galleries/%s/" % (self.set_slug) + + +class PhotoGallerySitemap(Sitemap): + changefreq = "never" + priority = 0.7 + + def items(self): + return PhotoGallery.objects.all() + + def lastmod(self, obj): + return obj.pub_date + |