diff --git a/rowers/dataprep.py b/rowers/dataprep.py index f206a457..d05ec634 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -31,6 +31,11 @@ from zipfile import BadZipFile import zipfile import os from rowers.models import strokedatafields +import grpc +import grpc.experimental +import rowers.rowing_workout_metrics_pb2 as metrics_pb2 +import rowers.rowing_workout_metrics_pb2_grpc as metrics_pb2_grpc +import traceback from rowingdata import ( KinoMapParser, @@ -499,9 +504,48 @@ def calculate_goldmedalstandard(rower, workout, recurrance=True): def setcp(workout, background=False, recurrance=True): filename = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id) + csvfilename = workout.csvfilename + # check what the real file name is + if os.path.exists(csvfilename): + csvfile = csvfilename + elif os.path.exists(csvfilename+'.csv'): # pragma: no cover + csvfile = csvfilename+'.csv' + elif os.path.exists(csvfilename+'.gz'): # pragma: no cover + csvfile = csvfilename+'.gz' + else: # pragma: no cover + return pd.DataFrame({'delta': [], 'cp': []}), pd.Series(dtype='float'), pd.Series(dtype='float') + strokesdf = getsmallrowdata_db( ['power', 'workoutid', 'time'], ids=[workout.id]) + protos = grpc.protos("rowing_workout_metrics.proto") + services = grpc.services("rowing_workout_metrics.proto") + req = protos.CPRequest( + filename = csvfile, + filetype = "CSV", + tarr = datautils.getlogarr(1.05*strokesdf['time'].max()) + ) + response = services.GetCP(req, "localhost:50052", insecure=True) + delta = response.delta + cpvalues = response.power + powermean = response.avgpower + + df = pd.DataFrame({ + 'delta': delta, + 'cp': cpvalues, + 'id': workout.id, + }) + df.to_parquet(filename, engine='fastparquet', compression='GZIP') + if recurrance: + goldmedalstandard, goldmedalduration = calculate_goldmedalstandard( + workout.user, workout) + workout.goldmedalstandard = goldmedalstandard + workout.goldmedalduration = goldmedalduration + workout.save() + return df, delta, cpvalues + + + try: if strokesdf['power'].std() == 0: return pd.DataFrame(), pd.Series(dtype='float'), pd.Series(dtype='float') @@ -682,6 +726,7 @@ def fetchcp_new(rower, workouts): for workout in workouts: cpfile = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id) try: + df, delta, cpvalues = setcp(workout) df = pd.read_parquet(cpfile) df['workout'] = str(workout) df['url'] = workout.url() diff --git a/rowers/datautils.py b/rowers/datautils.py index 029de2f3..fcebd334 100644 --- a/rowers/datautils.py +++ b/rowers/datautils.py @@ -1,4 +1,3 @@ - import pandas as pd import numpy as np from scipy.interpolate import griddata diff --git a/rowers/otw_power_calculator_pb2.py b/rowers/otw_power_calculator_pb2.py index f0c2091c..d099031d 100644 --- a/rowers/otw_power_calculator_pb2.py +++ b/rowers/otw_power_calculator_pb2.py @@ -1,185 +1,31 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: otw-power-calculator.proto - -from google.protobuf import symbol_database as _symbol_database -from google.protobuf import reflection as _reflection -from google.protobuf import message as _message +# Protobuf Python Version: 4.25.1 +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor -import sys -_b = sys.version_info[0] < 3 and ( - lambda x: x) or (lambda x: x.encode('latin1')) +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor.FileDescriptor( - name='otw-power-calculator.proto', - package='otw_power_calculator', - syntax='proto3', - serialized_options=None, - serialized_pb=_b('\n\x1aotw-power-calculator.proto\x12\x14otw_power_calculator\"\xc0\x01\n\x13WorkoutPowerRequest\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\x12\x10\n\x08\x62oattype\x18\x02 \x01(\t\x12\x10\n\x08\x63rewmass\x18\x03 \x01(\x01\x12\x15\n\rpowermeasured\x18\x04 \x01(\x08\x12\x13\n\x0bprogressurl\x18\x05 \x01(\t\x12\x0e\n\x06secret\x18\x06 \x01(\t\x12\x0e\n\x06silent\x18\x07 \x01(\x08\x12\x11\n\tboatclass\x18\x08 \x01(\t\x12\x14\n\x0c\x63oastalbrand\x18\t \x01(\t\"#\n\x11\x43\x61lculationResult\x12\x0e\n\x06result\x18\x01 \x01(\x05\x32j\n\x05Power\x12\x61\n\tCalcPower\x12).otw_power_calculator.WorkoutPowerRequest\x1a\'.otw_power_calculator.CalculationResult\"\x00\x62\x06proto3') -) -_WORKOUTPOWERREQUEST = _descriptor.Descriptor( - name='WorkoutPowerRequest', - full_name='otw_power_calculator.WorkoutPowerRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='filename', full_name='otw_power_calculator.WorkoutPowerRequest.filename', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='boattype', full_name='otw_power_calculator.WorkoutPowerRequest.boattype', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='crewmass', full_name='otw_power_calculator.WorkoutPowerRequest.crewmass', index=2, - number=3, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='powermeasured', full_name='otw_power_calculator.WorkoutPowerRequest.powermeasured', index=3, - number=4, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='progressurl', full_name='otw_power_calculator.WorkoutPowerRequest.progressurl', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='secret', full_name='otw_power_calculator.WorkoutPowerRequest.secret', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='silent', full_name='otw_power_calculator.WorkoutPowerRequest.silent', index=6, - number=7, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='boatclass', full_name='otw_power_calculator.WorkoutPowerRequest.boatclass', index=7, - number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='coastalbrand', full_name='otw_power_calculator.WorkoutPowerRequest.coastalbrand', index=8, - number=9, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=53, - serialized_end=245, -) - - -_CALCULATIONRESULT = _descriptor.Descriptor( - name='CalculationResult', - full_name='otw_power_calculator.CalculationResult', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='result', full_name='otw_power_calculator.CalculationResult.result', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=247, - serialized_end=282, -) - -DESCRIPTOR.message_types_by_name['WorkoutPowerRequest'] = _WORKOUTPOWERREQUEST -DESCRIPTOR.message_types_by_name['CalculationResult'] = _CALCULATIONRESULT -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -WorkoutPowerRequest = _reflection.GeneratedProtocolMessageType('WorkoutPowerRequest', (_message.Message,), { - 'DESCRIPTOR': _WORKOUTPOWERREQUEST, - '__module__': 'otw_power_calculator_pb2' - # @@protoc_insertion_point(class_scope:otw_power_calculator.WorkoutPowerRequest) -}) -_sym_db.RegisterMessage(WorkoutPowerRequest) - -CalculationResult = _reflection.GeneratedProtocolMessageType('CalculationResult', (_message.Message,), { - 'DESCRIPTOR': _CALCULATIONRESULT, - '__module__': 'otw_power_calculator_pb2' - # @@protoc_insertion_point(class_scope:otw_power_calculator.CalculationResult) -}) -_sym_db.RegisterMessage(CalculationResult) - - -_POWER = _descriptor.ServiceDescriptor( - name='Power', - full_name='otw_power_calculator.Power', - file=DESCRIPTOR, - index=0, - serialized_options=None, - serialized_start=284, - serialized_end=390, - methods=[ - _descriptor.MethodDescriptor( - name='CalcPower', - full_name='otw_power_calculator.Power.CalcPower', - index=0, - containing_service=None, - input_type=_WORKOUTPOWERREQUEST, - output_type=_CALCULATIONRESULT, - serialized_options=None, - ), - ]) -_sym_db.RegisterServiceDescriptor(_POWER) - -DESCRIPTOR.services_by_name['Power'] = _POWER +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1aotw-power-calculator.proto\x12\x14otw_power_calculator\"\xc0\x01\n\x13WorkoutPowerRequest\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\x12\x10\n\x08\x62oattype\x18\x02 \x01(\t\x12\x10\n\x08\x63rewmass\x18\x03 \x01(\x01\x12\x15\n\rpowermeasured\x18\x04 \x01(\x08\x12\x13\n\x0bprogressurl\x18\x05 \x01(\t\x12\x0e\n\x06secret\x18\x06 \x01(\t\x12\x0e\n\x06silent\x18\x07 \x01(\x08\x12\x11\n\tboatclass\x18\x08 \x01(\t\x12\x14\n\x0c\x63oastalbrand\x18\t \x01(\t\"#\n\x11\x43\x61lculationResult\x12\x0e\n\x06result\x18\x01 \x01(\x05\x32j\n\x05Power\x12\x61\n\tCalcPower\x12).otw_power_calculator.WorkoutPowerRequest\x1a\'.otw_power_calculator.CalculationResult\"\x00\x42\x18Z\x16./otw-power-calculatorb\x06proto3') +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'otw_power_calculator_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None + _globals['DESCRIPTOR']._serialized_options = b'Z\026./otw-power-calculator' + _globals['_WORKOUTPOWERREQUEST']._serialized_start=53 + _globals['_WORKOUTPOWERREQUEST']._serialized_end=245 + _globals['_CALCULATIONRESULT']._serialized_start=247 + _globals['_CALCULATIONRESULT']._serialized_end=282 + _globals['_POWER']._serialized_start=284 + _globals['_POWER']._serialized_end=390 # @@protoc_insertion_point(module_scope) diff --git a/rowers/otw_power_calculator_pb2_grpc.py b/rowers/otw_power_calculator_pb2_grpc.py index f6d10b5a..c3a58814 100644 --- a/rowers/otw_power_calculator_pb2_grpc.py +++ b/rowers/otw_power_calculator_pb2_grpc.py @@ -1,4 +1,5 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" import grpc import rowers.otw_power_calculator_pb2 as otw__power__calculator__pb2 @@ -12,36 +13,57 @@ class PowerStub(object): """Constructor. Args: - channel: A grpc.Channel. + channel: A grpc.Channel. """ self.CalcPower = channel.unary_unary( - '/otw_power_calculator.Power/CalcPower', - request_serializer=otw__power__calculator__pb2.WorkoutPowerRequest.SerializeToString, - response_deserializer=otw__power__calculator__pb2.CalculationResult.FromString, - ) + '/otw_power_calculator.Power/CalcPower', + request_serializer=otw__power__calculator__pb2.WorkoutPowerRequest.SerializeToString, + response_deserializer=otw__power__calculator__pb2.CalculationResult.FromString, + ) class PowerServicer(object): """Power service definition """ - def CalcPower(self, request, context): # pragma: no cover - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) # pragma: no cover - context.set_details('Method not implemented!') # pragma: no cover - raise NotImplementedError( - 'Method not implemented!') # pragma: no cover + def CalcPower(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') -def add_PowerServicer_to_server(servicer, server): # pragma: no cover +def add_PowerServicer_to_server(servicer, server): rpc_method_handlers = { - 'CalcPower': grpc.unary_unary_rpc_method_handler( - servicer.CalcPower, - request_deserializer=otw__power__calculator__pb2.WorkoutPowerRequest.FromString, - response_serializer=otw__power__calculator__pb2.CalculationResult.SerializeToString, - ), - } # pragma: no cover + 'CalcPower': grpc.unary_unary_rpc_method_handler( + servicer.CalcPower, + request_deserializer=otw__power__calculator__pb2.WorkoutPowerRequest.FromString, + response_serializer=otw__power__calculator__pb2.CalculationResult.SerializeToString, + ), + } generic_handler = grpc.method_handlers_generic_handler( - 'otw_power_calculator.Power', rpc_method_handlers) + 'otw_power_calculator.Power', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class Power(object): + """Power service definition + """ + + @staticmethod + def CalcPower(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/otw_power_calculator.Power/CalcPower', + otw__power__calculator__pb2.WorkoutPowerRequest.SerializeToString, + otw__power__calculator__pb2.CalculationResult.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/rowers/rowing_workout_metrics_pb2.py b/rowers/rowing_workout_metrics_pb2.py index d6422d38..6a4554b2 100644 --- a/rowers/rowing_workout_metrics_pb2.py +++ b/rowers/rowing_workout_metrics_pb2.py @@ -1,210 +1,37 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: rowing-workout-metrics.proto - -from google.protobuf import symbol_database as _symbol_database -from google.protobuf import reflection as _reflection -from google.protobuf import message as _message +# Protobuf Python Version: 4.25.1 +"""Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor -import sys -_b = sys.version_info[0] < 3 and ( - lambda x: x) or (lambda x: x.encode('latin1')) +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor.FileDescriptor( - name='rowing-workout-metrics.proto', - package='rowing_workout_metrics', - syntax='proto3', - serialized_options=None, - serialized_pb=_b('\n\x1crowing-workout-metrics.proto\x12\x16' - 'rowing_workout_metrics\"p\n\x15WorkoutMetricsRequest' - '\x12\x10\n\x08\x66ilename' - '\x18\x01 \x01(\t\x12\x0b\n\x03sex' - '\x18\x02 \x01(\t\x12\x0b\n\x03\x66tp\x18\x03 \x01' - '(\x01\x12\r\n\x05hrftp\x18\x04 \x01(\x01\x12\r\n\x05hrmax' - '\x18\x05 \x01(\x01\x12\r\n\x05hrmin\x18\x06 \x01(\x01\"p\n\x16WorkoutMetricsResponse' - '\x12\x0b\n\x03tss\x18\x01 \x01(\x01\x12\r\n\x05normp\x18\x02 \x01(\x01\x12\r\n\x05trimp' - '\x18\x03 \x01(\x01\x12\r\n\x05hrtss\x18\x04 \x01(\x01\x12\r\n\x05normv' - '\x18\x05 \x01(\x01\x12\r\n\x05normw\x18\x06 \x01(\x01\x32w\n\x07Metrics' - '\x12l\n\x0b\x43\x61lcMetrics\x12-.rowing_workout_metrics.WorkoutMetricsRequest' - '\x1a..rowing_workout_metrics.WorkoutMetricsResponseb\x06proto3') -) -_WORKOUTMETRICSREQUEST = _descriptor.Descriptor( - name='WorkoutMetricsRequest', - full_name='rowing_workout_metrics.WorkoutMetricsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='filename', full_name='rowing_workout_metrics.WorkoutMetricsRequest.filename', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sex', full_name='rowing_workout_metrics.WorkoutMetricsRequest.sex', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ftp', full_name='rowing_workout_metrics.WorkoutMetricsRequest.ftp', index=2, - number=3, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='hrftp', full_name='rowing_workout_metrics.WorkoutMetricsRequest.hrftp', index=3, - number=4, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='hrmax', full_name='rowing_workout_metrics.WorkoutMetricsRequest.hrmax', index=4, - number=5, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='hrmin', full_name='rowing_workout_metrics.WorkoutMetricsRequest.hrmin', index=5, - number=6, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=56, - serialized_end=168, -) - - -_WORKOUTMETRICSRESPONSE = _descriptor.Descriptor( - name='WorkoutMetricsResponse', - full_name='rowing_workout_metrics.WorkoutMetricsResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='tss', full_name='rowing_workout_metrics.WorkoutMetricsResponse.tss', index=0, - number=1, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='normp', full_name='rowing_workout_metrics.WorkoutMetricsResponse.normp', index=1, - number=2, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='trimp', full_name='rowing_workout_metrics.WorkoutMetricsResponse.trimp', index=2, - number=3, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='hrtss', full_name='rowing_workout_metrics.WorkoutMetricsResponse.hrtss', index=3, - number=4, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='normv', full_name='rowing_workout_metrics.WorkoutMetricsResponse.normv', index=4, - number=5, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='normw', full_name='rowing_workout_metrics.WorkoutMetricsResponse.normw', index=5, - number=6, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=170, - serialized_end=282, -) - -DESCRIPTOR.message_types_by_name['WorkoutMetricsRequest'] = _WORKOUTMETRICSREQUEST -DESCRIPTOR.message_types_by_name['WorkoutMetricsResponse'] = _WORKOUTMETRICSRESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -WorkoutMetricsRequest = _reflection.GeneratedProtocolMessageType('WorkoutMetricsRequest', (_message.Message,), { - 'DESCRIPTOR': _WORKOUTMETRICSREQUEST, - '__module__': 'rowing_workout_metrics_pb2' - # @@protoc_insertion_point(class_scope:rowing_workout_metrics.WorkoutMetricsRequest) -}) -_sym_db.RegisterMessage(WorkoutMetricsRequest) - -WorkoutMetricsResponse = _reflection.GeneratedProtocolMessageType('WorkoutMetricsResponse', (_message.Message,), { - 'DESCRIPTOR': _WORKOUTMETRICSRESPONSE, - '__module__': 'rowing_workout_metrics_pb2' - # @@protoc_insertion_point(class_scope:rowing_workout_metrics.WorkoutMetricsResponse) -}) -_sym_db.RegisterMessage(WorkoutMetricsResponse) - - -_METRICS = _descriptor.ServiceDescriptor( - name='Metrics', - full_name='rowing_workout_metrics.Metrics', - file=DESCRIPTOR, - index=0, - serialized_options=None, - serialized_start=284, - serialized_end=403, - methods=[ - _descriptor.MethodDescriptor( - name='CalcMetrics', - full_name='rowing_workout_metrics.Metrics.CalcMetrics', - index=0, - containing_service=None, - input_type=_WORKOUTMETRICSREQUEST, - output_type=_WORKOUTMETRICSRESPONSE, - serialized_options=None, - ), - ]) -_sym_db.RegisterServiceDescriptor(_METRICS) - -DESCRIPTOR.services_by_name['Metrics'] = _METRICS +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1crowing-workout-metrics.proto\x12\x16rowing_workout_metrics\"p\n\x15WorkoutMetricsRequest\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\x12\x0b\n\x03sex\x18\x02 \x01(\t\x12\x0b\n\x03\x66tp\x18\x03 \x01(\x01\x12\r\n\x05hrftp\x18\x04 \x01(\x01\x12\r\n\x05hrmax\x18\x05 \x01(\x01\x12\r\n\x05hrmin\x18\x06 \x01(\x01\"p\n\x16WorkoutMetricsResponse\x12\x0b\n\x03tss\x18\x01 \x01(\x01\x12\r\n\x05normp\x18\x02 \x01(\x01\x12\r\n\x05trimp\x18\x03 \x01(\x01\x12\r\n\x05hrtss\x18\x04 \x01(\x01\x12\r\n\x05normv\x18\x05 \x01(\x01\x12\r\n\x05normw\x18\x06 \x01(\x01\"=\n\tCPRequest\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\x12\x10\n\x08\x66iletype\x18\x02 \x01(\t\x12\x0c\n\x04tarr\x18\x03 \x03(\x01\"<\n\nCPResponse\x12\r\n\x05\x64\x65lta\x18\x01 \x03(\x01\x12\r\n\x05power\x18\x02 \x03(\x01\x12\x10\n\x08\x61vgpower\x18\x03 \x01(\x01\x32w\n\x07Metrics\x12l\n\x0b\x43\x61lcMetrics\x12-.rowing_workout_metrics.WorkoutMetricsRequest\x1a..rowing_workout_metrics.WorkoutMetricsResponse2T\n\x02\x43P\x12N\n\x05GetCP\x12!.rowing_workout_metrics.CPRequest\x1a\".rowing_workout_metrics.CPResponseB\x1aZ\x18./rowing-workout-metricsb\x06proto3') +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'rowing_workout_metrics_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None + _globals['DESCRIPTOR']._serialized_options = b'Z\030./rowing-workout-metrics' + _globals['_WORKOUTMETRICSREQUEST']._serialized_start=56 + _globals['_WORKOUTMETRICSREQUEST']._serialized_end=168 + _globals['_WORKOUTMETRICSRESPONSE']._serialized_start=170 + _globals['_WORKOUTMETRICSRESPONSE']._serialized_end=282 + _globals['_CPREQUEST']._serialized_start=284 + _globals['_CPREQUEST']._serialized_end=345 + _globals['_CPRESPONSE']._serialized_start=347 + _globals['_CPRESPONSE']._serialized_end=407 + _globals['_METRICS']._serialized_start=409 + _globals['_METRICS']._serialized_end=528 + _globals['_CP']._serialized_start=530 + _globals['_CP']._serialized_end=614 # @@protoc_insertion_point(module_scope) diff --git a/rowers/rowing_workout_metrics_pb2_grpc.py b/rowers/rowing_workout_metrics_pb2_grpc.py index 30aac7b5..2f5a91d7 100644 --- a/rowers/rowing_workout_metrics_pb2_grpc.py +++ b/rowers/rowing_workout_metrics_pb2_grpc.py @@ -1,4 +1,5 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" import grpc import rowers.rowing_workout_metrics_pb2 as rowing__workout__metrics__pb2 @@ -12,13 +13,13 @@ class MetricsStub(object): """Constructor. Args: - channel: A grpc.Channel. + channel: A grpc.Channel. """ self.CalcMetrics = channel.unary_unary( - '/rowing_workout_metrics.Metrics/CalcMetrics', - request_serializer=rowing__workout__metrics__pb2.WorkoutMetricsRequest.SerializeToString, - response_deserializer=rowing__workout__metrics__pb2.WorkoutMetricsResponse.FromString, - ) + '/rowing_workout_metrics.Metrics/CalcMetrics', + request_serializer=rowing__workout__metrics__pb2.WorkoutMetricsRequest.SerializeToString, + response_deserializer=rowing__workout__metrics__pb2.WorkoutMetricsResponse.FromString, + ) class MetricsServicer(object): @@ -26,22 +27,107 @@ class MetricsServicer(object): """ def CalcMetrics(self, request, context): - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) # pragma: no cover - context.set_details('Method not implemented!') # pragma: no cover - raise NotImplementedError( - 'Method not implemented!') # pragma: no cover + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') -def add_MetricsServicer_to_server(servicer, server): # pragma: no cover +def add_MetricsServicer_to_server(servicer, server): rpc_method_handlers = { - 'CalcMetrics': grpc.unary_unary_rpc_method_handler( - servicer.CalcMetrics, - request_deserializer=rowing__workout__metrics__pb2.WorkoutMetricsRequest.FromString, - response_serializer=rowing__workout__metrics__pb2.WorkoutMetricsResponse.SerializeToString, - ), + 'CalcMetrics': grpc.unary_unary_rpc_method_handler( + servicer.CalcMetrics, + request_deserializer=rowing__workout__metrics__pb2.WorkoutMetricsRequest.FromString, + response_serializer=rowing__workout__metrics__pb2.WorkoutMetricsResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'rowing_workout_metrics.Metrics', rpc_method_handlers) + 'rowing_workout_metrics.Metrics', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class Metrics(object): + """OTW-metrics service definition + """ + + @staticmethod + def CalcMetrics(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/rowing_workout_metrics.Metrics/CalcMetrics', + rowing__workout__metrics__pb2.WorkoutMetricsRequest.SerializeToString, + rowing__workout__metrics__pb2.WorkoutMetricsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + +class CPStub(object): + """GetCP service definition + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetCP = channel.unary_unary( + '/rowing_workout_metrics.CP/GetCP', + request_serializer=rowing__workout__metrics__pb2.CPRequest.SerializeToString, + response_deserializer=rowing__workout__metrics__pb2.CPResponse.FromString, + ) + + +class CPServicer(object): + """GetCP service definition + """ + + def GetCP(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_CPServicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetCP': grpc.unary_unary_rpc_method_handler( + servicer.GetCP, + request_deserializer=rowing__workout__metrics__pb2.CPRequest.FromString, + response_serializer=rowing__workout__metrics__pb2.CPResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'rowing_workout_metrics.CP', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class CP(object): + """GetCP service definition + """ + + @staticmethod + def GetCP(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/rowing_workout_metrics.CP/GetCP', + rowing__workout__metrics__pb2.CPRequest.SerializeToString, + rowing__workout__metrics__pb2.CPResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/rowers/tasks.py b/rowers/tasks.py index 388af488..6572a1dd 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -1477,7 +1477,6 @@ def handle_calctrimp(id, csvfile = csvfilename+'.gz' else: # pragma: no cover return 0 - csvfile = os.path.abspath(csvfile) with grpc.insecure_channel( diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index e380513e..41219d88 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