Example #1
0
def get_event(eid):
  event = Event.by_guid(eid)
  host = list(event.host(nodes=True))[0][1]
  return {
    'id': event.guid,
    'host': host.guid,
    'invitees': [node.guid for rel, node in event.invitees(nodes=True)]
  }
Example #2
0
    def process_event(self, req):
        req.perm.assert_permission('CAL_VIEW')

        add_stylesheet (req, 'hw/css/azcalendar.css')
        if req.method == 'GET' and req.args.has_key('id'):
            evt = Event.get_event(self.env,req.args['id'])
            req.hdf['azcalendar.evid'] = req.args['id']
            req.hdf['azcalendar.title'] = evt.get_title()
            req.hdf['azcalendar.author'] = evt.get_author()
            req.hdf['azcalendar.time_begin'] = time.strftime("%Y/%m/%d %H:%M",time.localtime(evt.get_time_begin()))
            req.hdf['azcalendar.time_end'] = time.strftime("%Y/%m/%d %H:%M",time.localtime(evt.get_time_end()))
            req.hdf['azcalendar.event.'+str(EventType[evt.get_type()])] = 1
            req.hdf['azcalendar.priority.'+str(EventPriority[evt.get_priority()])] = 1
            req.hdf['azcalendar.last_update'] = time.strftime("%Y/%m/%d %H:%M:%S",time.localtime(evt.get_time_update()))
            return 'azevent.cs', None

        elif req.method == 'GET' and req.args.has_key('update_event'):
	    req.perm.assert_permission('CAL_EDIT')

            begin_time, end_time, begin_stamp, end_stamp \
              = caltools.parse_time_begin_end(req.args['time_begin'], req.args['time_end'])

            evt = Event.get_event(self.env,req.args['evid'])
            #evt.set_author(req.authname)
            evt.set_type(req.args['type'])
            evt.set_priority(req.args['priority'])
            evt.set_time_update(int(time.time()))
            evt.set_time_begin(begin_stamp)
            evt.set_time_end(end_stamp)
            evt.set_title(req.args['title'])
            date = time.strftime("%Y%m%d", begin_time)
            req.hdf['redir_url'] = str(self.env.href.azcalendar()) + "?date=%s" % date
            return evt.update(self.env, req)

        elif req.method == 'GET' and req.args.has_key('delete_event'):
	    req.perm.assert_permission('CAL_ADMIN')
            begin_time, end_time, begin_stamp, end_stamp \
              = caltools.parse_time_begin_end(req.args['time_begin'], req.args['time_end'])

            evt = Event.get_event(self.env,req.args['evid'])
            date = time.strftime("%Y%m%d", begin_time)
            req.hdf['redir_url'] = str(self.env.href.azcalendar()) + "?date=%s" % date
            return evt.delete(self.env)
Example #3
0
    def process_delete(self, req):
	req.perm.assert_permission('CAL_ADMIN')

        if req.args.has_key('id'):
            import re
            xid = req.args['id']
            if not re.match (r"[0-9]+", xid):
                return self.process_invalid(req)
            evt = Event.get_event(self.env,req.args['id'])
            evt.delete(self.env)

        return self.process_show(req)
Example #4
0
    def process_add(self, req):
        req.perm.assert_permission('CAL_EDIT')
        add_stylesheet (req, 'hw/css/azcalendar.css')

        if req.method == 'GET' and req.args.has_key('date'):
            req.hdf['azcalendar.time_begin'] = time.strftime("%Y/%m/%d",(time.strptime(req.args['date'],"%Y%m%d")))
            req.hdf['azcalendar.time_end'] = time.strftime("%Y/%m/%d",(time.strptime(req.args['date'],"%Y%m%d")))
            return 'add_event.cs', None

        elif req.method == 'GET' and req.args.has_key('new_event'):
            begin_time, end_time, begin_stamp, end_stamp \
              = caltools.parse_time_begin_end(req.args['time_begin'], req.args['time_end'])

            date = time.strftime("%Y%m%d", begin_time)
            req.hdf['redir_url'] = str(self.env.href.azcalendar()) + "?date=%s" % date

            current_stamp = int(time.time())

            # Events with id 0 are created automatically by a DB layer.
            author = req.authname
            evt = Event(0, author, current_stamp, current_stamp, begin_stamp, end_stamp,
                        req.args['type'], req.args['priority'], req.args['title'])

            return evt.save(self.env, req)
