def parse_msg(xml): if not xml: return None parser = ElementTree.fromstring(xml) id_node = parser.find('MsgId') msg_id = id_node and int(id_node.text) or 0 msg_type = decode(parser.find('MsgType').text) touser = decode(parser.find('ToUserName').text) fromuser = decode(parser.find('FromUserName').text) create_at = int(parser.find('CreateTime').text) msg = ObjectDict( mid=msg_id, type=msg_type, touser=touser, fromuser=fromuser, time=create_at ) if msg_type == MSG_TYPE_TEXT: msg.content = decode(parser.find('Content').text) elif msg_type == MSG_TYPE_LOCATION: msg.location_x = decode(parser.find('Location_X').text) msg.location_y = decode(parser.find('Location_Y').text) msg.scale = int(parser.find('Scale').text) msg.label = decode(parser.find('Label').text) elif msg_type == MSG_TYPE_IMAGE: msg.picurl = decode(parser.find('PicUrl').text) elif msg_type == MSG_TYPE_LINK: msg.title = decode(parser.find('Title').text) msg.description = decode(parser.find('Description').text) msg.url = decode(parser.find('Url').text) elif msg_type == MSG_TYPE_EVENT: msg.event = decode(parser.find('Event').text) msg.event_key = decode(parser.find('EventKey').text) return msg
def post(self): o = ObjectDict() o.title = self.get_argument("title", None) o.slug = self.get_argument("slug", None) o.avatar = self.get_argument("avatar", None) o.description = self.get_argument("description", None) o.fgcolor = self.get_argument("fgcolor", None) o.bgcolor = self.get_argument("bgcolor", None) o.header = self.get_argument("header", None) o.sidebar = self.get_argument("sidebar", None) o.footer = self.get_argument("footer", None) try: o.limit_reputation = int(self.get_argument("reputation", 0)) except: o.limit_reputation = 0 try: o.limit_role = int(self.get_argument("role", 0)) except: o.limit_role = 0 if not (o.slug and o.title and o.description): self._context.message = "Please fill the required field" self.render("dashboard_node.html", node=o) return node = Node(**o) self.db.add(node) self.db.commit() self.redirect("/node/%s" % o.slug)
def respond(data, msg=None): parser = feedparser.parse(options.feed_url) articles = [] i = 0 for entry in parser.entries: if i > 9: break article = ObjectDict() article.title = entry.title article.description = entry.description[0:100] article.url = entry.link article.picurl = '' articles.append(article) i += 1 return articles
def respond(data, msg=None, bot=None): parser = feedparser.parse(options.feed_url) articles = [] i = 0 for entry in parser.entries: if i > 9: break article = ObjectDict() article.title = entry.title article.description = entry.description[0:100] article.url = entry.link article.picurl = '' articles.append(article) i += 1 return articles
def respond(data, msg=None): res = requests.get("http://www.v2ex.com/api/topics/latest.json") topics = json_decode(res.text) articles = [] i = 0 while i < 10: article = ObjectDict() article.title = topics[i]['title'] article.url = topics[i]['url'] if i == 0: article.picurl = 'http://openoceans.de/img/v2ex_logo_uranium.png' else: article.picurl = '' article.description = topics[i]['content_rendered'][0:100] articles.append(article) i += 1 return articles
def respond(data, msg=None, bot=None): res = requests.get("http://www.v2ex.com/api/topics/latest.json") topics = json_decode(res.text) articles = [] i = 0 while i < 10: article = ObjectDict() article.title = topics[i]['title'] article.url = topics[i]['url'] if i == 0: article.picurl = 'http://openoceans.de/img/v2ex_logo_uranium.png' else: article.picurl = '' article.description = topics[i]['content_rendered'][0:100] articles.append(article) i += 1 return articles
def respond(data, msg=None, bot=None, handler=None): myfus = handler.get_user_follows(msg.fromuser) post_query = handler.db.query(CoePost).filter( CoePost.username.in_(myfus) ).order_by(CoePost.created.desc()).limit(9) articles = [] for post in post_query: if post.is_ignore == 1: continue article = ObjectDict() article.title = post.topic article.description = rtitle(post.content,79) article.url = "%s/mps/post/%s?otoken=%s" % (handler.settings['server_base'], post.post_id,handler.encrypt_otoken(bot.id)) article.picurl = handler.get_1img_from_content(post.content) or handler.settings['mps_default_bg'] articles.append(article) return articles
def parse_msg(xml): if not xml: return None parser = ElementTree.fromstring(xml) msg_id = parse_node(parser, 'MsgId', get_uuid()) msg_type = parse_node(parser, 'MsgType') touser = parse_node(parser, 'ToUserName') fromuser = parse_node(parser, 'FromUserName') create_at = int(parse_node(parser, 'CreateTime', 0)) msg = ObjectDict( mid=msg_id, type=msg_type, touser=touser, fromuser=fromuser, time=create_at ) if msg_type == MSG_TYPE_TEXT: msg.content = parse_node(parser, 'Content') elif msg_type == MSG_TYPE_LOCATION: msg.location_x = parse_node(parser, 'Location_X') msg.location_y = parse_node(parser, 'Location_Y') msg.scale = int(parse_node(parser, 'Scale')) msg.label = parse_node(parser, 'Label') elif msg_type == MSG_TYPE_IMAGE: msg.picurl = parse_node(parser, 'PicUrl') elif msg_type == MSG_TYPE_VOICE: msg.media_id = parse_node(parser, 'MediaId') msg.format = parse_node(parser, 'Format') elif msg_type == MSG_TYPE_VIDEO: msg.media_id = parse_node(parser, 'MediaId') msg.thumb = parse_node(parser, 'ThumbMediaId') elif msg_type == MSG_TYPE_LINK: msg.title = parse_node(parser, 'Title') msg.description = parser.find('Description').text msg.url = parse_node(parser, 'Url') elif msg_type == MSG_TYPE_EVENT: msg.event = parse_node(parser, 'Event') msg.event_key = parse_node(parser, 'EventKey') msg.ticket = parse_node(parser, 'Ticket') if msg.event == 'LOCATION': msg.latitude = parse_node(parser, 'Latitude') msg.longitude = parse_node(parser, 'Longitude') msg.precision = parse_node(parser, 'Precision') return msg
def respond(data, msg=None, bot=None, handler=None): nodes = handler.db.query(CoeNode).filter( CoeNode.is_top == 1).order_by(CoeNode.created.asc()).limit(9) articles = [] for node in nodes: if node.is_hide == 1: continue article = ObjectDict() article.title = node.node_desc article.description = rtitle(node.node_intro,79) article.url = "%s/mps/post/new/%s?otoken=%s" % ( handler.settings['server_base'], node.node_name, handler.encrypt_otoken(bot.id)) article.picurl = '' articles.append(article) if len(articles)>1: articles[0].picurl = handler.settings['mps_default_bg'] return articles
def respond(data, msg=None, bot=None): headers = { 'Host' : 'www.oschina.net', 'Connection' : 'Keep-Alive', 'User-Agent' : 'OSChina.NET/1.7.4_1/Android/4.1/Nexus S/12345678' } res = requests.get("http://www.oschina.net/action/api/news_list", headers=headers) parser = ElementTree.fromstring(res.content) news_list = parser.find('newslist') articles = [] i = 0 for news in news_list.iter('news'): if i > 9: break article = ObjectDict() article.title = news.find('title').text article.description = article.title article.url = "http://www.oschina.net/news/%s" % news.find('id').text article.picurl = '' articles.append(article) i += 1 return articles
def on_message(self, message): if not self.current_user.is_authenticated(): self.write_message({"error": "logged_out"}) return False obj = loads(message) data = ObjectDict() if settings.DEBUG: print(obj) data.debug = True if obj.get("echo"): data.echo = obj["echo"] if obj.get("competition"): self.competition = obj["competition"] self._competition = Competition.objects.get(pk=self.competition) listeners.competitions[self.competition][ self.current_user.id].append(self) load_competition(self.competition) if obj.get("mode"): if (obj["mode"] != "compete" and self._competition.get_role( self.current_user) == "compete"): data.error = "Unauthorized mode" else: self.mode = obj["mode"] if obj.get("problem"): if obj["problem"] != self.problem: if self.problem: listeners.problems[self.problem][ self.current_user.id].remove(self) self.problem = obj["problem"] self._problem = Problem.objects.get(pk=self.problem) listeners.problems[self.problem][self.current_user.id].append( self) data.problem_name = self._problem.name data.description = self._problem.description if self.mode == "compete": data.runs = get_runs_for_player(self.problem, self.current_user.id, False) elif self._competition.get_role(self.current_user) != "compete": data.expected_output = self._problem.expected_output data.players = get_players(self.problem) if obj.get("player") and self._competition.get_role( self.current_user) != "compete": if obj["player"] != self.player: self.player = int(obj["player"]) data.runs = get_runs_for_player(self.problem, self.player, True) if obj.get("main_file"): last_run = Run.objects.filter( user=self.current_user.id, problem=self.problem).order_by("-number") if last_run.exists(): number = last_run.values_list("number", flat=True)[0] + 1 else: number = 1 run = Run(number=number, problem_id=self.problem, user=self.current_user, language_id=obj["language"], is_a_test=obj["test_run"], time_to_submission=( self._competition.original_time_left - (competitions[self._competition.id].end_time - time.time())), runtime=None) run.main_file.save( obj["main_file"]["name"], ContentFile(obj["main_file"]["contents"].replace("\r", ""))) for i in obj["extra_files"]: extra_file = ExtraFile(run=run) extra_file.file.save( i["name"], ContentFile(i["contents"].replace("\r", ""))) data.upload = {"id": run.id, "number": run.number} data.runs = get_runs_for_player(self.problem, self.current_user.id, False) if len(data.runs) == 1: for i in listeners.problems[self.problem].values(): for j in [j for j in i if j.mode == "judge"]: j.write_message({"players": get_players(self.problem)}) else: for i in [ i for l in listeners.problems[self.problem].values() for i in l ]: if i.player == self.current_user.id: if run.is_a_test: i.write_message({ "runs": data.runs, }) else: i.write_message({ "runs": data.runs, "notify": "{} uploaded Run #{}".format( get_full_name(self.current_user), run.number), "notif_type": "info", "icon": "send", }) runloop.request_run(run, (self.run_complete, (run, ))) if obj.get("judgement"): run = Run.objects.get(pk=obj["run"]) run.judgement = obj["judgement"] run.score = obj["score"] run.notes = obj["notes"] run.save() update_score(run.user_id, self.competition) run_users = [ i for i in listeners.competitions[self.competition].get( run.user_id, []) if (hasattr(i, "mode") and i.mode == "compete") ] for run_user in run_users: if run_user.problem == run.problem_id: problem_text = "" else: problem_text = " of problem {}".format(run.problem.name) run_user.write_message({ "notify": "Run #{}{} was judged '{}' with a score of {} by {}". format(run.number, problem_text, run.judgement, run.score, get_full_name(self.current_user)), "notif_title": "Judgement for Run #{}{}".format(run.number, problem_text), "notif_type": "success" if run.judgement == "Correct" else "danger", "link": "#{}-&&{}".format(run.problem_id, run.id), "icon": "star", }) for listener in listeners.problems[self.problem].get( run.user_id, []): listener.write_message({ "runs": get_runs_for_player(self.problem, run.user_id, self.mode == "judge") }) data.notify = "Saved judgement for {}'s Run #{}".format( get_full_name(run.user), run.number) data.notif_title = "Saved Judgement" data.notif_type = "info" data.icon = "saved" if obj.get("request"): run = Run.objects.get(pk=obj["request"]) players = [ i for i in listeners.problems[run.problem_id].get( run.user_id, []) if i.mode == "compete" ] if self.mode != "compete" and len(players) > 0: handlers = players else: handlers = [self] runloop.request_run( run, ((lambda handlers, run, u: [handler.run_complete(run, u) for handler in handlers]), (handlers, run, get_full_name(self.current_user))), 4 if self.mode == "compete" else 3) data.notify = "Run requested for {}Run #{}.".format( (get_full_name(run.user) + "'s " if self.mode != "compete" else ""), run.number) data.notif_title = "Run Requested" data.notif_type = "info" data.icon = "saved" if obj.get("clock") and (self._competition.get_role(self.current_user) != "compete"): competition_clock_operation(obj["clock"], self._competition) if len(data) > 0: try: self.write_message(data) except WebSocketClosedError: pass