def test_remove_extension():
    exp = experiments.Experiment.copy()
    set_extension(exp, {"name": "myext", "somekey": "blah"})

    assert get_extension(exp, "myext") is not None
    remove_extension(exp, "myext")
    assert get_extension(exp, "myext") is None
def test_get_extension():
    exp = experiments.Experiment.copy()
    set_extension(exp, {"name": "myext", "somekey": "blah"})

    ext = get_extension(exp, "myext")
    assert ext is not None
    assert ext["somekey"] == "blah"
def test_merge_extension():
    exp = experiments.Experiment.copy()
    set_extension(exp, {"name": "myext", "somekey": "blah"})

    ext = get_extension(exp, "myext")
    assert ext is not None
    assert ext["somekey"] == "blah"

    merge_extension(exp, {
        "name": "myext",
        "somekey": "burp",
        "otherkey": "oneday"
    })

    ext = get_extension(exp, "myext")
    assert ext is not None
    assert ext["somekey"] == "burp"
    assert ext["otherkey"] == "oneday"
Beispiel #4
0
def get_context(experiment: Experiment, source: str, org: str,
                workspace: str, settings: Settings) -> Context:
    """
    Load the current Chaos Hub context from the given parameters, in the
    following order (higher has more precedence):

    * as passed to the command line
    * from the "chaoshub" extension block (if any) in the experiment
    * from the settings under the chaoshub vendor section in the settings

    We may parse the URL from the source some day but for now, this sounds
    a little flaky.

    Additionaly, load the hub_url and token from the extension plugin
    settings.
    """
    token = hub_url = None

    extension = get_extension(experiment, "chaoshub")
    if extension:
        if not org:
            org = extension.get("organization")

        if not workspace:
            workspace = extension.get("workspace")

    if settings:
        plugin = settings.get('vendor', {}).get('chaoshub', {})
        if not org:
            org = plugin.get('organization')

        if not workspace:
            workspace = plugin.get('workspace')

        hub_url = plugin.get('hub_url')
        token = plugin.get('token')

    context = Context(
        org=org,
        workspace=workspace,
        experiment=extension.get("experiment") if extension else None,
        hub_url=hub_url,
        token=token
    )

    return context
        def wrapped(*args, **kwargs):
            payload = kwargs.get("payload")
            if required and not payload:
                m = "Please, provide an extension block in " \
                    "the payload you sent."
                r = jsonify({"message": m})
                r.status_code = 400
                raise abort(r)

            if payload:
                extension = get_extension(payload, "chaoshub")
                if required and not extension:
                    m = "The Chaos Hub extension entry is missing " \
                        "from the payload. You must provide one for " \
                        "this request."
                    r = jsonify({"message": m})
                    r.status_code = 400
                    raise abort(r)

                kwargs["extension"] = extension
            return f(*args, **kwargs)
def test_get_extension_returns_nothing_when_missing():
    ext = experiments.Experiment.copy()
    set_extension(ext, {"name": "myotherext", "somekey": "blah"})
    assert get_extension(ext, "myext") is None
def test_get_extension_returns_nothing_when_not_extensions_block():
    assert get_extension(experiments.Experiment, "myext") is None