Beispiel #1
0
def test_upload_multiple(db_session, client):
    john = users.john()
    db_session.add(john)
    db_session.commit()

    data = MultiDict()
    data.add("pilotName", "JD   ")
    data.add("files", (igcs.simple_path,))
    data.add("files", (igcs.hornet_path,))

    res = client.post("/flights/upload", headers=auth_for(john), data=data)
    assert res.status_code == 200
    assert res.json == S(
        {
            u"club_members": [],
            u"aircraft_models": [],
            u"results": ExactSequence(
                [
                    {
                        u"status": 0,
                        u"cacheKey": text_type,
                        u"flight": Partial(
                            {
                                u"club": None,
                                u"copilot": None,
                                u"copilotName": None,
                                u"distance": 7872,
                                u"igcFile": dict,
                                u"pilot": None,
                                u"pilotName": "JD",
                            }
                        ),
                        u"name": Match(r".*simple\.igc"),
                        u"trace": dict,
                        u"airspaces": [],
                    },
                    {
                        u"status": 0,
                        u"cacheKey": text_type,
                        u"flight": Partial(
                            {
                                u"club": None,
                                u"copilot": None,
                                u"copilotName": None,
                                u"distance": 171246,
                                u"igcFile": dict,
                                u"pilot": None,
                                u"pilotName": "JD",
                            }
                        ),
                        u"name": Match(r".*2018-04-14-fla-6ng-01\.igc"),
                        u"trace": dict,
                        u"airspaces": [],
                    },
                ]
            ),
        }
    )
Beispiel #2
0
def test_upload_with_weglide(db_session, client):
    john = users.john()
    db_session.add(john)
    db_session.commit()

    data = dict(
        pilotId=john.id,
        weglideUserId="123",
        weglideBirthday="2020-01-07",
        files=(igcs.simple_path,),
    )

    with patch.object(tasks.upload_to_weglide, "delay", return_value=None) as mock:
        res = client.post("/flights/upload", headers=auth_for(john), data=data)

    mock.assert_called_once()
    assert len(mock.call_args.args) == 3
    assert mock.call_args.args[1] == 123
    assert mock.call_args.args[2] == "2020-01-07"

    assert res.status_code == 200
    assert res.json == S(
        {
            u"club_members": list,
            u"aircraft_models": list,
            u"results": ExactSequence(
                [
                    {
                        u"status": 0,
                        u"cacheKey": IsTrue(),
                        u"flight": Partial(
                            {
                                u"club": None,
                                u"copilot": None,
                                u"copilotName": None,
                                u"distance": 7872,
                                u"igcFile": Partial(
                                    {
                                        u"weglideStatus": 1,
                                        u"weglideData": None,
                                    }
                                ),
                                u"pilotName": None,
                                u"pilot": {
                                    u"id": john.id,
                                    u"name": john.name,
                                },
                            }
                        ),
                        u"name": Match(r".*simple.igc"),
                        u"trace": dict,
                        u"airspaces": [],
                    }
                ]
            ),
        }
    )
Beispiel #3
0
    # directory and using forward slashes even on Windows
    Required('script'):
    text_type,

    # Additional paths to look for mozharness configs in. These should be
    # relative to the base of the source checkout
    Optional('config-paths'): [text_type],

    # the config files required for the task, relative to
    # testing/mozharness/configs or one of the paths specified in
    # `config-paths` and using forward slashes even on Windows
    Required('config'): [text_type],

    # any additional actions to pass to the mozharness command
    Optional('actions'): [
        Match('^[a-z0-9-]+$',
              "actions must be `-` seperated alphanumeric strings")
    ],

    # any additional options (without leading --) to be passed to mozharness
    Optional('options'): [
        Match(
            '^[a-z0-9-]+(=[^ ]+)?$',
            "options must be `-` seperated alphanumeric strings (with optional argument)"
        )
    ],

    # --custom-build-variant-cfg value
    Optional('custom-build-variant-cfg'):
    text_type,

    # Extra configuration options to pass to mozharness.
Beispiel #4
0
from core.users.models import User
from core.users.permissions import UserPermissions
from core.utils import require_permission, validate_data
from core.validators import PASSWORD_REGEX, PermissionsDict, check_permissions

from . import bp

app = flask.current_app

