Beispiel #1
0
    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)
Beispiel #3
0
  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
Beispiel #5
0
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'})
Beispiel #6
0
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
Beispiel #8
0
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"})
Beispiel #9
0
    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)
Beispiel #11
0
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'})
Beispiel #12
0
    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)
Beispiel #13
0
    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")
Beispiel #14
0
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')
Beispiel #15
0
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)
Beispiel #17
0
    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)
Beispiel #18
0
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'})
Beispiel #19
0
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')
Beispiel #20
0
 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
Beispiel #21
0
 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
Beispiel #22
0
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'
Beispiel #23
0
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('/')
Beispiel #24
0
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
Beispiel #26
0
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)
Beispiel #27
0
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
Beispiel #28
0
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)
Beispiel #29
0
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()]
Beispiel #30
0
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]
Beispiel #34
0
 def make_hidden(self, request, queryset):
     Announcement.clear_cache()
     queryset.update(hidden=True)
Beispiel #35
0
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"})
Beispiel #36
0
 def make_hidden(self, request, queryset):
     Announcement.clear_cache()
     queryset.update(hidden=True)
Beispiel #37
0
def remove(request, ann_id):
    Announcement.removeAnnouncement(ann_id)
    return HttpResponseRedirect('/users/profile/' + request.user.username)