Example #5
0
    def create_event(session,
                     game_id,
                     message_id,
                     type,
                     created_by,
                     description='{}',
                     completed=0):
        event = Event(game_id=game_id,
                      message_id=message_id,
                      type=type,
                      description=description,
                      created_by=created_by,
                      completed=completed)

        session.add(event)
        session.commit()
        return event
Example #6
0
def update_event(
    eid,
    add_invitees=None,
    rm_invitees=None,
    title=None,
    event=None):
  if not event:
    event = Event.by_guid(eid)

  if title:
    event.value = title
    event.save()

  for uid in (add_invitees or []):
    event.invitees.add(guid=uid)
    entry = FeedEntry()
    entry.value = '%s invited you to %s' % (req.user.value, event.value)
    entry.save()
    User(dh={'id': uid}).feed.add(entry)

  for uid in (rm_invitees or []):
    event.invitees.remove(guid=uid)
Example #7
0
    def onMessageEvent(self, message, topics, data):
        if topics[1] == "add":
            # Try grab the sensor from the DB
            try:
                sensor = Sensor.objects.get(sensor=topics[-1])
            except Exception as e:
                sensor = None

            if sensor is None:
                # Create sensor in event db and add event
                sensor = Sensor()
                sensor.sensor = topics[-1]

            event = Event()
            event.event_type = data['event-type']
            if data.get('target') is not None:
                event.target = data['target']
            event.logic = data['logic']
            event.logic_value = data['logic-value']
            if data.get('warning-message') is not None:
                event.warning_message = data['warning-message']
            if data.get('actuation-type') is not None:
                event.actuation_type = data['actuation-type']
            if data.get('actuation-state') is not None:
                event.actuation_state = data['actuation-state']
            if data.get('time') is not None:
                event.time = data['time']
            sensor.events.append(event)

            try:
                sensor.save()
            except Exception as e:
                return print("Couldn't save to event db: " + str(e))

            return print("Event saved to db")

        elif topics[1] == "delete":
            try:
                sensor = Sensor.objects.get(sensor=topics[-1])
            except Exception as e:
                sensor = None

            if sensor is None:
                # Create sensor in event db and add event
                return print("Sensor not found")

            notfound = True
            # Index the wanted event
            for idx, eventidx in enumerate(sensor.events):
                if str(eventidx['uuid']) == data['uuid']:
                    notfound = False
                    sensor.events.pop(idx)

            if notfound is True:
                return print("Event couldn't be deleted, not found")

            try:
                sensor.save()
            except Exception as e:
                return print("Error saving deletion to db" + str(e))

            return print("Event " + data['uuid'] + " deleted")
        else:
            return print("Channel " + message.topic + " not handled")