MODERATE_USER_SCHEMA = Schema({
    'email':
    Email(),
    'password':
    Match(
        PASSWORD_REGEX,
        msg=
        ('Password must be between 12 and 512 characters and contain at least 1 letter, '
         '1 number, and 1 special character'),
    ),
    'uploaded':
    All(int, Range(min=0, max=9223372036854775808)),
    'downloaded':
    All(int, Range(min=0, max=9223372036854775808)),
    'invites':
    All(int, Range(min=0, max=2147483648)),
    'permissions':
    PermissionsDict(restrict=UserPermissions.MODERATE_ADVANCED),
})


@bp.route('/users/<int:user_id>', methods=['PUT'])
@require_permission(UserPermissions.MODERATE)
#    $ LIVE_TESTS='alameda,san_francisco' python -m pytest -v .
#
LIVE_TESTS = os.getenv('LIVE_TESTS', '').lower().strip()
TEST_COUNTIES: List[str] = []
if LIVE_TESTS in ('1', 't', 'true', '*', 'all'):
    TEST_COUNTIES = list(scrapers.keys())
elif LIVE_TESTS:
    TEST_COUNTIES = [
        county for county in (county.strip()
                              for county in LIVE_TESTS.split(',')) if county
    ]

# A validator for an ISO 8601 datetime. This is really similar to
# voluptuous.validators.Datetime, but it accepts time zone offsets (e.g.
# `+0300`) instead of just `Z` (the short-form version of `+0000`).
DatetimeIso = Match(
    r'^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(.\d+)?(Z|[+\-]\d\d:?\d\d)$')


@pytest.mark.parametrize('county', TEST_COUNTIES)
def test_scraper_output_format_is_valid(county: str) -> None:
    if county not in scrapers:
        pytest.fail(f'Unknown county: "{county}"')
    try:
        result = scrapers[county].get_county()
    except Exception as error:
        message = (f'Cannot validate "{county}" format because it failed to '
                   f'scrape: {error}')
        warnings.warn(message)
        pytest.skip(message)
        return
Beispiel #6
0
def test_upload_zips(db_session, client):
    john = users.john()
    db_session.add(john)
    db_session.commit()

    data = dict(files=(igcs.zip_path, ))

    res = client.post("/flights/upload", headers=auth_for(john), data=data)
    assert res.status_code == 200
    assert res.json == S({
        u"club_members":
        list,
        u"aircraft_models":
        list,
        u"results":
        ExactSequence([
            {
                u"status": 0,
                u"cacheKey": text_type,
                u"flight": {
                    u"pilotName": None,
                    u"takeoffAirport": None,
                    u"registration": u"D-9041",
                    u"speed": 16.25958982149639,
                    u"id": int,
                    u"privacyLevel": 2,
                    u"takeoffTime": u"2018-04-14T10:13:55+00:00",
                    u"score": 191.94581098298332,
                    u"scoreEndTime": u"2018-04-14T13:19:19+00:00",
                    u"copilot": None,
                    u"timeCreated": Datetime("%Y-%m-%dT%H:%M:%S.%f+00:00"),
                    u"scoreStartTime": u"2018-04-14T10:16:51+00:00",
                    u"club": None,
                    u"flightDate": u"2018-04-14T10:13:55",
                    u"landingTime": u"2018-04-14T13:19:19+00:00",
                    u"rawScore": 191.94581098298332,
                    u"copilotName": None,
                    u"pilot": None,
                    u"distance": 171246,
                    u"igcFile": {
                        u"date": u"2018-04-14",
                        u"model": u"Duo Discus (PAS)",
                        u"registration": u"D-9041",
                        u"competitionId": u"TH",
                        u"filename": Match(r"2018-04-14-fla-6ng-01.*\.igc"),
                    },
                    u"landingAirport": None,
                    u"triangleDistance": 68997,
                    u"model": None,
                    u"competitionId": u"TH",
                },
                u"name": u"foo/2018-04-14-fla-6ng-01.igc",
                u"trace": {
                    u"barogram_h": text_type,
                    u"igc_end_time": u"2018-04-14T13:20:31+00:00",
                    u"enl": text_type,
                    u"elevations_h": text_type,
                    u"igc_start_time": u"2018-04-14T10:12:31+00:00",
                    u"barogram_t": text_type,
                },
                u"airspaces": [],
            },
            {
                u"status": 2,
                u"cacheKey": None,
                u"flight": None,
                u"name": u"__MACOSX/foo/._2018-04-14-fla-6ng-01.igc",
                u"trace": None,
                u"airspaces": None,
            },
            {
                u"status": 0,
                u"cacheKey": text_type,
                u"flight": {
                    u"pilotName": None,
                    u"takeoffAirport": None,
                    u"registration": u"F-CAEN",
                    u"speed": 21.54423947862587,
                    u"id": int,
                    u"privacyLevel": 2,
                    u"takeoffTime": u"2017-09-02T10:43:02+00:00",
                    u"score": 196.1458728865586,
                    u"scoreEndTime": u"2017-09-02T13:18:11+00:00",
                    u"copilot": None,
                    u"timeCreated": Datetime("%Y-%m-%dT%H:%M:%S.%f+00:00"),
                    u"scoreStartTime": u"2017-09-02T10:45:48+00:00",
                    u"club": None,
                    u"flightDate": u"2017-09-02T10:43:02",
                    u"landingTime": u"2017-09-02T13:18:11+00:00",
                    u"rawScore": 196.1458728865586,
                    u"copilotName": None,
                    u"pilot": None,
                    u"distance": 195040,
                    u"igcFile": {
                        u"date": u"2017-09-02",
                        u"model": None,
                        u"registration": u"F-CAEN",
                        u"competitionId": u"5L",
                        u"filename": Match(r"792xaaa1.*\.igc"),
                    },
                    u"landingAirport": None,
                    u"triangleDistance": 3685,
                    u"model": None,
                    u"competitionId": u"5L",
                },
                u"name": u"792xaaa1.igc",
                u"trace": {
                    u"barogram_h": text_type,
                    u"igc_end_time": u"2017-09-02T13:18:46+00:00",
                    u"enl": text_type,
                    u"elevations_h": text_type,
                    u"igc_start_time": u"2017-09-02T10:38:17+00:00",
                    u"barogram_t": text_type,
                },
                u"airspaces": [],
            },
            {
                u"status": 2,
                u"cacheKey": None,
                u"flight": None,
                u"name": u"__MACOSX/._792xaaa1.igc",
                u"trace": None,
                u"airspaces": None,
            },
        ]),
    })
