def update_or_insert(cls, id = None, suggestion = None, user = None, done = False, active = True): if not isinstance(user, User): raise TypeError() if suggestion is None: raise TypeError() if id is not None: # como se ha pasado un id, queremos modificar una alerta existente alert = cls.objects.get_by_id_user(id, user) if alert is None: return None if alert.is_active() != active: alert.toggle_active() if alert.is_done() != done: alert.toggle_done() alert.put() return alert else: alert = AlertSuggestion(suggestion = suggestion, user = user) if done: alert.toggle_done() if not active: alert.toggle_active() alert.put() timeline = UserTimelineSystem(user = user, instance = alert, msg_id=200) timeline.put() return alert
def insert_list(cls, user, name, description = None, instances=[]): ''' Crea una nueva lista, en el caso de que exista una con ese nombre, se añaden las alertas :param user: usuario :type user: :class:`geouser.models.User` :param name: nombre de la lista :type name: :class:`string` :param description: descripcion de la lista :type description: :class:`string` :param instances: objetos a añadir a la lista :type instances: :class:`geoalert.models.Alert` ''' list = user.listalert_set.filter('name =', name).get() if list is not None: # la lista con ese nombre ya existe, la editamos if description is not None: list.description = description keys = set(list.keys) keys |= set([instance.key() for instance in instances]) list.keys = [k for k in keys] list.put() return list # TODO: debe haber una forma mejor de quitar repetidos, estamos atados a python2.5 :(, los Sets keys= set([instance.key() for instance in instances]) list = ListAlert(name=name, user=user, description=description, keys=[k for k in keys]) list.put() timeline = UserTimelineSystem(user=user.key(), msg_id=250, instance=list) timeline.put() return list
def insert_list(cls, user, name, description=None, instances=None): ''' Crea una nueva lista de usuarios, en el caso de que exista una con ese nombre, se añaden los usuarios :param user: usuario :type user: :class:`geouser.models.User` :param name: nombre de la lista :type name: :class:`string` :param description: descripcion de la lista :type description: :class:`string` :param instances: objetos a añadir a la lista :type instances: :class:`geouser.models.User` ''' list = user.listuser_set.filter('name =', name) if list is not None: if description is not None: list.description = description keys = set(list.keys) keys |= set([instance.key() for instance in instances]) list.keys = [k for k in keys] list = ListUser(name=name, user=user, description=description, keys=[k for k in keys]) list.put() timeline = UserTimelineSystem(user=user.key(), msg_id=150, instance=list) timeline.put() return list
def done_alert(sender, **kwargs): from models import Alert, AlertSuggestion if isinstance(sender, Alert): timeline = UserTimelineSystem(parent = sender.user, user = sender.user, instance = sender, msg_id=203) elif isinstance(sender, AlertSuggestion): timeline = UserTimelineSystem(parent = sender.user, user = sender.user, instance = sender, msg_id=323, visible=False) else: return timeline.put()
def deleted_following_suggestion(sender, **kwargs): from models import AlertSuggestion timeline = UserTimelineSystem(parent = kwargs['user'], user = kwargs['user'], instance = sender, msg_id=304, visible=False) p = timeline.put_async() alertsuggestion = AlertSuggestion.objects.get_by_sugid_user(sender.id, kwargs['user']) if alertsuggestion is not None: alertsuggestion.delete() sender.counters.set_followers(-1) p.get_result()
def modified_list(sender, **kwargs): if isinstance(sender, ListRequested): timeline = UserTimelineSystem(parent=kwargs['querier'], user=kwargs['querier'], msg=351, _vis=sender._get_visibility()) from georemindme.tasks import NotificationHandler NotificationHandler().list_followers_notify(sender) timeline.put() if sender.user is not None: if kwargs['querier'].key() != sender.user.key(): from geouser.models_utils import _Notification notification = _Notification(parent=sender.user, owner=sender.user, timeline=timeline) notification.put()
def modified_alert(sender, **kwargs): ''' Se modifica una alerta ''' from models import Alert, AlertSuggestion if isinstance(sender, Alert): timeline = UserTimelineSystem(parent=sender.user, user = sender.user, instance = sender, msg_id=201) elif isinstance(sender, AlertSuggestion): timeline = UserTimelineSystem(parent=sender.user, user = sender.user, instance = sender, msg_id=321, visible=False) else: return timeline.put()
def new_following_suggestion(sender, **kwargs): timeline = UserTimelineSystem(parent = kwargs['user'], user = kwargs['user'], instance = sender, msg_id=303, visible=False) p = timeline.put_async() sender.counters.set_followers(+1) p.get_result() from google.appengine.ext.deferred import defer defer(sender.user.settings.notify_suggestion_follower, sender.key(), kwargs['user'].key()) if sender.user is not None: if kwargs['user'].key() != sender.user.key(): from geouser.models_utils import _Notification notification = _Notification(parent=sender.user, owner=sender.user, timeline=timeline) notification.put()
def new_alert(sender, **kwargs): ''' Se registra una nueva alerta ''' from models import Alert, AlertSuggestion if isinstance(sender, Alert): timeline = UserTimelineSystem(parent=sender.user, user = sender.user, instance = sender, msg_id=200) elif isinstance(sender, AlertSuggestion): timeline = UserTimelineSystem(parent=sender.user, user = sender.user, instance = sender, msg_id=320, visible=False) else: return timeline.put() sender.user.counters.set_alerts(value=+1)
def notify_followers(self): ''' Crea un timelineSystem por cada usuario que sigue a esta lista ''' if not self._is_private(): if ListFollowersIndex.all().ancestor(self.key()).count() == 0: return True for list in ListFollowersIndex.all().ancestor(self.key()): for key in list.users: timeline = UserTimelineSystem(user=key, msg_id=352, instance=self) timeline.put() return True
def deleted_alert(sender, **kwargs): ''' Se borra una alerta ''' from models import Alert, AlertSuggestion if isinstance(sender, Alert): timeline = UserTimelineSystem(parent = sender.user, user = sender.user, instance = sender, msg_id=202) elif isinstance(sender, AlertSuggestion): timeline = UserTimelineSystem(parent = sender.user, user = sender.user, instance = sender, msg_id=322, visible=False) else: return timeline.put() sender.user.counters.set_alerts(value=-1)
def deleted_following_suggestion(sender, **kwargs): from models import AlertSuggestion timeline = UserTimelineSystem(parent=kwargs['user'], user=kwargs['user'], instance=sender, msg_id=304, visible=False) p = timeline.put_async() alertsuggestion = AlertSuggestion.objects.get_by_sugid_user( sender.id, kwargs['user']) if alertsuggestion is not None: alertsuggestion.delete() sender.counters.set_followers(-1) p.get_result()
def new_suggestion(sender, **kwargs): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=300) timelinePublic = UserTimeline(parent=sender.user, user=sender.user, instance=sender, msg_id=300, _vis=sender._get_visibility()) p = db.put_async([timeline]) sender.user.counters.set_suggested() if sender._is_public(): from google.appengine.ext.deferred import defer try: defer(sender.insert_ft, _queue="fusiontables") except: from georemindme.models_utils import _Do_later_ft later = _Do_later_ft(instance_key=sender.key()) later.put() from libs.oauth2 import Token from geoauth.clients.twitter import TwitterClient try: tc = TwitterClient(token=Token( key=settings.OAUTH['twitter']['geosuggest_key'], secret=settings.OAUTH['twitter']['geosuggest_secret'])) msg = "%(name)s %(url)s #grm" % { 'name': sender.name[:105], 'url': sender.short_url, } tc.send_tweet(msg, sender.poi.location) except Exception, e: logging.error('ERROR AUTOCOMPARTIENDO TWITTER sugerencia %s: %s' % (sender.id, e.message))
def deleted_following_list(sender, **kwargs): timeline = UserTimelineSystem(parent=kwargs['user'], user=kwargs['user'], instance=sender, msg_id=354, visible=False) put = db.put_async(timeline) sender.counters.set_followers(-1) put.get_result()
def new_following_suggestion(sender, **kwargs): timeline = UserTimelineSystem(parent=kwargs['user'], user=kwargs['user'], instance=sender, msg_id=303, visible=False) p = timeline.put_async() sender.counters.set_followers(+1) p.get_result() from google.appengine.ext.deferred import defer defer(sender.user.settings.notify_suggestion_follower, sender.key(), kwargs['user'].key()) if sender.user is not None: if kwargs['user'].key() != sender.user.key(): from geouser.models_utils import _Notification notification = _Notification(parent=sender.user, owner=sender.user, timeline=timeline) notification.put()
def update_or_insert(cls, id = None, name = None, description = None, date_starts = None, date_ends = None, poi = None, user = None, done = False, active = True): ''' Crea una alerta nueva, si recibe un id, la busca y actualiza. :returns: :class:`geoalert.models.Alert` :raises: :class:`geoalert.exceptions.ForbiddenAccess`, :class:`TypeError` ''' if not isinstance(user, User): raise TypeError() if poi is None: raise TypeError() if id is not None: # como se ha pasado un id, queremos modificar una alerta existente alert = cls.objects.get_by_id_user(id, user) if alert is None: return None alert.name = name alert.description = description alert.date_starts = date_starts alert.date_ends = date_ends alert.poi = poi if alert.is_active() != active: alert.toggle_active() if alert.is_done() != done: alert.toggle_done() alert.put() return alert else: alert = Alert(name = name, description = description, date_starts = date_starts, date_ends = date_ends, poi = poi, user = user) if done: alert.toggle_done() if not active: alert.toggle_active() alert.put() timeline = UserTimelineSystem(user = user, instance = alert, msg_id=200) timeline.put() return alert
def new_list(sender, **kwargs): if isinstance(sender, ListAlert): timeline = UserTimelineSystem(parent=sender.user.key(), user=sender.user.key(), msg_id=250, instance=sender) elif isinstance(sender, ListUser): timeline = UserTimelineSystem(parent=sender.user.key(), user=sender.user.key(), msg_id=150, instance=sender) elif isinstance(sender, ListSuggestion): timelinePublic = UserTimeline(parent=sender.user, user=sender.user, instance=sender, msg_id=350, _vis=sender._get_visibility()) timelinePublic.put() timeline = UserTimelineSystem(parent=sender.user, user=sender.user.key(), msg_id=350, instance=sender) elif isinstance(sender, ListRequested): timelinePublic = UserTimeline(parent=sender.user, user=sender.user, instance=sender, msg_id=360, _vis=sender._get_visibility()) timelinePublic.put() timeline = UserTimelineSystem(parent=sender.user, user=sender.user.key(), msg_id=360, instance=sender) else: return timeline.put()
def new_following_list(sender, **kwargs): timeline = UserTimelineSystem(parent=kwargs['user'], user=kwargs['user'], instance=sender, msg_id=353, visible=False) put = db.put_async(timeline) sender.counters.set_followers(+1) put.get_result() if sender.user is not None: if kwargs['user'].key() != sender.user.key(): from geouser.models_utils import _Notification notification = _Notification(parent=sender.user, owner=sender.user, timeline=timeline) notification.put()
def put(self): if self.sender.key() == self.to.key(): return if not self.is_saved(): super(Invitation, self).put() from geouser.models_acc import UserTimelineSystem timeline = UserTimelineSystem(parent=self.sender, user=self.sender, msg_id=110, instance=self) from geouser.models_utils import _Notification notification = _Notification(parent=self.to, owner=self.to, timeline=timeline) put = db.put_async([timeline, notification]) if self.to.settings.notification_invitation: from geomail import send_notification_invitation send_notification_invitation(self.to.email, self.sender, self) put.get_result() else: super(Invitation, self).put()
def new_comment(sender, **kwargs): from google.appengine.ext.deferred import defer from geoalert.models import Suggestion from geolist.models import ListSuggestion from geouser.models_acc import UserTimeline, UserTimelineSystem sender.instance.put(from_comment=True) timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=120, visible=False) from google.appengine.ext import db p = db.put_async([timeline]) if hasattr(sender.instance, '_vis'): if isinstance(sender.instance, Suggestion): timelinePublic = UserTimeline( parent=sender.user, user=sender.user, instance=sender, msg_id=120, _vis=sender.instance._get_visibility()) timelinePublic.put() if isinstance(sender.instance, ListSuggestion): timelinePublic = UserTimeline( parent=sender.user, user=sender.user, instance=sender, msg_id=121, _vis=sender.instance._get_visibility()) timelinePublic.put() if isinstance(sender.instance, Suggestion) or isinstance( sender.instance, ListSuggestion): defer(sender.user.settings.notify_suggestion_comment, sender.key()) sender.instance.counters.set_comments() p.get_result() if sender.instance.user is not None: if sender.user.key() != sender.instance.user.key(): from geouser.models_utils import _Notification notification = _Notification(parent=sender.instance.user.key(), owner=sender.instance.user.key(), timeline=timeline) notification.put()
def new_list(sender, **kwargs): if isinstance(sender, ListAlert): timeline = UserTimelineSystem(parent=sender.user.key(), user=sender.user.key(), msg_id=250, instance=sender) elif isinstance(sender, ListUser): timeline = UserTimelineSystem(parent=sender.user.key(), user=sender.user.key(), msg_id=150, instance=sender) elif isinstance(sender, ListSuggestion): timelinePublic = UserTimeline(parent=sender.user, user = sender.user, instance = sender, msg_id=350, _vis=sender._get_visibility()) timelinePublic.put() timeline = UserTimelineSystem(parent=sender.user, user=sender.user.key(), msg_id=350, instance=sender) elif isinstance(sender, ListRequested): timelinePublic = UserTimeline(parent=sender.user, user = sender.user, instance = sender, msg_id=360, _vis=sender._get_visibility()) timelinePublic.put() timeline = UserTimelineSystem(parent=sender.user, user=sender.user.key(), msg_id=360, instance=sender) else: return timeline.put()
def done_alert(sender, **kwargs): from models import Alert, AlertSuggestion if isinstance(sender, Alert): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=203) elif isinstance(sender, AlertSuggestion): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=323, visible=False) else: return timeline.put()
def modified_alert(sender, **kwargs): ''' Se modifica una alerta ''' from models import Alert, AlertSuggestion if isinstance(sender, Alert): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=201) elif isinstance(sender, AlertSuggestion): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=321, visible=False) else: return timeline.put()
def deleted_alert(sender, **kwargs): ''' Se borra una alerta ''' from models import Alert, AlertSuggestion if isinstance(sender, Alert): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=202) elif isinstance(sender, AlertSuggestion): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=322, visible=False) else: return timeline.put() sender.user.counters.set_alerts(value=-1)
def new_alert(sender, **kwargs): ''' Se registra una nueva alerta ''' from models import Alert, AlertSuggestion if isinstance(sender, Alert): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=200) elif isinstance(sender, AlertSuggestion): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=320, visible=False) else: return timeline.put() sender.user.counters.set_alerts(value=+1)
def deleted_place(sender, **kwargs): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=452) timeline.put()
def modified_privateplace(sender, **kwargs): timeline = UserTimelineSystem(parent=sender.user, user=sender.user, instance=sender, msg_id=401) timeline.put()
def modified_privateplace(sender, **kwargs): timeline = UserTimelineSystem(parent = sender.user, user = sender.user, instance = sender, msg_id=401) timeline.put()
def deleted_place(sender, **kwargs): timeline = UserTimelineSystem(parent = sender.user, user = sender.user, instance = sender, msg_id=452) timeline.put()