mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-13 16:18:42 +00:00
Python measures(all=False, group="Body")
Similar to R measures returning a dict with a list for each measure field in the requested group (Body or Hrv).
This commit is contained in:
@@ -759,7 +759,6 @@ Bindings::pmc(bool all, QString metric) const
|
||||
} else {
|
||||
|
||||
unsigned int index=0;
|
||||
QDate start = pmcData.start();
|
||||
for(int k=0; k < pmcData.days(); k++) {
|
||||
|
||||
// day today
|
||||
@@ -790,6 +789,79 @@ Bindings::pmc(bool all, QString metric) const
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PyObject*
|
||||
Bindings::measures(bool all, QString group) const
|
||||
{
|
||||
Context *context = python->contexts.value(threadid());
|
||||
|
||||
// return a dict with Measures data for all or the current season
|
||||
if (context && context->athlete && context->athlete->measures) {
|
||||
|
||||
// import datetime if necessary
|
||||
if (PyDateTimeAPI == NULL) PyDateTime_IMPORT;
|
||||
|
||||
// get the currently selected date range
|
||||
DateRange range(context->currentDateRange());
|
||||
|
||||
// convert the group symbol to an index, default to Body=0
|
||||
int groupIdx = context->athlete->measures->getGroupSymbols().indexOf(group);
|
||||
if (groupIdx < 0) groupIdx = 0;
|
||||
|
||||
// Update range for all
|
||||
if (all) {
|
||||
range.from = context->athlete->measures->getStartDate(groupIdx);
|
||||
range.to = context->athlete->measures->getEndDate(groupIdx);
|
||||
}
|
||||
|
||||
// how many entries ?
|
||||
unsigned int size = range.from.daysTo(range.to) + 1;
|
||||
|
||||
// returning a dict with
|
||||
// date, field1, field2, ...
|
||||
PyObject* ans = PyDict_New();
|
||||
|
||||
// DATE - 1 a day from start
|
||||
PyObject* datelist = PyList_New(size);
|
||||
QDate start = range.from;
|
||||
for(unsigned int k=0; k<size; k++) {
|
||||
QDate d = start.addDays(k);
|
||||
PyList_SET_ITEM(datelist, k, PyDate_FromDate(d.year(), d.month(), d.day()));
|
||||
}
|
||||
|
||||
// add to the dict
|
||||
PyDict_SetItemString(ans, "date", datelist);
|
||||
|
||||
// MEASURES DATA
|
||||
QStringList fieldSymbols = context->athlete->measures->getFieldSymbols(groupIdx);
|
||||
QVector<PyObject*> fields(fieldSymbols.count());
|
||||
for (int i=0; i<fieldSymbols.count(); i++)
|
||||
fields[i] = PyList_New(size);
|
||||
|
||||
unsigned int index = 0;
|
||||
for(int k=0; k < size; k++) {
|
||||
|
||||
// day today
|
||||
if (start.addDays(k) >= range.from && start.addDays(k) <= range.to) {
|
||||
|
||||
for (int fieldIdx=0; fieldIdx<fields.count(); fieldIdx++)
|
||||
PyList_SET_ITEM(fields[fieldIdx], index, PyFloat_FromDouble(context->athlete->measures->getFieldValue(groupIdx, start.addDays(k), fieldIdx)));
|
||||
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
// add to the dict
|
||||
for (int fieldIdx=0; fieldIdx<fields.count(); fieldIdx++)
|
||||
PyDict_SetItemString(ans, fieldSymbols[fieldIdx].toUtf8().constData(), fields[fieldIdx]);
|
||||
|
||||
// return it
|
||||
return ans;
|
||||
}
|
||||
|
||||
// nothing to return
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
Bindings::webpage(QString url) const
|
||||
{
|
||||
|
||||
@@ -38,6 +38,7 @@ class Bindings {
|
||||
PyObject* seasonMetrics(bool all=false, QString filter=QString(), bool compare=false) const;
|
||||
PythonDataSeries *metrics(QString metric, bool all=false, QString filter=QString()) const;
|
||||
PyObject* pmc(bool all=false, QString metric=QString("TSS")) const;
|
||||
PyObject* measures(bool all=false, QString group=QString("Body")) const;
|
||||
|
||||
// working with meanmax data
|
||||
PyObject* activityMeanmax(bool compare=false) const;
|
||||
|
||||
@@ -127,6 +127,7 @@ public:
|
||||
PyObject* seasonMetrics(bool all=false, QString filter=QString(), bool compare=false) /TransferBack/;
|
||||
PythonDataSeries *metrics(QString metric, bool all=false, QString filter=QString()) /TransferBack/;
|
||||
PyObject* pmc(bool all=false, QString metric=QString("TSS")) /TransferBack/;
|
||||
PyObject* measures(bool all=false, QString group=QString("Body")) /TransferBack/;
|
||||
|
||||
// working with meanmax data
|
||||
PyObject* activityMeanmax(bool compare=false) /TransferBack/;
|
||||
|
||||
@@ -33,42 +33,46 @@
|
||||
#define sipName_seriesLast &sipStrings_goldencheetah[117]
|
||||
#define sipNameNr_seriesName 128
|
||||
#define sipName_seriesName &sipStrings_goldencheetah[128]
|
||||
#define sipNameNr_threadid 139
|
||||
#define sipName_threadid &sipStrings_goldencheetah[139]
|
||||
#define sipNameNr_Bindings 148
|
||||
#define sipName_Bindings &sipStrings_goldencheetah[148]
|
||||
#define sipNameNr_webpage 157
|
||||
#define sipName_webpage &sipStrings_goldencheetah[157]
|
||||
#define sipNameNr_metrics 165
|
||||
#define sipName_metrics &sipStrings_goldencheetah[165]
|
||||
#define sipNameNr_compare 173
|
||||
#define sipName_compare &sipStrings_goldencheetah[173]
|
||||
#define sipNameNr_version 181
|
||||
#define sipName_version &sipStrings_goldencheetah[181]
|
||||
#define sipNameNr_athlete 189
|
||||
#define sipName_athlete &sipStrings_goldencheetah[189]
|
||||
#define sipNameNr___len__ 197
|
||||
#define sipName___len__ &sipStrings_goldencheetah[197]
|
||||
#define sipNameNr___str__ 205
|
||||
#define sipName___str__ &sipStrings_goldencheetah[205]
|
||||
#define sipNameNr_QString 213
|
||||
#define sipName_QString &sipStrings_goldencheetah[213]
|
||||
#define sipNameNr_metric 221
|
||||
#define sipName_metric &sipStrings_goldencheetah[221]
|
||||
#define sipNameNr_filter 228
|
||||
#define sipName_filter &sipStrings_goldencheetah[228]
|
||||
#define sipNameNr_series 235
|
||||
#define sipName_series &sipStrings_goldencheetah[235]
|
||||
#define sipNameNr_build 242
|
||||
#define sipName_build &sipStrings_goldencheetah[242]
|
||||
#define sipNameNr_type 248
|
||||
#define sipName_type &sipStrings_goldencheetah[248]
|
||||
#define sipNameNr_url 253
|
||||
#define sipName_url &sipStrings_goldencheetah[253]
|
||||
#define sipNameNr_pmc 257
|
||||
#define sipName_pmc &sipStrings_goldencheetah[257]
|
||||
#define sipNameNr_all 261
|
||||
#define sipName_all &sipStrings_goldencheetah[261]
|
||||
#define sipNameNr_measures 139
|
||||
#define sipName_measures &sipStrings_goldencheetah[139]
|
||||
#define sipNameNr_threadid 148
|
||||
#define sipName_threadid &sipStrings_goldencheetah[148]
|
||||
#define sipNameNr_Bindings 157
|
||||
#define sipName_Bindings &sipStrings_goldencheetah[157]
|
||||
#define sipNameNr_webpage 166
|
||||
#define sipName_webpage &sipStrings_goldencheetah[166]
|
||||
#define sipNameNr_metrics 174
|
||||
#define sipName_metrics &sipStrings_goldencheetah[174]
|
||||
#define sipNameNr_compare 182
|
||||
#define sipName_compare &sipStrings_goldencheetah[182]
|
||||
#define sipNameNr_version 190
|
||||
#define sipName_version &sipStrings_goldencheetah[190]
|
||||
#define sipNameNr_athlete 198
|
||||
#define sipName_athlete &sipStrings_goldencheetah[198]
|
||||
#define sipNameNr___len__ 206
|
||||
#define sipName___len__ &sipStrings_goldencheetah[206]
|
||||
#define sipNameNr___str__ 214
|
||||
#define sipName___str__ &sipStrings_goldencheetah[214]
|
||||
#define sipNameNr_QString 222
|
||||
#define sipName_QString &sipStrings_goldencheetah[222]
|
||||
#define sipNameNr_metric 230
|
||||
#define sipName_metric &sipStrings_goldencheetah[230]
|
||||
#define sipNameNr_filter 237
|
||||
#define sipName_filter &sipStrings_goldencheetah[237]
|
||||
#define sipNameNr_series 244
|
||||
#define sipName_series &sipStrings_goldencheetah[244]
|
||||
#define sipNameNr_group 251
|
||||
#define sipName_group &sipStrings_goldencheetah[251]
|
||||
#define sipNameNr_build 257
|
||||
#define sipName_build &sipStrings_goldencheetah[257]
|
||||
#define sipNameNr_type 263
|
||||
#define sipName_type &sipStrings_goldencheetah[263]
|
||||
#define sipNameNr_url 268
|
||||
#define sipName_url &sipStrings_goldencheetah[268]
|
||||
#define sipNameNr_pmc 272
|
||||
#define sipName_pmc &sipStrings_goldencheetah[272]
|
||||
#define sipNameNr_all 276
|
||||
#define sipName_all &sipStrings_goldencheetah[276]
|
||||
|
||||
#define sipMalloc sipAPI_goldencheetah->api_malloc
|
||||
#define sipFree sipAPI_goldencheetah->api_free
|
||||
|
||||
@@ -374,6 +374,41 @@ static PyObject *meth_Bindings_pmc(PyObject *sipSelf, PyObject *sipArgs, PyObjec
|
||||
}
|
||||
|
||||
|
||||
extern "C" {static PyObject *meth_Bindings_measures(PyObject *, PyObject *, PyObject *);}
|
||||
static PyObject *meth_Bindings_measures(PyObject *sipSelf, PyObject *sipArgs, PyObject *sipKwds)
|
||||
{
|
||||
PyObject *sipParseErr = NULL;
|
||||
|
||||
{
|
||||
bool a0 = 0;
|
||||
::QString a1def = QString("Body");
|
||||
::QString* a1 = &a1def;
|
||||
int a1State = 0;
|
||||
::Bindings *sipCpp;
|
||||
|
||||
static const char *sipKwdList[] = {
|
||||
sipName_all,
|
||||
sipName_group,
|
||||
};
|
||||
|
||||
if (sipParseKwdArgs(&sipParseErr, sipArgs, sipKwds, sipKwdList, NULL, "B|bJ1", &sipSelf, sipType_Bindings, &sipCpp, &a0, sipType_QString,&a1, &a1State))
|
||||
{
|
||||
PyObject * sipRes;
|
||||
|
||||
sipRes = sipCpp->measures(a0,*a1);
|
||||
sipReleaseType(a1,sipType_QString,a1State);
|
||||
|
||||
return sipRes;
|
||||
}
|
||||
}
|
||||
|
||||
/* Raise an exception if the arguments couldn't be parsed. */
|
||||
sipNoMethod(sipParseErr, sipName_Bindings, sipName_measures, NULL);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
extern "C" {static PyObject *meth_Bindings_activityMeanmax(PyObject *, PyObject *, PyObject *);}
|
||||
static PyObject *meth_Bindings_activityMeanmax(PyObject *sipSelf, PyObject *sipArgs, PyObject *sipKwds)
|
||||
{
|
||||
@@ -546,6 +581,7 @@ static PyMethodDef methods_Bindings[] = {
|
||||
{SIP_MLNAME_CAST(sipName_activityMetrics), (PyCFunction)meth_Bindings_activityMetrics, METH_VARARGS|METH_KEYWORDS, NULL},
|
||||
{SIP_MLNAME_CAST(sipName_athlete), meth_Bindings_athlete, METH_VARARGS, NULL},
|
||||
{SIP_MLNAME_CAST(sipName_build), meth_Bindings_build, METH_VARARGS, NULL},
|
||||
{SIP_MLNAME_CAST(sipName_measures), (PyCFunction)meth_Bindings_measures, METH_VARARGS|METH_KEYWORDS, NULL},
|
||||
{SIP_MLNAME_CAST(sipName_metrics), (PyCFunction)meth_Bindings_metrics, METH_VARARGS|METH_KEYWORDS, NULL},
|
||||
{SIP_MLNAME_CAST(sipName_pmc), (PyCFunction)meth_Bindings_pmc, METH_VARARGS|METH_KEYWORDS, NULL},
|
||||
{SIP_MLNAME_CAST(sipName_seasonMeanmax), (PyCFunction)meth_Bindings_seasonMeanmax, METH_VARARGS|METH_KEYWORDS, NULL},
|
||||
@@ -573,7 +609,7 @@ sipClassTypeDef sipTypeDef_goldencheetah_Bindings = {
|
||||
{
|
||||
sipNameNr_Bindings,
|
||||
{0, 0, 1},
|
||||
15, methods_Bindings,
|
||||
16, methods_Bindings,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
|
||||
@@ -25,6 +25,7 @@ const char sipStrings_goldencheetah[] = {
|
||||
'_', '_', 'g', 'e', 't', 'i', 't', 'e', 'm', '_', '_', 0,
|
||||
's', 'e', 'r', 'i', 'e', 's', 'L', 'a', 's', 't', 0,
|
||||
's', 'e', 'r', 'i', 'e', 's', 'N', 'a', 'm', 'e', 0,
|
||||
'm', 'e', 'a', 's', 'u', 'r', 'e', 's', 0,
|
||||
't', 'h', 'r', 'e', 'a', 'd', 'i', 'd', 0,
|
||||
'B', 'i', 'n', 'd', 'i', 'n', 'g', 's', 0,
|
||||
'w', 'e', 'b', 'p', 'a', 'g', 'e', 0,
|
||||
@@ -38,6 +39,7 @@ const char sipStrings_goldencheetah[] = {
|
||||
'm', 'e', 't', 'r', 'i', 'c', 0,
|
||||
'f', 'i', 'l', 't', 'e', 'r', 0,
|
||||
's', 'e', 'r', 'i', 'e', 's', 0,
|
||||
'g', 'r', 'o', 'u', 'p', 0,
|
||||
'b', 'u', 'i', 'l', 'd', 0,
|
||||
't', 'y', 'p', 'e', 0,
|
||||
'u', 'r', 'l', 0,
|
||||
|
||||
Reference in New Issue
Block a user