Beispiel #7
0
def test_upload_multiple(db_session, client):
    john = users.john()
    db_session.add(john)
    db_session.commit()

    data = MultiDict()
    data.add("files", (igcs.simple_path, ))
    data.add("files", (igcs.hornet_path, ))

    res = client.post("/flights/upload", headers=auth_for(john), data=data)
    assert res.status_code == 200
    assert res.json == S({
        u"club_members": [],
        u"aircraft_models": [],
        u"results":
        ExactSequence([
            {
                u"status": 0,
                u"cacheKey": text_type,
                u"flight": {
                    u"pilotName": None,
                    u"takeoffAirport": None,
                    u"registration": u"LY-KDR",
                    u"speed": 30.63035019455253,
                    u"id": int,
                    u"privacyLevel": 2,
                    u"takeoffTime": u"2011-06-18T09:11:23+00:00",
                    u"score": 9.073321994774085,
                    u"scoreEndTime": u"2011-06-18T09:15:40+00:00",
                    u"copilot": None,
                    u"timeCreated": Datetime("%Y-%m-%dT%H:%M:%S.%f+00:00"),
                    u"scoreStartTime": u"2011-06-18T09:11:23+00:00",
                    u"club": None,
                    u"flightDate": u"2011-06-18T09:11:23",
                    u"landingTime": u"2011-06-18T09:15:40+00:00",
                    u"rawScore": 9.073321994774085,
                    u"copilotName": None,
                    u"pilot": None,
                    u"distance": 7872,
                    u"igcFile": {
                        u"date": u"2011-06-18",
                        u"model": u"ASK13",
                        u"registration": u"LY-KDR",
                        u"competitionId": None,
                        u"filename": Match(r"simple.*\.igc"),
                    },
                    u"landingAirport": None,
                    u"triangleDistance": 4003,
                    u"model": None,
                    u"competitionId": None,
                },
                u"name": Match(r".*simple\.igc"),
                u"trace": {
                    u"barogram_h": text_type,
                    u"igc_end_time": u"2011-06-18T09:15:40+00:00",
                    u"enl": text_type,
                    u"elevations_h": text_type,
                    u"igc_start_time": u"2011-06-18T09:07:49+00:00",
                    u"barogram_t": text_type,
                },
                u"airspaces": [],
            },
            {
                u"status": 0,
                u"cacheKey": text_type,
                u"flight": {
                    u"pilotName": None,
                    u"takeoffAirport": None,
                    u"registration": u"D-9041",
                    u"speed": 16.25958982149639,
                    u"id": int,
                    u"privacyLevel": 2,
                    u"takeoffTime": u"2018-04-14T10:13:55+00:00",
                    u"score": 191.94581098298332,
                    u"scoreEndTime": u"2018-04-14T13:19:19+00:00",
                    u"copilot": None,
                    u"timeCreated": Datetime("%Y-%m-%dT%H:%M:%S.%f+00:00"),
                    u"scoreStartTime": u"2018-04-14T10:16:51+00:00",
                    u"club": None,
                    u"flightDate": u"2018-04-14T10:13:55",
                    u"landingTime": u"2018-04-14T13:19:19+00:00",
                    u"rawScore": 191.94581098298332,
                    u"copilotName": None,
                    u"pilot": None,
                    u"distance": 171246,
                    u"igcFile": {
                        u"date": u"2018-04-14",
                        u"model": u"Duo Discus (PAS)",
                        u"registration": u"D-9041",
                        u"competitionId": u"TH",
                        u"filename": Match(r"2018-04-14-fla-6ng-01.*\.igc"),
                    },
                    u"landingAirport": None,
                    u"triangleDistance": 68997,
                    u"model": None,
                    u"competitionId": u"TH",
                },
                u"name": Match(r".*2018-04-14-fla-6ng-01\.igc"),
                u"trace": {
                    u"barogram_h": text_type,
                    u"igc_end_time": u"2018-04-14T13:20:31+00:00",
                    u"enl": text_type,
                    u"elevations_h": text_type,
                    u"igc_start_time": u"2018-04-14T10:12:31+00:00",
                    u"barogram_t": text_type,
                },
                u"airspaces": [],
            },
        ]),
    })
