Exemple #1
0
def make_navitia_wrapper():
    """
    return a navitia wrapper to call the navitia API
    """
    url = current_app.config['NAVITIA_URL']
    token = current_app.config.get('NAVITIA_TOKEN')
    instance = current_app.config['NAVITIA_INSTANCE']
    return navitia_wrapper.Navitia(url=url, token=token).instance(instance)
Exemple #2
0
def make_navitia_wrapper(contributor):
    return navitia_wrapper.Navitia(
        url=current_app.config.get(str("NAVITIA_URL")),
        token=contributor.navitia_token,
        timeout=current_app.config.get(str("NAVITIA_TIMEOUT"), 5),
        cache=redis_client,
        query_timeout=current_app.config.get(str("NAVITIA_QUERY_CACHE_TIMEOUT"), 600),
        pubdate_timeout=current_app.config.get(str("NAVITIA_PUBDATE_CACHE_TIMEOUT"), 600),
    ).instance(contributor.navitia_coverage)
Exemple #3
0
 def __init__(self):
     url = current_app.config['NAVITIA_URL']
     token = current_app.config.get('NAVITIA_GTFS_RT_TOKEN')
     instance = current_app.config['NAVITIA_GTFS_RT_INSTANCE']
     self.navitia_wrapper = navitia_wrapper.Navitia(
         url=url, token=token).instance(instance)
     self.navitia_wrapper.timeout = current_app.config.get(
         'NAVITIA_TIMEOUT', 5)
     self.contributor = current_app.config['GTFS_RT_CONTRIBUTOR']
Exemple #4
0
 def __init__(self, contributor, is_new_complete):
     # type: (Contributor, bool) -> None
     self.navitia = navitia_wrapper.Navitia(
         url=current_app.config.get(str("NAVITIA_URL")),
         token=contributor.navitia_token,
         timeout=current_app.config.get(str("NAVITIA_TIMEOUT"), 5),
         cache=redis_client,
         query_timeout=current_app.config.get(
             str("NAVITIA_QUERY_CACHE_TIMEOUT"), 600),
         pubdate_timeout=current_app.config.get(
             str("NAVITIA_PUBDATE_CACHE_TIMEOUT"), 600),
     ).instance(contributor.navitia_coverage)
     self.contributor = contributor
     self.is_new_complete = is_new_complete
Exemple #5
0
 def __init__(self, contributor: Contributor, logger_name: str = __name__):
     self.navitia = navitia_wrapper.Navitia(
         url=current_app.config.get("NAVITIA_URL"),
         token=contributor.navitia_token,
         timeout=current_app.config.get("NAVITIA_TIMEOUT", 5),
         cache=kirin.redis_client,
         query_timeout=current_app.config.get("NAVITIA_QUERY_CACHE_TIMEOUT",
                                              600),
         pubdate_timeout=current_app.config.get(
             "NAVITIA_PUBDATE_CACHE_TIMEOUT", 600),
     ).instance(contributor.navitia_coverage)
     self.contributor = contributor
     self.log = logging.LoggerAdapter(
         logging.getLogger(logger_name),
         extra={"contributor": self.contributor.id})
Exemple #6
0
def gtfs_poller(self, config):
    func_name = 'gtfs_poller'
    logger = logging.LoggerAdapter(logging.getLogger(__name__), extra={'contributor': config['contributor']})
    logger.debug('polling of %s', config['feed_url'])

    contributor = config['contributor']
    lock_name = make_kirin_lock_name(func_name, contributor)
    with get_lock(logger, lock_name, app.config['REDIS_LOCK_TIMEOUT_POLLER']) as locked:
        if not locked:
            new_relic.ignore_transaction()
            return

        # We do a HEAD request at the very beginning of polling and we compare it with the previous one to check if
        # the gtfs-rt is changed.
        # If the HEAD request or Redis get/set fail, we just ignore this part and do the polling anyway
        if not _is_newer(config):
            new_relic.ignore_transaction()
            manage_db_no_new(connector='gtfs-rt', contributor=contributor)
            return

        try:
            response = requests.get(config['feed_url'], timeout=config.get('timeout', 1))
            response.raise_for_status()

        except Exception as e:
            manage_db_error(data='', connector='gtfs-rt', contributor=contributor,
                            status='KO', error='Http Error')
            logger.debug(str(e))
            return

        nav = navitia_wrapper.Navitia(url=config['navitia_url'],
                                      token=config['token'],
                                      timeout=5,
                                      cache=redis,
                                      query_timeout=app.config.get('NAVITIA_QUERY_CACHE_TIMEOUT', 600),
                                      pubdate_timeout=app.config.get('NAVITIA_PUBDATE_CACHE_TIMEOUT', 600))\
            .instance(config['coverage'])

        proto = gtfs_realtime_pb2.FeedMessage()
        try:
            proto.ParseFromString(response.content)
        except DecodeError:
            manage_db_error(proto, 'gtfs-rt', contributor=contributor, status='KO', error='Decode Error')
            logger.debug('invalid protobuf')
        else:
            model_maker.handle(proto, nav, contributor)
            logger.info('%s for %s is finished', func_name, contributor)
Exemple #7
0
def gtfs_poller(self, config):
    logger = logging.LoggerAdapter(
        logging.getLogger(__name__),
        extra={'contributor': config['contributor']})
    logger.debug('polling of %s', config['feed_url'])
    response = requests.get(config['feed_url'],
                            timeout=config.get('timeout', 1))
    response.raise_for_status()

    nav = navitia_wrapper.Navitia(url=config['navitia_url'], token=config['token'])\
                         .instance(config['coverage'])
    nav.timeout = 5

    proto = gtfs_realtime_pb2.FeedMessage()
    proto.ParseFromString(response.content)
    model_maker.handle(proto, nav, config['contributor'])
    logger.debug('gtfsrt polling finished')
Exemple #8
0
 def __init__(self):
     url = current_app.config['NAVITIA_URL']
     token = current_app.config.get('NAVITIA_GTFS_RT_TOKEN')
     timeout = current_app.config.get('NAVITIA_TIMEOUT', 5)
     instance = current_app.config['NAVITIA_GTFS_RT_INSTANCE']
     query_timeout = current_app.config.get('NAVITIA_QUERY_CACHE_TIMEOUT',
                                            600)
     pubdate_timeout = current_app.config.get(
         'NAVITIA_PUBDATE_CACHE_TIMEOUT', 600)
     self.navitia_wrapper = navitia_wrapper.Navitia(
         url=url,
         token=token,
         timeout=timeout,
         cache=redis,
         query_timeout=query_timeout,
         pubdate_timeout=pubdate_timeout).instance(instance)
     self.contributor = current_app.config['GTFS_RT_CONTRIBUTOR']
Exemple #9
0
def dumb_nav_wrapper():
    """return a dumb navitia wrapper (all the param are useless since the 'query' call has been mocked)"""
    return navitia_wrapper.Navitia(url='').instance('')