Пример #1
0
def test_delete_by_id(system_1):
    system_1_id = system_1.id

    result = systemqueries.delete_by_id(system_1_id)

    assert True is result
    assert None is systemqueries.get_by_id(system_1_id)
Пример #2
0
def test_create(db_session):
    new_system = systemqueries.create()
    new_system.id = "new_id"
    new_system.name = "name"
    new_system.status = models.System.SystemStatus.ACTIVE
    db_session.flush()

    assert new_system == systemqueries.get_by_id("new_id")
Пример #3
0
def test_set_auto_update_enabled(db_session, system_1, system_2, old_value, new_value):
    system_1.auto_update_enabled = old_value
    db_session.flush()

    system_exists = systemqueries.set_auto_update_enabled(system_1.id, new_value)

    assert system_exists is True
    assert systemqueries.get_by_id(system_1.id).auto_update_enabled is new_value
Пример #4
0
def list_all_in_system(system_id) -> typing.List[views.Feed]:
    """
    Get data on all feeds in a system.
    """
    system = systemqueries.get_by_id(system_id, only_return_active=True)
    if system is None:
        raise exceptions.IdNotFoundError(models.System, system_id=system_id)
    return list(
        map(views.Feed.from_model, feedqueries.list_all_in_system(system_id)))
Пример #5
0
def list_all_in_system(
    system_id, alerts_detail: views.AlertsDetail = None
) -> typing.List[views.Agency]:
    system = systemqueries.get_by_id(system_id, only_return_active=True)
    if system is None:
        raise exceptions.IdNotFoundError(models.System, system_id=system_id)
    agencies = genericqueries.list_in_system(models.Agency, system_id)
    response = list(map(views.Agency.from_model, agencies))
    helpers.add_alerts_to_views(
        response, agencies, alerts_detail or views.AlertsDetail.CAUSE_AND_EFFECT
    )
    return response
Пример #6
0
def _complete_delete_operation(system_id):
    feed_ids = set()
    with dbconnection.inline_unit_of_work():
        system = systemqueries.get_by_id(system_id)
        for feed in system.feeds:
            feed_ids.add(feed.id)

    for feed_id in feed_ids:
        _delete_feed(system_id, feed_id)

    with dbconnection.inline_unit_of_work():
        systemqueries.delete_by_id(system_id)
Пример #7
0
def list_all_in_system(system_id,
                       alerts_detail=None) -> typing.List[views.Stop]:
    system = systemqueries.get_by_id(system_id, only_return_active=True)
    if system is None:
        raise exceptions.IdNotFoundError(models.System, system_id=system_id)

    stops = stopqueries.list_all_in_system(system_id)
    response = list(map(views.Stop.from_model, stops))
    helpers.add_alerts_to_views(
        response,
        stops,
        alerts_detail or views.AlertsDetail.NONE,
    )
    return response
Пример #8
0
def list_all_transfers_in_system(
        system_id,
        from_stop_ids=None,
        to_stop_ids=None) -> typing.List[views.Transfer]:
    system = systemqueries.get_by_id(system_id, only_return_active=True)
    if system is None:
        raise exceptions.IdNotFoundError(models.System, system_id=system_id)
    return [
        views.Transfer.from_model(
            transfer,
            views.Stop.from_model(transfer.from_stop),
            views.Stop.from_model(transfer.to_stop),
        ) for transfer in stopqueries.list_all_transfers_in_system(
            system_id, from_stop_ids=from_stop_ids, to_stop_ids=to_stop_ids)
    ]
Пример #9
0
def list_all_in_system(
    system_id, alerts_detail: views.AlertsDetail = None
) -> typing.List[views.Route]:
    system = systemqueries.get_by_id(system_id, only_return_active=True)
    if system is None:
        raise exceptions.IdNotFoundError(models.System, system_id=system_id)

    response = []
    routes = list(routequeries.list_in_system(system_id))
    for route in routes:
        route_response = views.Route.from_model(route)
        response.append(route_response)
    helpers.add_alerts_to_views(
        response, routes, alerts_detail or views.AlertsDetail.CAUSE_AND_EFFECT,
    )
    return response
Пример #10
0
def delete_by_id(system_id, error_if_not_exists=True, sync=True):
    """
    Delete a transit system
    """
    with dbconnection.inline_unit_of_work():
        system = systemqueries.get_by_id(system_id)
        if system is not None:
            system.status = models.System.SystemStatus.DELETING
            if not sync:
                system.id = system.id + "_deleting_" + str(uuid.uuid4())
                system_id = system.id
        elif error_if_not_exists:
            raise exceptions.IdNotFoundError
        else:
            return
    client.refresh_tasks()

    sync_to_function = {
        True: _complete_delete_operation,
        False: _complete_delete_operation_async.delay,
    }
    sync_to_function[sync](system_id)
Пример #11
0
def get_by_id(system_id) -> views.SystemLarge:
    system = systemqueries.get_by_id(system_id)
    if system is None:
        raise exceptions.IdNotFoundError(models.System, system_id=system_id)
    response = views.SystemLarge.from_model(system)
    if system.status != system.SystemStatus.ACTIVE:
        return response
    for attr, view, relationship in (
        ("agencies", views.AgenciesInSystem, models.System.agencies),
        ("stops", views.StopsInSystem, models.System.stops),
        ("routes", views.RoutesInSystem, models.System.routes),
        ("feeds", views.FeedsInSystem, models.System.feeds),
        ("transfers", views.TransfersInSystem, models.System.transfers),
    ):
        setattr(
            response,
            attr,
            view.from_model(
                system,
                genericqueries.count_number_of_related_entities(relationship, system),
            ),
        )
    return response
Пример #12
0
def _create_system_update(system_id, config_str, extra_settings, config_source_url):
    system = systemqueries.get_by_id(system_id)
    if system is not None:
        invalid_statuses_for_update = {
            models.System.SystemStatus.SCHEDULED,
            models.System.SystemStatus.INSTALLING,
            models.System.SystemStatus.DELETING,
        }
        if system.status in invalid_statuses_for_update:
            raise exceptions.InstallError(
                "Cannot install or update system with status '{}'. "
                "If the system is stuck in this state, delete it first to reinstall".format(
                    system.status.name
                )
            )
        elif system.status == models.System.SystemStatus.INSTALL_FAILED:
            system.status = models.System.SystemStatus.SCHEDULED
    else:
        system = models.System(
            id=system_id,
            name="(Awaiting install for full name)",
            status=models.System.SystemStatus.SCHEDULED,
        )
        systemqueries.create(system)

    update = models.SystemUpdate(
        system=system,
        status=models.SystemUpdate.Status.SCHEDULED,
        config_template=config_str,
        config_parameters=json.dumps(extra_settings, indent=2),
        config_source_url=config_source_url,
        transiter_version=__metadata__.__version__,
    )
    dbconnection.get_session().add(update)
    dbconnection.get_session().flush()
    return update.pk
Пример #13
0
def test_get_by_id__not_active(installing_system):
    assert None is systemqueries.get_by_id(
        installing_system.id, only_return_active=True
    )
Пример #14
0
def test_get_by_id__unknown(system_1):
    assert None is systemqueries.get_by_id("unknown_id")
Пример #15
0
def test_get_by_id(system_1):
    assert system_1 == systemqueries.get_by_id(system_1.id)
Пример #16
0
def is_active(system_id):
    system = systemqueries.get_by_id(system_id)
    return system is not None and system.status != models.System.SystemStatus.ACTIVE