import datetime import Image from django.contrib.gis.db import models from django.contrib.syndication.feeds import Feed from django.contrib.sitemaps import Sitemap from django.utils.encoding import force_unicode from django.conf import settings from tagging.fields import TagField from tagging.models import Tag 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 = TagField() 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('' % \ (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) 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_tags(self): return Tag.objects.get_for_object(self) 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): self.lat = self.gps.split(',')[0] self.lon = self.gps.split(',')[1] 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 PhotoSitemap(Sitemap): changefreq = "never" priority = 0.7 def items(self): return Photo.objects.all() def lastmod(self, obj): return obj.pub_date