Example #1
0
def get_not_reviewed(url, username, password, alembic_config, ci_project, case=None):
    """Get not reviewed migrations.

    :args: command line arguments namespace object

    :raises:
        * Exception - PDT replied with an error
        * SystemExit(<number>) - found <number> of not reviewed migrations
    """
    config = Config(alembic_config)
    migrations = frozenset(migration['attributes']['case_id'] for migration in get_migrations_data(config))
    params = dict(reviewed=True, ci_project=ci_project)
    if case:
        params['case'] = case
    response = requests.get(
        '{0}/api/migrations/'.format(url),
        params=params,
        auth=(username, password),
        headers={'content-type': 'application/json'}
    )
    try:
        response.raise_for_status()
        print('Got migration data')
    except Exception:
        pprint.pprint(response.json())
        raise
    response_migrations = frozenset(migration['case']['id'] for migration in response.json())
    diff = migrations - response_migrations
    if diff:
        print('Found not reviewed migrations for these cases: {0}'.format(sorted(diff)))
        sys.exit(len(diff))
    else:
        print('No not reviewed migrations found so far')
Example #2
0
def push_data(url, username, password, alembic_config, case=None, show=False):
    """Push migration data.

    :args: command line arguments namespace object

    :raises: Exception if PDT replied with an error
    """
    config = Config(alembic_config)
    for migration in get_migrations_data(config):
        if case == migration['attributes']['case_id'] or not case:
            print(
                'Got migration data for migration: {migration[revision]}, case: {migration[attributes][case_id]}'
                .format(migration=migration))
            call_url = '{0}/api/migrations/'.format(url)
            data = {
                "uid": migration['revision'],
                "parent": migration['down_revision'],
                "case": {
                    "id": str(migration['attributes']['case_id'])
                },
                "pre_deploy_steps": list(get_phase_steps(migration, 'before-deploy')),
                "post_deploy_steps": list(get_phase_steps(migration, 'after-deploy')),
                "final_steps": list(get_phase_steps(migration, 'final')),
            }
            if show:
                print('URL: {call_url}, data: \n{data}'.format(call_url=call_url, data=pprint.pformat(data)))
            else:
                response = requests.post(
                    call_url,
                    auth=(username, password),
                    data=json.dumps(data, sort_keys=True), headers={'content-type': 'application/json'})
                try:
                    response.raise_for_status()
                    print(
                        'Pushed migration data for migration: {migration[revision]}, '
                        'case: {migration[attributes][case_id]}'
                        .format(
                            migration=migration))
                except Exception:
                    pprint.pprint(response.json())
                    raise
            if case:
                break
Example #3
0
    for index, step in enumerate(migration['phases'].get(phase, dict(steps=[]))['steps']):
        kwargs = {}
        if 'path' in step:
            kwargs['path'] = step['path']
        yield dict(position=index, code=step['script'], type=step['type'], **kwargs)


def push_data(url, username, password, alembic_config, case=None, show=False):
    """Push migration data.

    :args: command line arguments namespace object

    :raises: Exception if PDT replied with an error
    """
    config = Config(alembic_config)
    for migration in get_migrations_data(config):
        if case == migration['attributes']['case_id'] or not case:
            print(
                'Got migration data for migration: {migration[revision]}, case: {migration[attributes][case_id]}'
                .format(migration=migration))
            call_url = '{0}/api/migrations/'.format(url)
            data = {
                "uid": migration['revision'],
                "parent": migration['down_revision'],
                "case": {
                    "id": str(migration['attributes']['case_id'])
                },
                "pre_deploy_steps": list(get_phase_steps(migration, 'before-deploy')),
                "post_deploy_steps": list(get_phase_steps(migration, 'after-deploy')),
                "final_steps": list(get_phase_steps(migration, 'final')),
            }
Example #4
0
            kwargs['path'] = step['path']
        yield dict(position=index,
                   code=step['script'],
                   type=step['type'],
                   **kwargs)


def push_data(url, username, password, alembic_config, case=None, show=False):
    """Push migration data.

    :args: command line arguments namespace object

    :raises: Exception if PDT replied with an error
    """
    config = Config(alembic_config)
    for migration in get_migrations_data(config):
        if case == migration['attributes']['case_id'] or not case:
            print(
                'Got migration data for migration: {migration[revision]}, case: {migration[attributes][case_id]}'
                .format(migration=migration))
            call_url = '{0}/api/migrations/'.format(url)
            data = {
                "uid":
                migration['revision'],
                "parent":
                migration['down_revision'],
                "case": {
                    "id": str(migration['attributes']['case_id'])
                },
                "pre_deploy_steps":
                list(get_phase_steps(migration, 'before-deploy')),