def post(self): required_parameters = ["token", "message"] for param in required_parameters: param_value = self.request.get(param) if not param_value: self.response.set_status(400) self.response.out.write("Missing parameter: %s" % param) return profile = ProfileManager.findByToken(self.request.get("token")) if not profile: self.response.set_status(400) self.response.out.write("Invalid token") return announcement = Announcement(type="event", params={"message": self.request.get("message"), "source": self.request.get("source") or "generic", "profile": profile}) announcement.send() self.response.set_status(200) self.response.out.write("OK")
def post(self): entity_key_urlsafe = self.request.get("entity_key") if (self.request.get('type') == 'Event'): if entity_key_urlsafe: event_key = ndb.Key(urlsafe=entity_key_urlsafe) event = event_key.get() timestamp = datetime.datetime.strptime(self.request.get("date"), "%Y-%m-%dT%H:%M") event.date = timestamp.date() event.time = timestamp.time() event.title = self.request.get("title") event.description = self.request.get("description") event.put() else: timestamp = datetime.datetime.strptime(self.request.get("date"), "%Y-%m-%dT%H:%M") new_event = Event(parent=PARENT_KEY, date=timestamp.date(), time=timestamp.time(), title=self.request.get('title'), description=self.request.get('description')) new_event.put() elif (self.request.get('type') == 'Announcement'): if entity_key_urlsafe: announcement_key = ndb.Key(urlsafe=entity_key_urlsafe) announcement = announcement_key.get() announcement.title = self.request.get("title") announcement.description = self.request.get("description") announcement.put() else: new_announcement = Announcement(parent=PARENT_KEY, title=self.request.get('title'), description=self.request.get('description')) new_announcement.put() self.redirect(self.request.referer)
def post(self): required_parameters = ["token", "number"] for param in required_parameters: param_value = self.request.get(param) if not param_value: self.response.set_status(400) self.response.out.write("Missing parameter: %s" % param) return profile = ProfileManager.findByToken(self.request.get("token")) if not profile: self.response.set_status(400) self.response.out.write("Invalid token") return announcement = Announcement(type="phonecall", params={"number": self.request.get("number"), "name": self.request.get("name"), "profile": profile}) announcement.send() self.response.set_status(200) self.response.out.write("OK")
def announcement_insert(self, request): """insert or update an announcement""" if request.from_datastore: my_announcement = request else: my_announcement = Announcement(parent=main.PARENT_KEY, title=request.title, description=request.description) my_announcement.put() return my_announcement
def announcement(): if request.method == 'GET': return jsonify(Announcement.objects().order_by('-_id')) if request.method == 'POST': announcement = Announcement() announcement.datetime = time.time() announcement.msg_zh = request.form.get('msg_zh') announcement.msg_en = request.form.get('msg_en') announcement.uri = request.form.get('uri') announcement.save() return jsonify({'status': 'OK'})
def create_print_announcement_view(): #current_user): data = request.json if request.method == 'POST': json = { 'to_date': data['to_date'], 'from_date': data['from_date'], 'content': data['content'], 'picture': data['picture'], 'media_id': data['media_id'] } try: announcement = Announcement( announcement_type='print_media', user_id=int(data['user_id']), media_id=int(data['media_id']), announced=False, paid=False, start_day=string_to_date(data['from_date']), end_day=string_to_date(data['to_date'])) announcement.charge = create_print_announcement_bill(data) db.session.add(announcement) db.session.commit() except IntegrityError: return jsonify({'message': 'Database integrity error'}) days = string_to_date(data['to_date']) - string_to_date( data['from_date']) days_in_str = str(days) content = days_in_str.split(' ') no_of_days = int(content[0]) try: p_announcement = PrintMediaAnnouncement( announcement_id=announcement.id, section=data['type'], contact=data['contact'], content=data['content'], picture=data['picture']) p_announcement.number_of_days = int(content[0]) db.session.add(p_announcement) db.session.commit() except IntegrityError: return jsonify({'message': 'Database integrity error'}) return jsonify( {'message': 'successfully submited print media announcement'})
def get_announcements(self): prog = re.compile(r"(\[\d\d\d\d\/\d\d\/\d\d\])") with requests.Session() as s: self.s = s r = s.get(self.url) anno_divs = bs4(r.text, "html.parser").find_all('p') arr = [] for p in anno_divs: html_content = ''.join(str(x) for x in p.contents) result = prog.split(html_content) new_anno = False for x in result: if prog.match(x): arr.append([x, '']) new_anno = True elif new_anno: arr[-1][1] += x annos = [] it = 0 arr = sorted(arr, reverse=True) for a in arr: title = ''.join(bs4(a[1], "html.parser").strings).strip()[:20] content = a[1] date = self._get_time_from_str(a[0]) url = self.url classname = "Computer Networks 2019 (AC Pang)" anno = Announcement(title=title, content=content, date=date, url=url, pos=it, classname=classname) annos.append(anno) it += 1 return annos
def show_announcement(request, ann_id): announcement = Announcement.getAnnouncementById(ann_id) if announcement is not None: return render(request, 'announcements/announcement.html', {'announcement': announcement}) else: return render(request, "errorPage.html", {'message': "Announcement does not exist"})
def post(self, version): logging.debug("AnnouncementsListHandler#post") if (self.valid_version(version)): message = self.request.get('message', default_value=None) region = self.request.get('region', default_value=None) key = self.request.get('key', default_value=None) if message: if key: # modify an existing announcement a = Announcement.get(key) a.message = message else: # create a new announcement a = Announcement(message=message) if region: region = Region.get_by_name(region) a.region = region else: a.region = None a.put() self.json(a.to_json()) else: self.error(400, "Bad Data: Missing Message") else: self.error(404, "API Version %s not supported" % version)
def _get_announcement_from_url(self, url): req = self.s.get(url) req.encoding = "UTF-8" table = bs4(req.text, "html.parser").find("table") rows = table.findAll("tr") title = rows[0].find("td").string content = str(rows[5].find("td")) date = dateutil.parser.parse(rows[1].find("td").string) date = date.replace(tzinfo=gettz("Asia/Taipei")) return Announcement(title=title, content=content, url=url, date=date)
def get(self, version): logging.debug("AnnouncementsListHandler#get") if (self.valid_version(version)): region = self.request.get('region', default_value=None) if region: region = Region.get_by_name(region) self.json({"announcements": Announcement.get_active(region)}) else: self.error(404, "API Version %s not supported" % version)
def receive(self, message): token = None # the recipient address is determined by the url, not the # content of the email message. received_at = self.request.path.split("/")[-1] token = received_at.split("@")[0] profile = ProfileManager.findByToken(token) if not profile: self.response.out.write("NO PROFILE") logging.info("Profile not found") return announcement = Announcement(type="email", params={"message": message, "profile": profile}) announcement.send() self.response.set_status(200) self.response.out.write("OK")
def create_announcement(): if current_user.email not in TA_EMAILS: abort(404) if request.method == 'GET': return render_template('create_announcement.jinja2') if request.method == 'POST': date = request.form.get('date') title = request.form.get('title') description = request.form.get('description') announcement = Announcement(date=date, title=title, description = description) db.session.add(announcement) db.session.commit() return render_template('announcementsubmitted.jinja2')
def create_radio_funeral_announcemnet_view(): data = request.json if request.method == 'POST': json = { 'to_date': data['to_date'], 'from_date': data['from_date'], 'time_slots': data['time_slots'], 'media_id': data['media_id'] } announcement = Announcement(announcement_type='radio_media', start_day=string_to_date( data['from_date']), end_day=string_to_date(data['to_date']), user_id=data['user_id'], media_id=data['media_id'], announced=False, paid=False) announcement.charge = create_radio_normal_announcemnet_bill(data) db.session.add(announcement) db.session.commit() start_day = data['from_date'] end_day = data['to_date'] for i in dates(start_day, end_day): for j in data['time_slots']: radio_announce = RadioMediaAnncouncemntFuneral( contact=data['contact'], announcement_id=announcement.id, deceased_name=data['deceased_name'], deceased_other_name=data['deceased_other_name'], funeral_venue=data['funeral_venue'], vigil_venue=data['vigil_venue'], media_id=data['media_id'], date=str(string_to_date(i))[0:10], time_slot=j) db.session.add(radio_announce) db.session.commit() return jsonify({'message': 'sucessfully created radio announcement'})
def test_announcments_add_model(self): """ Test that the announcement is successfully added to the database """ announcement = Announcement(title="Title", description="Description", date=datetime(2015, 6, 5, 8, 10, 10, 10)) db.session.add(announcement) db.session.commit() self.assertEqual( Announcement.query.filter_by(title="Title", description="Description", date=datetime(2015, 6, 5, 8, 10, 10, 10)).count(), 1)
def delete(self, version): logging.debug("AnnouncementsListHandler#delete") if (self.valid_version(version)): key = self.request.get('key', default_value=None) if key: a = Announcement.get(key) a.active = False a.put() else: self.error(400, "Bad Data: Missing Key") else: self.error(404, "API Version %s not supported" % version)
def announcement(): if request.method == 'GET': token = request.args.get('token') role = config.ANNOUNCEMENT_DEFAULT_ROLE if token is not None: try: attendee = Attendee.objects(token=token).get() role = attendee.role except DoesNotExist: raise Error("invalid token") return jsonify(Announcement.objects(role=role).order_by('-_id')) if request.method == 'POST': announcement = Announcement() announcement.datetime = time.time() announcement.msg_zh = request.form.get('msg_zh') announcement.msg_en = request.form.get('msg_en') announcement.uri = request.form.get('uri') announcement.role = request.form.getlist('role[]') announcement.save() return jsonify({'status': 'OK'})
def add(): if request.method == 'POST': content = request.form.get('content') price = float(request.form.get('price')) if price <= 0.0: price = None building_id = current_user.address_id newAnnouncement = Announcement(text=content, price=price, building_id=building_id) db_session.add(newAnnouncement) db_session.commit() flash('Dodano ogłoszenie', 'success') return redirect(url_for('index')) return render_template('map_neigh/add.html')
def create_model(self, form): try: assert isinstance(form.content.data, str) and form.content.data != '', form.content.data assert isinstance(form.title.data, str) and form.title.data != '', form.title.data model = Announcement( title=form.title.data, content=form.content.data, ) self.session.add(model) self.session.commit() logger.info(f'Announcement create by admin {auth_get_current_username()}: {model.to_json()}') except Exception as ex: self.session.rollback() flash(f'Failed to create announcement. {str(ex)}', 'error') logger.exception(f'Announcement create by admin {auth_get_current_username()} raised exception') return False return True
def _get_announcements_from_class_id(self, s, cid): r = s.get((f"https://cool.ntu.edu.tw/api/v1/courses/{cid}/" f"discussion_topics?only_announcements=true&" f"per_page=100000")) dt = json.loads(r.text[9:]) annos = [] it = 0 for anno in dt: content = anno["message"] annos.append( Announcement(url=anno["url"], date=dateutil.parser.parse(anno["posted_at"]), pos=it, title=anno["title"], content=content)) it += 1 return annos
def create_announcement(): token = request.form.get('token') text = request.form.get('text') ts = datetime.fromtimestamp(float(request.form.get('timestamp'))) from_tz = timezone('UTC') ts = from_tz.localize(ts).astimezone(cst) if request.form.get('token') != settings.SLACK_TOKEN: return 'Unauthorized', 401 send_notification = text.startswith('<!channel>') if send_notification: text = text[text.find(' ') + 1:] announcement = Announcement(text, ts) DB.session.add(announcement) DB.session.commit() if send_notification: resp = requests.post( 'https://fcm.googleapis.com/fcm/send', headers={"Authorization": "key={}".format(settings.FIREBASE_KEY)}, json={ "to": "/topics/announcements", "time_to_live": 0, "data": { "title": "HackTX", "text": text, "vibrate": "true" } }) # Send iOS notification resp = requests.post( 'https://fcm.googleapis.com/fcm/send', headers={"Authorization": "key={}".format(settings.FIREBASE_KEY)}, json={ "to": "/topics/ios", "priority": "high", "notification": { "title": "New Announcement!", "body": text } }) # print resp.status_code # Create a POST to Firebase return 'Created announcement'
def add_announcement(request): print(request.POST.get("image", "ne ma :(")) _user = BarterUser.getUserFromRequest(request) _title = request.POST.get('title') _content = request.POST.get('content') tagsStrList = request.POST.getlist('tag_list') tagsList = Tag.addTagsList(tagsStrList) newAnn = Announcement.createAnnouncement(_user, _title, _content, tagsList) if newAnn is not None: if request.FILES.get("image", ""): newImage = BarterImage.imageFromUpload(request.FILES["image"]) print("upload successful") newAnn.setImage(newImage) # Should be "Announcement creation succcessful" or whatever return HttpResponseRedirect('/') else: # Should be "Announcement creation failed" return HttpResponseRedirect('/')
def get_announcements(self): with requests.Session() as s: self.s = s r = s.get(self.url) anno_divs = bs4(r.text, "html.parser").findAll(class_="post") annos = [] it = 0 for p in anno_divs: title = "\n".join(p.find(class_="title").stripped_strings) content = p.find(class_="title").next_sibling.strip() date = self._get_time_from_post(p) url = self.url classname = "Computer Networks 2019" anno = Announcement(title=title, content=content, date=date, url=url, pos=it, classname=classname) annos.append(anno) it += 1 return annos
def edit_announcement_page(ann_id): """ the admin interface for editing announcement """ if not current_user.is_authenticated: return redirect(url_for('admin_login')) if not current_user.is_admin: return redirect(url_for('admin_login')) form = AnnouncementForm() db = current_app.config["db"] announcement = db.get_announcement(ann_id) img_update = True if form.validate_on_submit(): header = form.data["header"] content = form.data["content"] if 'image' in request.files: if request.files['image'].filename == None or request.files[ 'image'].filename == "": img_update = False image = request.files['image'].read() binary_image = dbapi2.Binary(image) else: binary_image = "" _announcement = Announcement(header=header, content=content, image=binary_image) db.update_announcement(ann_id=ann_id, announcement=_announcement, img_update=img_update) return redirect(url_for("admin_page")) form.header.data = announcement[2] form.content.data = announcement[3] form.image.data = announcement[4] with connection.cursor() as cursor: cursor.execute( "SELECT ENCODE(announcements.blob_image, 'base64') FROM announcements WHERE id = %s", (ann_id, )) img = cursor.fetchone() image = [] image.append(img[0]) image = "data:image/png;base64," + image[0] return render_template("ann_edit.html", form=form, img=image)
def get_announcements(profiles_dict): def is_announcements_channel(c): return response = client.conversations_list() channels = response["channels"] announcements_channel = next(c for c in channels if c['name'] == 'announcements') response = client.conversations_history( channel=announcements_channel['id']) announcements = [] for data in response['messages']: if data['user'] not in profiles_dict: continue title = data['text'] date = datetime.fromtimestamp(float(data['ts'])) announcements.append(Announcement(title, date)) return announcements
def add_announcement_page(): """ the admin interface for adding announcement """ if not current_user.is_authenticated: return redirect(url_for('admin_login')) if not current_user.is_admin: return redirect(url_for('admin_login')) form = AnnouncementForm() if form.validate_on_submit(): header = form.data["header"] content = form.data["content"] if 'image' in request.files: image = request.files['image'].read() binary_image = dbapi2.Binary(image) else: binary_image = "" ann = Announcement(header, content, binary_image) db = current_app.config["db"] db.add_announcement(ann, current_user.id) flash('announcement added to the database') return redirect(url_for("admin_page")) return render_template("ann_add.html", form=form)
def announcements(): announcement1 = Announcement( title="Testing 1", content="test test 1", view_count=0, created_at=datetime(2000, 1, 1, 0, 5, 15), updated_at=datetime(2000, 1, 1, 0, 5, 15), ) announcement2 = Announcement( title="Testing 2", content="test test 2", view_count=0, created_at=datetime(2000, 1, 1, 0, 5, 20), updated_at=datetime(2000, 1, 1, 0, 5, 20), ) db.session.add(announcement1) db.session.add(announcement2) db.session.commit() yield [announcement1.to_json(), announcement2.to_json()]
def remove(request, ann_id): Announcement.removeAnnouncement(ann_id) return HttpResponseRedirect('/users/profile/'+request.user.username);
def get(self): events = Event.query(ancestor=PARENT_KEY).order(-Event.date,-Event.time).fetch() announcements = Announcement.query(ancestor=PARENT_KEY).order(-Announcement.last_touch_date_time).fetch() template = jinja_env.get_template("templates/ministry.html") self.response.out.write(template.render({'events': events, 'announcements': announcements}))
def get_popups(request): if not is_trainee(request.user): return [] trainee = trainee_from_user(request.user) announcements = Announcement.announcements_for_today(trainee, is_popup=True) return announcements
def server_announcements(trainee): announcements = Announcement.announcements_for_today(trainee) return [(messages.INFO, a.announcement) for a in announcements]
def make_hidden(self, request, queryset): Announcement.clear_cache() queryset.update(hidden=True)
def remove(request, ann_id): Announcement.removeAnnouncement(ann_id) return HttpResponseRedirect('/users/profile/' + request.user.username)