def section3(data, x, y, *verbs): last_travel = data._last_travel if last_travel[0] == x and last_travel[1][0] == verbs[0]: verbs = last_travel[1] # same first verb implies use whole list else: data._last_travel = [x, verbs] m, n = divmod(y, 1000) mh, mm = divmod(m, 100) if m == 0: condition = (None,) elif 0 < m < 100: condition = ("%", m) elif m == 100: condition = ("not_dwarf",) elif 100 < m <= 200: condition = ("carrying", mm) elif 200 < m <= 300: condition = ("carrying_or_in_room_with", mm) elif 300 < m: condition = ("prop!=", mm, mh - 3) if n <= 300: action = make_object(data.rooms, Room, n) elif 300 < n <= 500: action = n # special computed goto else: action = make_object(data.messages, Message, n - 500) move = Move() if len(verbs) == 1 and verbs[0] == 1: move.is_forced = True else: move.verbs = [make_object(data.vocabulary, Word, verb_n) for verb_n in verbs if verb_n < 100] # skip bad "109" move.condition = condition move.action = action data.rooms[x].travel_table.append(move)
def parse_move(tree): move = Move() move.activity = "Unknown activity" move.import_date_time = datetime.now() return move
def create_move(): move = Move() move.activity = GPX_ACTIVITY_TYPE move.import_date_time = datetime.now() return move
def strava_import(current_user, activity_id): client = get_strava_client(current_user) activity = client.get_activity(activity_id=activity_id) stream_types = ['time', 'distance', 'latlng', 'temp', 'heartrate', 'velocity_smooth', 'altitude'] streams = client.get_activity_streams(activity_id, types=stream_types) device_ids = [device_id for device_id, in db.session.query(func.distinct(Move.device_id)) .join(User) .join(Device) .filter(Device.name != gpx_import.GPX_DEVICE_NAME) .filter(Move.user == current_user).all()] assert len(device_ids) == 1 device_id = device_ids[0] device = db.session.query(Device).filter_by(id = device_id).one(); activity_string = map_type(activity.type) result = db.session.query(Move.activity_type).filter(Move.activity == activity_string).first() if result: activity_type, = result else: activity_type = None move = Move() move.user = current_user move.duration = activity.elapsed_time move.ascent = float(activity.total_elevation_gain) move.speed_avg = float(activity.average_speed) move.hr_avg = heart_rate(activity.average_heartrate) move.temperature_avg = celcius_to_kelvin(activity.average_temp) move.device = device move.date_time = activity.start_date_local move.activity = activity_string move.activity_type = activity_type move.distance = float(activity.distance) move.import_date_time = datetime.now() move.import_module = __name__ move.strava_activity_id = activity_id move.public = False move.source = "Strava activity id=%d; external_id='%s'" % (activity_id, activity.external_id) lengths = set([len(streams[stream].data) for stream in streams]) assert len(lengths) == 1 length, = lengths move.speed_max = move.speed_avg all_samples = [] for i in range(0, length): time = timedelta(seconds=streams['time'].data[i]) distance = float(streams['distance'].data[i]) if 'heartrate' in streams: hr = float(streams['heartrate'].data[i]) else: hr = None if 'latlng' in streams: lat, lng = streams['latlng'].data[i] else: lat = None lng = None if 'altitude' in streams: altitude = float(streams['altitude'].data[i]) else: altitude = None if 'velocity_smooth' in streams: speed = float(streams['velocity_smooth'].data[i]) else: speed = None if 'temp' in streams: temperature = celcius_to_kelvin(streams['temp'].data[i]) else: temperature = None sample = Sample() sample.sample_type = SAMPLE_TYPE sample.move = move sample.time = time sample.utc = (activity.start_date + time).replace(tzinfo=None) sample.distance = distance sample.latitude = degree_to_radian(lat) sample.longitude = degree_to_radian(lng) sample.hr = heart_rate(hr) sample.temperature = temperature sample.speed = speed sample.altitude = altitude move.speed_max = max(move.speed_max, speed) all_samples.append(sample) derive_move_infos_from_samples(move, all_samples) db.session.add(move) db.session.commit() return move