Example #1
0
def write_event():

    try:
        data = request.get_json()

        if data == None or 'event' not in data:  # Request data is in wrong format
            return 'Please use Reco Client', 403

        sessionID = request.headers['Authorization']
        if checksession(sessionID):

            # Compose the new event data
            new_event = Event()
            new_event.fromObject(data['event'])

            # Execute update
            if update_event(new_event):
                return 'Execution success', 200
            else:
                return 'Internal Server Error', 500

        else:  # Session is not availible
            return 'Session is not availible', 401

    except Exception as e:
        exc_type, exc_tb = sys.exc_info()
        fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
        print(bcolors.FAIL +
              'Exception occur when handling /write-event request:' +
              bcolors.ENDC)
        print('Error: {}'.format(e))
        print(exc_type, fname, exc_tb.tb_lineno)
        return 'Internal Server Error', 500
Example #2
0
def GenerateLifetime(figure):
    event_types = ["discovers a relic", "seiges a city", "unearths an ancient secret", "assassinates a rival", "builds a monument", "founds a religion", "betrays a partner", "marries", "battles for faction", "has a vision", "commissions a massive weapon", "loses a magical artifact", "calls for a crusade", "decrees an important law", "has a child", "victimizes a faction", "wins major war", "invents something important", "gathers favor with a faction", "builds a temple", "creates a piece of art", "holds a major festival", "falls under a curse", "becomes obsessed with something"]

    # First event is always a birth event
    event = Event("birth")
    ResolveEvent(event, figure)

    # Generate a set of middle events
    num_events = random.randrange(10)
    for i in range(num_events):
        event = Event(random.choice(event_types))
        ResolveEvent(event, figure)

    # Last event is always a death event
    event = Event("death")
    ResolveEvent(event, figure)
Example #3
0
async def begin(ctx, *, event_name):
    """Only for administrators: begins an even with <event_name>"""
    global id_increment
    event = Event(id_increment, event_name, ctx.author)
    if not check_events_server(ctx):
        servers[ctx.guild.id] = {}
    server_events = servers[ctx.guild.id]
    server_events[event.id] = event
    id_increment += 1
    await ctx.send(f'{event.host.display_name} started {event.eventName}. Use id {event.id} to enter queue.')
Example #4
0
async def begin(ctx, *, event_name):
    """Only for hosts: begins an even with <event_name>"""
    print(
        f"Begin command sent from server: {ctx.message.guild.name} by {ctx.message.author}"
    )
    sys.stdout.flush()
    global id_increment
    event = Event(id_increment, event_name, ctx.author)
    if not check_events_server(ctx):
        servers[ctx.guild.id] = {}
    server_events = servers[ctx.guild.id]
    server_events[event.id] = event
    id_increment += 1
    await ctx.send(
        f'{event.host.display_name} started {event.eventName}. Use id {event.id} to enter queue.'
    )
def parse_xml_timetable(xml_object):
    print('Parsing XML object.')

    xml_events = xml_object.timetable.event
    events = []

    for event in xml_events:
        events.append(
            Event(event["id"], event.prettytimes.cdata, event.resources,
                  event.rawweeks.cdata, event.day.cdata))

    print('Creating Timetable object.')
    timetable = Timetable()
    timetable.add(events)

    return timetable
Example #6
0
def parseFile():
    marathon_dict = {}
    runner_list = []
    with open('Project1_data.csv', 'r', encoding='UTF-8') as f:
        reader = csv.reader(f, delimiter=',')
        next(reader)  # skip header row
        for aLine in reader:
            number_of_marathons = (len(aLine) - 1) // 5
            runner_id = aLine[0]
            event_list = []
            for i in range(number_of_marathons):
                # Hacky way to access the information in a given line in the csv
                marathon_date = aLine[5 * i + 1]
                marathon_name = aLine[5 * i + 2]
                marathon_etype = aLine[5 * i + 3]
                marathon_time = aLine[5 * i + 4]
                marathon_category = aLine[5 * i + 5]

                event_list.append(
                    Event(
                        marathon_date,  # Create new Event and append to list
                        marathon_name,
                        marathon_etype,
                        marathon_time,
                        marathon_category))

                # Increments/initializes the values in the marathon_dict
                if marathon_name in marathon_dict:
                    marathon_dict[
                        marathon_name] = marathon_dict[marathon_name] + 1
                else:
                    marathon_dict[marathon_name] = 1
            gender, age = parseCategory(aLine[5])
            runner_list.append(
                Runner(runner_id, event_list, gender,
                       age))  # Create a new runner object and append to list
        """ Some code to help you get a better idea of the dataset, use this when you
			need some information about the number of marathons that exist

		for key in marathon_dict:
			if marathon_dict[key] < 500 and marathon_dict[key] > 300:
				print key, ": ", marathon_dict[key]
		"""
    return runner_list, marathon_dict