Beispiel #8
0
def test_upload(db_session, client):
    john = users.john()
    db_session.add(john)
    db_session.commit()

    data = dict(files=(igcs.simple_path, ))

    res = client.post("/flights/upload", headers=auth_for(john), data=data)
    assert res.status_code == 200
    assert res.json == S({
        u"club_members":
        list,
        u"aircraft_models":
        list,
        u"results":
        ExactSequence([{
            u"status": 0,
            u"cacheKey": IsTrue(),
            u"flight": {
                u"pilotName": None,
                u"takeoffAirport": None,
                u"registration": u"LY-KDR",
                u"speed": 30.63035019455253,
                u"id": int,
                u"privacyLevel": 2,
                u"takeoffTime": u"2011-06-18T09:11:23+00:00",
                u"score": 9.073321994774085,
                u"scoreEndTime": u"2011-06-18T09:15:40+00:00",
                u"copilot": None,
                u"timeCreated": Datetime("%Y-%m-%dT%H:%M:%S.%f+00:00"),
                u"scoreStartTime": u"2011-06-18T09:11:23+00:00",
                u"club": None,
                u"flightDate": u"2011-06-18T09:11:23",
                u"landingTime": u"2011-06-18T09:15:40+00:00",
                u"rawScore": 9.073321994774085,
                u"copilotName": None,
                u"pilot": None,
                u"distance": 7872,
                u"igcFile": {
                    u"date": u"2011-06-18",
                    u"model": u"ASK13",
                    u"registration": u"LY-KDR",
                    u"competitionId": None,
                    u"filename": Match(r"simple(_\d+)?.igc"),
                },
                u"landingAirport": None,
                u"triangleDistance": 4003,
                u"model": None,
                u"competitionId": None,
            },
            u"name": Match(r".*simple.igc"),
            u"trace": {
                u"barogram_h":
                u"yG?K@?????????????????????????????????????D?????EEEEIEKOIMSMIKOUWKOOOGUIEg@c@SUEKIKEEKI[]_@a@WSGYQk@",
                u"igc_end_time":
                u"2011-06-18T09:15:40+00:00",
                u"enl":
                u"??????????????????????????????????????????????????????????????????????????????????????????????",
                u"elevations_h":
                u"n}@?????????????????????????????????????????????????????????????????????????????????????????????",
                u"igc_start_time":
                u"2011-06-18T09:07:49+00:00",
                u"barogram_t":
                u"ie_AIIIIIIIIIIIIIIKIIIIKIKIIIIIIIIIIIIIIIKIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIMIIIIIIIIIIIIIIIIIIIIII",
            },
            u"airspaces": ExactSequence([]),
        }]),
    })