def add_member(self, user): from models.blip import Blip if MeetingMember.gql('WHERE meeting = :1 AND user =:2', self, user).get(): logging.warn("Already added user %s to meeting %s" % (user, self.key())) return mm = MeetingMember(meeting=self, user=user) mm.put() Blip.deliver_legacy_to_meeting_user(self, user) self.put()
def get(self, blip_key=None): blip = Blip.get(blip_key) if blip is None: return self.error(404) login_user = self.get_current_user() if blip.meeting and not blip.meeting.has_member(login_user): return self.error(401) user = blip.user _, profile = Profile.get_or_create_from_user(user) is_self = user == login_user has_followed = False if not is_self: has_followed = Follow.gql('WHERE from_user = :1 AND to_user = :2', login_user, user).get() is not None followers = Follow.who_subscribe_you(user) follower_profiles = [] for f in followers: c, p = Profile.get_or_create_from_user(f.from_user) follower_profiles.append(p) followees = Follow.your_subscribers(user) followee_profiles = [] for f in followees: c, p = Profile.get_or_create_from_user(f.to_user) followee_profiles.append(p) return self.render('blip_item.html', locals())
def post(self): logging.debug('delivering jokes') blip_key = self.request.get('key') if blip_key: blip = Blip.get(blip_key) blip.deliver() else: logging.error('blip key must be provided')
def get_or_create_from_user(cls, user, notify=True): if isinstance(user, UserAuth): user = user.get_user() profile = ProfileByEmailView(user.email()).get() created = False if not profile: source = getattr(user, 'source', 'local') nickname = user.nickname() at_index = nickname.find('@') if at_index >= 0: nickname = nickname[:at_index] adder = 1 orig_nick = nickname for p in Profile.all(): logging.info(p.nickname) logging.info("profiles above") for i in xrange(1000): logging.info('finding nickname %s' % nickname) #if not Profile.gql('WHERE nickname=:1', nickname).get(): if not ProfileByNickView(nickname).get(): logging.info('not found break') break nickname = '%s_%s' % (orig_nick, adder) adder += 1 profile = Profile(user_email=user.email(), nickname=nickname, source=getattr(user, 'source', None), fullname=nickname) created = True profile.put() if created and notify: p = ProfileByEmailView(settings.NEWS_USER).get() if p: Blip.new(p.get_user(), '@%s joined.' % profile.nickname) return created, profile
def post(self, meeting_key=None): from models.blip import Blip login_user = self.get_current_user() m = Meeting.get(meeting_key) if m is None: return self.error(404) if not m.has_member(login_user): return self.error(401) content = self.request.get('text', '').strip() attachment = self.request.get('attachment', '').strip() blip = Blip.new(login_user, content, attachment=attachment, meeting=m) return self.redirect(m.href())
def delete_member(self, user): from models.blip import Blip, BlipLink mm = MeetingMember.gql('WHERE meeting = :1 AND user =:2', self, user).get() if mm: mm.delete() for blip in Blip.gql('WHERE meeting = :1 AND user != :2', self, user): #bl = BlipLink.gql('WHERE blip = :1', blip).get() bl_key = db.GqlQuery('select __key__ from BlipLink WHERE blip = :1', blip).get() logging.info('bl key %s' % bl_key) if bl_key: #bl.delete() db.delete(bl_key) self.put() else: logging.warn("User %s is not found in meeting %s to delete" % (user, self))
def get(self, blip_key=None): login_user = self.get_current_user() blip = Blip.get(blip_key) if blip is None: return self.error(404) if blip.user != login_user: return self.error(401) m = blip.meeting if m is None: return self.error(404) q = BlipLink.gql('WHERE blip = :1', blip) for link in q: link.delete() blip.delete() return self.redirect_back()
def get(self, user_name=None): login_user = self.get_current_user() if user_name is None: return self.redirect('/signin') profile = Profile.gql('WHERE nickname=:1', user_name).get() if not profile or not profile.is_active: return self.error(404) user = profile.get_user() is_self = user == login_user has_followed = False if not is_self: has_followed = Follow.gql('WHERE from_user = :1 AND to_user = :2', login_user, user).get() is not None followers = Follow.who_subscribe_you(user) follower_profiles = [] for f in followers: c, p = Profile.get_or_create_from_user(f.from_user) follower_profiles.append(p) followees = Follow.your_subscribers(user) followee_profiles = [] for f in followees: c, p = Profile.get_or_create_from_user(f.to_user) followee_profiles.append(p) try: page = int(self.request.get('page', '1')) except ValueError: page = 1 has_followed = Follow.gql('WHERE from_user = :1 AND to_user =:2', login_user, user).get() pagesize = settings.BLIP_PAGE_SIZE paginator = SimplePaginator(Blip.qs_for_author(user), page, pagesize) blips = each_profiles(paginator.object_list) return self.render('user_page.html', locals())
def post(self): errors = [] title = self.request.get('title', '').strip() if not title: errors.append('Title cannot be empty') content = self.request.get('content', '').strip() if not content: errors.append('Content cannot be empty') if errors: return self.render('article_add.html', locals()) user = self.get_current_user() article = Article.new(user, title, content) full_article_url = urlparse.urljoin(self.request.uri, article.href()) blip = Blip.new(user, u'added article %s %s' % (article.title, full_article_url)) return self.redirect(article.href())
def post(self, article_key=None): article = Article.get(article_key) if article is None or not article.is_active: return self.error(404) errors = [] content = self.request.get('content', '').strip() if not content: errors.append('Content cannot be empty') if errors: return self.render('revision_add.html', locals()) user = self.get_current_user() rev = ArticleRevision(user=user, article=article, content=content) rev.put() if user == article.creator: article.current_rev_key = str(rev.key()) article.put() full_rev_url = urlparse.urljoin(self.request.uri, rev.href()) blip = Blip.new(user, u'edited article %s %s' % (article.title, full_rev_url)) return self.redirect(article.href())
def get(self, meeting_key=None): from models.blip import Blip login_user = self.get_current_user() meeting = Meeting.get(meeting_key) if meeting is None or not meeting.is_active: return self.error(404) if not meeting.has_member(login_user): return self.error(401) c, p = Profile.get_or_create_from_user(meeting.creator) admin_profiles = [p] member_profiles = [] members = meeting.members(include_creator=False) for u in members: c, p = Profile.get_or_create_from_user(u) member_profiles.append(p) followees = Follow.your_subscribers(login_user) followee_profiles = [] for f in followees: if f.to_user not in members: c, p = Profile.get_or_create_from_user(f.to_user) followee_profiles.append(p) try: page = int(self.request.get('page', '1')) except ValueError: page = 1 pagesize = settings.ROOM_PAGE_SIZE paginator = SimplePaginator(Blip.qs_for_meeting(meeting), page, pagesize) blips = each_profiles(paginator.object_list) return self.render('meeting_item.html', locals())
def load(self): from models.blip import Blip q = Blip.qs_for_meeting(self.meeting, order='date_created') text = ' '.join(blip.text for blip in q.fetch(3)) return text
def post(self): content = self.request.get('text', '').strip() attachment = self.request.get('attachment', '').strip() blip = Blip.new(self.get_current_user(), content, attachment) return self.redirect('/home')