Exemple #1
0
def handle_universal_options(ns: Namespace) -> Tuple[Config, logging.Logger]:
    """Handle "universal" options (options that apply across all
    commands), such as debug mode or specifying the config file to use.
    """
    config = Config(ns.config)
    if ns.debug:
        log_level = logging.DEBUG
    else:
        log_level = logging.WARNING
    logger = get_logger(file_level=log_level, console_level=log_level, config=config)
    logger.info(f'Loaded configuration from {ns.config}.')
    return config, logger
Exemple #2
0
from typing import List, Optional, Tuple, Dict, Any

import plotly.graph_objects as go
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Output, Input, State
from dash.development.base_component import Component
from dash.exceptions import PreventUpdate

from shyft.activity import Activity
from shyft.logger import get_logger
from shyft.app.controllers._base import _BaseDashController
from shyft.app.view.dash_components.activity_view import ActivityViewComponentFactory

logger = get_logger(__name__)


class ActivityController(_BaseDashController):

    DC_FACTORY = ActivityViewComponentFactory

    def page_content(self,
                     activity: Optional[Activity] = None) -> List[Component]:
        if activity is None:
            raise ValueError(
                'No activity specified, or no such activity exists.')

        return [
            *self.dc_factory.display_all_messages(),
            dcc.Store('activity_id', data=activity.metadata.activity_id),
            html.
Exemple #3
0
import logging
from datetime import datetime, date

from shyft.df_utils.schemas import metadata_time_series_schema
from shyft.logger import get_logger
from test.test_utils.test_common import *

logger = get_logger(file_level=logging.DEBUG,
                    console_level=logging.WARN,
                    log_file=os.path.join(TEST_LOGS_DIR, 'multi_activity.log'))


class ActivityManagerTestCase(BaseTestCase):
    @classmethod
    def setUpClass(cls):

        cls.TEST_RUN_DATA_DIR_1 = run_data_dir('1', replace=True)
        cls.TEST_RUN_DATA_DIR_2 = run_data_dir('2', replace=True)
        cls.TEST_RUN_DATA_DIR_3 = run_data_dir('3', replace=True)

        cls.TEST_CONFIG_1 = get_config(cls.TEST_RUN_DATA_DIR_1)
        cls.TEST_CONFIG_2 = get_config(cls.TEST_RUN_DATA_DIR_2)
        cls.TEST_CONFIG_3 = get_config(cls.TEST_RUN_DATA_DIR_3)

        cls.gpx = []
        cls.activities = []
        for i, fpath in enumerate(TEST_GPX_FILES):
            with open(fpath) as f:
                cls.gpx.append(gpxpy.parse(f))
            cls.activities.append(
                Activity.from_file(fpath, cls.TEST_CONFIG_1, activity_id=i))
Exemple #4
0
from typing import Optional, Union, List, Dict

import numpy as np
import pandas as pd
import gpxpy

from shyft.config import Config
from shyft.df_utils import get_lap_distances, get_lap_durations, get_lap_means
from shyft.geo_utils import haversine_distance
from shyft.logger import get_logger
from shyft.serialize._activity_types import SHYFT_TYPES

MILE = 1609.344  # metres in a mile

# Create a common logger for all parsers.
logger = get_logger('parse')


class ShyftParserError(Exception): pass


class BaseParser:
    ACTIVITY_TYPES = SHYFT_TYPES

    EXCEPTION = ShyftParserError

    # The DataFrame that is passed to infer_points_data must contain all of these columns
    INITIAL_COL_NAMES_POINTS = (
        'point_no',
        'latitude',
        'longitude',
Exemple #5
0
import logging

import lxml.etree
from shyft.logger import get_logger
from shyft.serialize.parse import parser_factory, FITParser, TCXParser
from shyft.serialize.parse.gpx import BaseGPXParser
from test.test_utils.test_common import *

RUN_DIR_BASE = '../../shyft/serialize'

logger = get_logger(file_level=logging.DEBUG,
                    console_level=logging.WARN,
                    log_file=os.path.join(TEST_LOGS_DIR, 'serialize.log'))

# Generate run data directories and config files, etc, for different ActivityManagers
# - one ActivityManager loads Activities from the Strava GPX files,
# - one loads Activities from the Garmin .FIT files, and
# - one loads Activities from the Pyft GPX files.

RUN_DIR_STRAVAGPX = run_data_dir(
    RUN_DIR_BASE + '_StravaGPX',
    replace=True)  # For StravaGPX-generated activities
CONFIG_STRAVAGPX = get_config(RUN_DIR_STRAVAGPX)

RUN_DIR_FIT = run_data_dir(RUN_DIR_BASE + '_FIT',
                           replace=True)  # For .FIT-generated activities
CONFIG_FIT = get_config(RUN_DIR_FIT)

RUN_DIR_GARMINTCX = run_data_dir(
    RUN_DIR_BASE + '_GarminTCX',
    replace=True)  # For Garmin TCX-generated activities