Example #8
0
    def process_show(self, req):
        req.perm.assert_permission('CAL_VIEW')

        def stamp_dow (stamp):
            return time.localtime(stamp)[6]

        def stamp_floattime (stamp):
            t = time.localtime(stamp)
            return t[3] + t[4]/60.0

        DIV = 4

        def round_begin (x):
            import math
            return math.floor (x * DIV) / float (DIV)

        def round_end (x):
            import math
            return math.ceil (x * DIV) / float (DIV)

        try:
            date = time.strptime(req.args['date'],"%Y%m%d")
        except:
            date = time.localtime ()

        cweek = [[] for _ in xrange(7)]
        week_range = caltools.get_week_range(date)
        bg, en = time.mktime(week_range[0]), time.mktime(week_range[1])
        for ev in Event.events_between (self.env, bg, en,req.authname):
            begin = max (bg, ev.get_time_begin ())
            end = min (en, ev.get_time_end ()) - 1
            for d in xrange(stamp_dow(begin), stamp_dow(end)+1):
                cweek[d].append(ev)

        week_start = week_range[0]

        day_layouts = [cal_layout.layout (evts, round_begin, round_end)
                       for evts in cweek]

        for d in xrange (len (day_layouts)):
            today = caltools.relative_day(week_start, d)
            today_stamp = time.mktime (today)
            tomorrow_stamp = today_stamp + 24 * 60 * 60

            req.hdf['azcalendar.events.%d.date.year' % d] = today[0]
            req.hdf['azcalendar.events.%d.date.month' % d] = today[1]
            req.hdf['azcalendar.events.%d.date.day' % d] = today[2]
            for l in xrange (len (day_layouts[d])):
                for ev in day_layouts[d][l]:
                    begin = ev.get_time_begin ()
                    if begin < today_stamp:
                        begin = 0.0
                    else:
                        begin = round_begin (stamp_floattime (begin))

                    end = ev.get_time_end ()
                    if end >= tomorrow_stamp:
                        end = 24.0
                    else:
                        end = round_end (stamp_floattime (end))

                    base = 'azcalendar.events.%d.events.%d.%d' % (d, l, ev.get_id ())

                    req.hdf[base + '.id'] = ev.get_id ()
                    req.hdf[base + '.title'] = ev.get_title ()
                    req.hdf[base + '.priority'] = str(EventPriority[ev.get_priority ()])
                    req.hdf[base + '.brd_begin'] = int (round (begin * DIV))
                    req.hdf[base + '.brd_end'] = int (round (end * DIV))

                    if ev.get_time_begin () < today_stamp or ev.get_time_end () > tomorrow_stamp:
                        fmt = "%d.%m.%Y %H:%M"
                    else:
                        fmt = "%H:%M"
                    req.hdf[base + '.time_begin'] = time.strftime (fmt, time.localtime (ev.get_time_begin()))
                    req.hdf[base + '.time_end'] = time.strftime (fmt, time.localtime (ev.get_time_end()))

        display_months = []
        dm_year, dm_month = caltools.get_month_range (week_start)[0][:2]

        prev_year, prev_month, prev_day = date[:3]
        prev_month -= 1
        if prev_month < 1:
            prev_month += 12
            prev_year -= 1
        prev_day = min (calendar.monthrange (prev_year, prev_month)[1], prev_day)

        next_year, next_month, next_day = date[:3]
        next_month += 1
        if next_month > 12:
            next_month -= 12
            next_year += 1
        next_day = min (calendar.monthrange (next_year, next_month)[1], next_day)

        for i in range(3):
            month_range = caltools.get_month_range (tuple([dm_year, dm_month, 1] + [0 for i in range(6)]))
            interesting_days = {}

            bg, en = time.mktime(month_range[0]), time.mktime(month_range[1])
            evts = Event.events_between (self.env, bg, en, req.authname)

            for ev in evts:
                begin = ev.get_time_begin()
                if begin < bg:
                    begin = 1
                else:
                    begin = time.localtime(begin)[2]

                end = ev.get_time_end()
                if end > en:
                    end = calendar.monthrange(dm_year, dm_month)[1]
                else:
                    end = time.localtime(end)[2]

                priority = ev.get_priority()

                # Mark interesting days.
                for day in range (begin, end + 1):
                    if day not in interesting_days or interesting_days[day] < priority:
                        interesting_days[day] = priority

            interesting_days_l = [(day, str(EventPriority[interesting_days[day]]))
                                  for day in interesting_days.keys()]
            display_months.append ((dm_month - 1, dm_year, interesting_days_l))

            dm_month += 1
            if dm_month > 12:
                dm_year += 1
                dm_month = 1

        req.hdf['azcalendar.prev_date'] = "%04d%02d%02d" % (prev_year, prev_month, prev_day)
        req.hdf['azcalendar.today_date'] = time.strftime ("%Y%m%d")
        req.hdf['azcalendar.next_date'] = "%04d%02d%02d" % (next_year, next_month, next_day)

        for m in xrange (len (display_months)):
            month, year, impdays = display_months[m]
            _, numdays = calendar.monthrange (year, month + 1)
            firstday = calendar.weekday(year, month + 1, 1)

            req.hdf['azcalendar.months.%d.month' % m] = month
            req.hdf['azcalendar.months.%d.year' % m] = year
            req.hdf['azcalendar.months.%d.firstday' % m] = firstday
            req.hdf['azcalendar.months.%d.numdays' % m] = numdays

            for d in xrange (len (impdays)):
                day, priority = impdays[d]
                req.hdf['azcalendar.months.%d.impdays.%d' % (m, day)] = priority

        req.hdf['azcalendar.div'] = str(DIV)
        req.hdf['title'] = "Calendar"
        add_stylesheet (req, 'hw/css/azcalendar.css')
        return 'azcalendar.cs', None