Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
saildrone-push / __init__.py
Size: Mime:
import configparser, os, logging
from saildrone_push.common.saildrone import SaildroneAPIError, SaildroneAPI
from saildrone_push.common.data_handler import DataHandler

# Initialize root logger
logging.basicConfig(level=logging.INFO, format="%(asctime)s: %(levelname)s %(message)s")

cfg_path = os.environ.get('SAILDRONE_PUSH_CFG_FILE') or "{0}/config/config.cfg".format(os.path.dirname(os.path.realpath(__file__)))

# Try to read and parse configuration
config = configparser.ConfigParser()
print(f"cfg_path:{cfg_path}")
try:
    config.read(cfg_path)
except IOError:
    # Print as logger is not yet initialized
    print("Error: Could not parse configuration file. Program exited.")
    exit()


def push_to_saildrone():
    """Pushes all available and enabled positions from geoserver to saildrone API"""
    updated = []
    try:
        # Try to read data from server
        data_handler = DataHandler(config)
        data_handler.try_load()
        # Push all enabled devices to Saildrone
        platforms = data_handler.get_updated_platforms()
        if len(platforms) < 1:
            logging.warning('No updated platforms info.')
            return []

        saildrone_api = SaildroneAPI()
        for key in platforms:
            platform = platforms[key]
            if platform["enabled"]:
                ok = saildrone_api.push_vessel(key,
                                               platform["timestamp"],
                                               platform["latitude"],
                                               platform["longitude"],
                                               platform["speed_over_ground"],
                                               platform["course_over_ground"],
                                               platform["heading"])
                if ok:
                    updated.append(key)
                    logging.info("Posted update of platform {0} to the Saildrone API".format(key))

        return updated

    except (IOError, SaildroneAPIError) as exc:
        logging.exception("Could not push updates to Saildrone API. Update skipped.", exc)