From 6c570f7bfd7d4e81f4e44a3b7aea7c092c4c7389 Mon Sep 17 00:00:00 2001 From: Rafael Caricio Date: Sun, 31 Jul 2011 17:03:20 -0300 Subject: [PATCH] Bugfix in association with facebook. --- myimgat/apps/wall/models.py | 33 +++++++++++++++++++-------------- myimgat/apps/wall/views.py | 7 ++++++- myimgat/providers/fb.py | 2 +- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/myimgat/apps/wall/models.py b/myimgat/apps/wall/models.py index 6a91335..d009620 100644 --- a/myimgat/apps/wall/models.py +++ b/myimgat/apps/wall/models.py @@ -26,10 +26,10 @@ class Provider(models.Model): username = models.CharField(default=DEFAULT_USER_WALL, blank=True, max_length=100, db_index=True) provider_name = models.CharField(max_length=100) - update_at = models.DateTimeField(auto_now_add=True) + update_at = models.DateTimeField() def is_expired(self): - return datetime.now() > self.update_at + return datetime.now() >= self.update_at def mark_as_updated(self): self.update_at = datetime.now() + timedelta(days=UPDATE_ALBUMS_DAYS_INTERVAL) @@ -38,7 +38,7 @@ def create_provider(provider_type): def _create_provider(sender, instance, created, **kwargs): if created and provider_type.lower() == instance.provider.lower(): Provider.objects.create(username=instance.user.username, provider_name=provider_type, - update_at=datetime.now() + timedelta(days=UPDATE_ALBUMS_DAYS_INTERVAL)) + update_at=datetime.now() - timedelta(minutes=1)) return True return _create_provider @@ -55,7 +55,7 @@ def get_username_and_providers(self, username): username = user.username providers = Provider.objects.filter(username=user.username) except User.DoesNotExist: - providers = [Provider(provider_name='Google', update_at=datetime.now() - timedelta(days=1))] + providers = [] return username, providers class AlbumManager(models.Manager, ProvidersHelper): @@ -64,19 +64,24 @@ def load(self, username, force_update=False): albums = Album.objects.filter(username=username) if not force_update: providers = filter(lambda p: p.is_expired(), providers) - if (not albums or force_update) and providers: + + if not providers and not albums: + providers = [Provider(provider_name='Google')] + + if not albums or force_update or providers: albums = [] for provider in providers: try: remote_provider = providers_classes['%sImageProvider' % provider.provider_name](username) for album_base in remote_provider.load_albums(): - album, created = Album.objects.get_or_create(identifier=album_base.identifier, defaults={ - 'username': username, + album, created = Album.objects.get_or_create( + identifier=album_base.identifier, + username=username, + defaults={ 'url': album_base.url, 'title': album_base.title, }) albums.append(album) - provider.mark_as_updated() except: logging.error("Problem on loading info from provider [%s]" % str(provider)) return albums @@ -94,30 +99,30 @@ class Meta: proxy = True class PhotoManager(models.Manager, ProvidersHelper): - def load(self, album, force_update=False): username, providers = self.get_username_and_providers(album.username) photos = Photo.objects.filter(album=album) if not force_update: providers = filter(lambda p: p.is_expired(), providers) - if (not photos or force_update) and providers: + if not photos or force_update or providers: photos = [] for provider in providers: try: remote_provider = providers_classes['%sImageProvider' % provider.provider_name](username) for photo_base in remote_provider.load_photos(album): - photo, created = Photo.objects.get_or_create(url=photo_base.url, defaults={ + photo, created = Photo.objects.get_or_create( + url=photo_base.url, + album=album, + defaults={ 'title': photo_base.title, 'width': photo_base.width, 'height': photo_base.height, 'thumbnail': photo_base.thumbnail, - 'album': album, }) photos.append(photo) - provider.mark_as_updated() except: logging.error("Problem on loading photos from provider [%s]" % str(provider.provider_name)) - return photos + return photos class Photo(models.Model): diff --git a/myimgat/apps/wall/views.py b/myimgat/apps/wall/views.py index f4a7103..032f6d6 100644 --- a/myimgat/apps/wall/views.py +++ b/myimgat/apps/wall/views.py @@ -11,7 +11,7 @@ from providers.base import format_url -from models import AlbumProxy, PhotoProxy, Photo, CroppedPhoto +from models import AlbumProxy, PhotoProxy, Photo, CroppedPhoto, Provider DEFAULT_USER_WALL = getattr(settings, "DEFAULT_USER_WALL", "heynemann") THUMBOR_SERVER = getattr(settings, "THUMBOR_SERVER", 'http://%d.thby.nl') @@ -70,6 +70,11 @@ def albums(request, username=None, extension="json"): data.append(album_data) data = dumps(data) + providers = Provider.objects.filter(username=request.user.username) + for provider in providers: + provider.mark_as_updated() + provider.save() + if extension == "json": return HttpResponse(data, mimetype="application/json") elif extension == "jsonp": diff --git a/myimgat/providers/fb.py b/myimgat/providers/fb.py index ccf6be8..b067be5 100644 --- a/myimgat/providers/fb.py +++ b/myimgat/providers/fb.py @@ -19,7 +19,7 @@ def __init__(self, username, token=None): self.username = username self.token = token if not self.token: - user_auth = UserSocialAuth.objects.get(user__username=self.username) + user_auth = UserSocialAuth.objects.get(user__username=self.username, provider="facebook") self.token = user_auth.extra_data['access_token'] def load_albums(self):