def post(self, page_title): title = page_title_str(page_title) if self.user and valid_post(title): content = self.request.get('content') Post.submit(title, content) self.redirect('/%s' % title) elif self.user: content = self.request.get('content') Post.submit(title, content) self.redirect('/%s' % title) else: self.redirect('/')
def _handle_call_out(self, post, session): value, user = None, None hashtags = [tag.rstrip(".,!?:;").lower() for tag in post.text.split() if tag.startswith("#")] values = [] for tag in hashtags: if tag in self.valuesDict: values.append(self.valuesDict[tag]) mentioned_users = [name.strip("@.,!?:;<>") for name in post.text.split() if name.startswith("<@")] users = [] for user_id in mentioned_users: user = self.slack.get_user_name(user_id) if user: users.append(user) if len(values) == 0 or len(users) == 0: return None if not self._post_length_valid(post.text): return post.react('x') poster_username = self.slack.get_user_name(post.poster) post_obj = Post(poster_username, post.text, post.timestamp, post.channel) session.add(post_obj) for value in values: post_obj.values.append(PostValue(value)) for user in users: post_obj.users.append(PostUser(user)) return post.react("white_check_mark")
def post(self, page_title): title = page_title_str(page_title) if self.user and valid_post(title): post = Post.by_title(title) post.content = self.request.get("content") post.put() # time.sleep(5) self.redirect('/%s' % title) elif self.user: content = self.request.get("content") Post.submit(title, content) # time.sleep(5) self.redirect('/%s' % title) else: self.redirect('/')
def get(self, page_title): title = page_title_str(page_title) if self.user and valid_post(title): self.render('editpage.html', content = Post.by_title(title).content) elif self.user and valid_title(title): self.render('editpage.html') else: self.redirect('/')
def get_leaders_table(self, session, value, date, month, year): leaders = Post.leaders_by_value(session, value, date, month, year).all() if len(leaders) == 0: return None table = new_left_aligned_table(["User", "# Posts"]) for user in leaders: table.add_row([user[0], user[1]]) return table
def _generate_list(self, post, session): tokens = [token.rstrip(".,!?:;").lower() for token in post.text.split()] if (tokens[0].startswith("valuebot")): del(tokens[0]) del(tokens[0]) # get rid of 'list' token length = len(tokens) now = datetime.datetime.now() if length < 1: return None leaders, user, value, date, month, year = False, None, None, None, None, None subject = None if tokens[0] == "leaders": leaders = True del(tokens[0]) length -= 1 if length < 1: # default to this month month = now.month year = now.year subject = "all" if not subject: subject = tokens[0] if not self.is_admin(post.poster) and subject != "me" and subject != "@me": return post.react("x") if (subject == "me" or subject == "@me") and not leaders: user = self.slack.get_user_name(post.poster) elif subject.startswith("@") and not leaders: user = subject.lstrip("@") elif subject in self.values or subject == "all": value = subject elif subject in self.valuesDict: value = self.valuesDict[subject] elif not leaders: user = subject if length >= 2: date_token = tokens[1] if date_token == "today": date = now.day month = now.month year = now.year elif date_token == "all": date = None elif date_token in MONTHS: month = MONTHS.index(date_token) + 1 if length >= 3: year_token = tokens[2] try: year = int(year_token) except ValueError: return post.respond("Invalid year '{}'".format(year_token)) else: year = now.year if now.month < date: year -= 1 reaction = post.react("ok_hand") if leaders and value: table = self.get_leaders_table(session, value, date, month, year) title = "Leaders in {}{}".format(value, date_clause(date, month, year)) if table: content = table.get_string() else: content = "No leaders found" message = SlackPreformattedMessage(post.poster, content, title) return [reaction, message] else: posts = None title = "Posts " if user: posts = Post.posts_by_user(session, user, date, month, year).all() title += "about @{}".format(user) elif value: posts = Post.posts_by_value(session, value, date, month, year).all() title += "in {}".format(value) title += date_clause(date, month, year) response = [reaction] if posts: table = new_left_aligned_table(["Info", "Message", "Date"]) num_in_table = 0 num_posts = len(posts) first_table = True for idx, p in enumerate(posts): table.add_row([ p.users_value_info_for_table, p.message_info_for_table(self.slack), p.posted_at_formatted]) num_in_table += 1 if num_in_table == POSTS_PER_TABLE or idx == num_posts - 1: if first_table: msg = SlackPreformattedMessage(post.poster, table.get_string(), title) first_table = False else: msg = SlackPreformattedMessage(post.poster, table.get_string()) response.append(msg) table = new_left_aligned_table(["Info", "Message", "Date"], False) num_in_table = 0 else: message = SlackPreformattedMessage(post.poster, "No posts found", title) response.append(message) return response return None
def get(self, page_id): post = Post.by_title(str(page_id.replace('/',''))) if post: self.render('wikipage.html', post = post) else: self.redirect('/_edit/%s' % str(page_id.replace('/','')))
def valid_post(title): return title and Post.by_title(title) is not None