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
Пример #2
0
 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)
Пример #3
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()]
Пример #4
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'})
Пример #5
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')
Пример #6
0
 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)
Пример #7
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'})
Пример #8
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')
Пример #9
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
Пример #10
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
Пример #11
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'
Пример #12
0
 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
Пример #13
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)
Пример #14
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
Пример #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'})
Пример #16
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)
Пример #17
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'})