def create_event(item):
    # Create an empty event
    event = Event()

    # Set the English name for the event and if it doesn't exist choose the Finnish name
    if item['name']['en'] is not None:
        event.name = item['name']['en']
    elif item['name']['fi'] is not None:
        event.name = item['name']['fi']
    else:
        event.name = 'No name announced'

    # Set the address if it exists
    if item['location']['address']['street_address'] is not None:
        event.address = item['location']['address']['street_address']
    else:
        event.address = 'No address announced'

    # Set the starting and ending dates of the event
    if item['event_dates']['starting_day'] is None:
        event.start_time = 'No starting date announced'
    else:
        event.add_start_time(
            str_to_datetime(item['event_dates']['starting_day']))

    if item['event_dates']['ending_day'] is None:
        event.end_time = 'No ending date announced'
    else:
        event.end_time = str_to_datetime(item['event_dates']['ending_day'])

    # Set coordinates for the event
    event.lat = item['location']['lat']
    event.lon = item['location']['lon']

    # Set the description of the event
    if item['description']['intro'] is None:
        event.desc = 'No description available'
    else:
        event.desc = item['description']['intro']

    # Set the info link url of the event
    event.link = item['info_url']

    # Set the tags for the event from list
    if len(item['tags']) < 1:
        event.tags = ['The event has no tags']
    else:
        tags = item['tags']
        for tag in tags:
            event.add_tag(tag['name'].lower())

    # Set image if it exists
    if item['description']['images']:
        if item['description']['images'][0][
                'url'] is not None and '{' not in item['description'][
                    'images'][0]['url']:
            event.img_link = item['description']['images'][0]['url']

    # Return the created event
    return event
Example #8
0
def build_repeat(userid, year, month):
    '''Build all events which create by repeat in certain month

    Args:
        userid (str): ID of the user.
        year (int): The year you want to build events.
        month (int): The month you want to build events.
    '''

    target_range_start = datetime(year, month, 1, 0, 0, 0)
    target_range_end = datetime(year, month,
                                calendar.monthrange(year, month)[1], 23, 59,
                                59)

    target_range = Range(target_range_start, target_range_end)

    for cal in calendars_collection.find({'owner': userid}):
        calendar_id = cal['_id']
        for repeat in repeats_collection.find({'calendar': calendar_id}):
            repeat_range = Range(repeat['startDate'], repeat['endDate'])

            # If this repeat is in target range.
            if range_overlap(target_range, repeat_range) > 0:

                new_generated = repeat['generated']

                # Iterate all days in target range.
                pointer = target_range_start
                while pointer <= target_range_end:

                    # Check if this day should have a evnet accroding to repeat but it hasnt.
                    pointer_day_string = pointer.strftime("%Y/%-m/%-d")
                    if (repeat['cycle'] == 'Week' and
                            int(repeat['repeatData']) - 1 == pointer.weekday()
                            and pointer_day_string not in repeat['generated']
                        ) or (repeat['cycle'] == 'Month'
                              and int(repeat['repeatData']) == pointer.day and
                              pointer_day_string not in repeat['generated']):

                        # Add this day into new generated array
                        new_generated.append(pointer_day_string)

                        # Compose new Event
                        new_event = Event()
                        new_event._id = str(uuid.uuid4())
                        new_event.title = repeat['title']
                        new_event.calendar = cal['_id']
                        new_event.color = cal['color']
                        new_event.startTime = pointer.replace(
                            hour=repeat['startTime'].hour,
                            minute=repeat['startTime'].minute,
                            second=repeat['startTime'].second)
                        new_event.endTime = pointer.replace(
                            hour=repeat['endTime'].hour,
                            minute=repeat['endTime'].minute,
                            second=repeat['endTime'].second)

                        # Upload new event database
                        update_event(new_event)

                    pointer += timedelta(days=1)

                # Update the generated array
                repeat['generated'] = new_generated
                update_repeat(repeat)