Beispiel #1
0
    def test_fitfile_parses_with_correct_number_of_recs_defs_and_file_size_and_CRC(self):
        fit = FitFile(testfile('sample-activity.fit'))
        fit.parse()

        self.assertEquals(len(fit.records), 3228)
        self.assertEquals(len(fit.definitions), 9)
        self.assertEquals(fit._file_size, 104761)
        self.assertEquals(fit._crc, 0x75C5)
Beispiel #2
0
    def test_fitfile_parses_with_correct_number_of_recs_defs_and_file_size_and_CRC(self):
        fit = FitFile(testfile('sample-activity.fit'))
        fit.parse()

        self.assertEquals(len(fit.records), 3228)
        self.assertEquals(len(fit.definitions), 9)
        self.assertEquals(fit._file_size, 104761)
        self.assertEquals(fit._crc, 0x75C5)
def importfitfile(f, user=None):
    if user is None:
        user = get_user_model().objects.all()[0]
    logger.info(u"Processing '%s'..." % f)
    fitfile = FitFile(
        f,
        data_processor=FullDatetimeProcessor(),
        check_crc=False
    )
    workout = Workout()
    logger.info(u"Processing session")
    for msg in fitfile.get_messages(name='session', as_dict=True):
        logger.debug(u"Session fields: %s" % str(msg['fields']))
        for f in msg['fields']:
            #if f['name'] == 'timestamp':
                #workout.title = f['value'].astimezone(get_default_timezone()).isoformat()
            if f['name'] == 'start_time':
                workout.publish_date = f['value']
                workout.title = f['value'].astimezone(get_default_timezone()).isoformat()
            if hasattr(workout, f['name']):
                setattr(workout, f['name'], f['value'])

    workout.user = user
    workout.save()

    logger.info(u"Processing laps")
    for msg in fitfile.get_messages(name='lap', as_dict=True):
        logger.info(" Lap: '%s'" % msg['name'])
        lap = Lap(workout=workout)
        for f in msg['fields']:
            if hasattr(lap, f['name']):
                setattr(lap, f['name'], f['value'])
        lap.save()

    logger.info(u"Processing data points")
    for msg in fitfile.get_messages(name='record', as_dict=True):
        record = Record(workout=workout)
        for f in msg['fields']:
            if hasattr(record, f['name']):
                setattr(record, f['name'], f['value'])
        record.save()

    logger.info("Finished.")
    return workout
Beispiel #4
0
def importfitfile(f, user=None):
    if user is None:
        user = get_user_model().objects.all()[0]
    logger.info(u"Processing '%s'..." % f)
    fitfile = FitFile(f,
                      data_processor=FullDatetimeProcessor(),
                      check_crc=False)
    workout = Workout()
    logger.info(u"Processing session")
    for msg in fitfile.get_messages(name='session', as_dict=True):
        logger.debug(u"Session fields: %s" % str(msg['fields']))
        for f in msg['fields']:
            #if f['name'] == 'timestamp':
            #workout.title = f['value'].astimezone(get_default_timezone()).isoformat()
            if f['name'] == 'start_time':
                workout.publish_date = f['value']
                workout.title = f['value'].astimezone(
                    get_default_timezone()).isoformat()
            if hasattr(workout, f['name']):
                setattr(workout, f['name'], f['value'])

    workout.user = user
    workout.save()

    logger.info(u"Processing laps")
    for msg in fitfile.get_messages(name='lap', as_dict=True):
        logger.info(" Lap: '%s'" % msg['name'])
        lap = Lap(workout=workout)
        for f in msg['fields']:
            if hasattr(lap, f['name']):
                setattr(lap, f['name'], f['value'])
        lap.save()

    logger.info(u"Processing data points")
    for msg in fitfile.get_messages(name='record', as_dict=True):
        record = Record(workout=workout)
        for f in msg['fields']:
            if hasattr(record, f['name']):
                setattr(record, f['name'], f['value'])
        record.save()

    logger.info("Finished.")
    return workout
Beispiel #5
0
#!/usr/bin/env python

from fitparse.base import FitFile


fit_file = FitFile('example.fit')
fit_file.parse()

records = fit_file.get_records_as_dicts()

for record in records:
    print '\nRecord:'

    for key, value in record.iteritems():
        print ' - %s: %s' % (key.replace('_', ' ').capitalize(), value)
Beispiel #6
0
def FitToDataTable(MyFile, Fields):
    File = FitFile(MyFile)
    File.parse()
    ##obtention des enregistrements
    Values = File.get_messages()
    ##iteration sur les header inutiles jusqu'a l'annonce du fichier cycling
    Records = ExtractRecords(Values)
    #    Continue = True
    #    while Continue :
    #        Record = Values.next()
    #        try :
    #            if Record["sport"] == "cycling" :
    #               Continue = False
    #        except KeyError :
    #            pass
    Datas = []
    i = 0
    #iteration sur les enregistrements
    Prec = None
    for Record in Records:
        #        #print(Record)
        #        if Record.has_key("product")==True :
        #            #rendu ici il n'y a plus d'enregistrements
        #            try :
        #                Record = Values.next()
        #                if Record.has_key("event_type") == False :
        #                    print("Hey, we have to continue !")
        #                else :
        #                    break
        #            except :
        #                break
        #        if Record.has_key("event_type") == False :
        #            #sauter les evenements indiquant le 5km
        #            #transformer le timestamp moche en un beau chiffre
        TIME = time.mktime(Record["timestamp"].timetuple()) + (
            Config["FitFile"]["Decalage"] * 60)
        #TIME = Record["timestamp"] + (Config["FitFile"]["Decalage"]*60*60)
        Record["timestamp"] = int(TIME)
        #print(Fields)
        #try :
        Row = []
        NoMissing = True
        for Field in Fields:
            if Field.RealName not in Record:
                Row.append(Field.Default)
                #print("          Missing this Field : "+Field.RealName)
                NoMissing = False
            else:
                try:
                    Row.append(Record[Field.RealName])
                except KeyError as e:
                    print("This Key is missing : " + Field.RealName)
                    print(Record)
                    raise e

        #Row = list((Record[Field.RealName] for Field in Fields))
#            except :
#                print("Error : ")
#                print(Record)
#                print(Row)
#                raise KeyError
        Row.insert(0, i)
        Datas.append(tuple(Row))
        i += 1
        if NoMissing:
            Prec = Record
    if Prec is None:
        raise ValueError(
            "Prec is none, so we have a problem with this file : " + MyFile)
    #obtention des types des enregistrements
    Types = [VL.GessNumpyType(str(Prec[Field.RealName])) for Field in Fields]
    FieldNames = [Field.Name for Field in Fields]
    FieldNames.insert(0, "OID")
    Types.insert(0, "int32")
    #print(Types)
    BD = VL.JDataTable(FieldNames, Types, "OID", Datas)
    return BD