コード例 #1
0
ファイル: blueprint.py プロジェクト: orest-d/liquer
def register_command1():
    """Remote command registration service.
    This has to be enabled by liquer.commands.enable_remote_registration()

    WARNING: Remote command registration allows to deploy arbitrary python code on LiQuer server,
    therefore it is a HUGE SECURITY RISK and it only should be used if other security measures are taken
    (e.g. on localhost or intranet where only trusted users have access).
    This is on by default on Jupyter server extension.
    """
    data = request.get_data()
    return jsonify(command_registry().register_remote_serialized(data))
コード例 #2
0
ファイル: test_dependencies.py プロジェクト: orest-d/liquer
    def test_command(self):
        reset_command_registry()

        @command
        def test_callable(state, a: int, b=123):  # has state as a first argument
            return a + b

        ns, _command, command_metadata = command_registry().resolve_command(State(),"test_callable")
        m = Dependencies()
        m.add_command_dependency(ns, command_metadata)
        assert "ns-root/test_callable" in m.as_dict()["commands"]
コード例 #3
0
def help(state, command_name, ns="root"):
    """Returns a description of the command"""
    crd = command_registry().as_dict()
    make_link = ("py" in crd) and ("pygments" in crd)
    try:
        r = crd[ns]
        try:
            c = r[command_name]
            html = f"<html><head><title>{command_name}</title></head>"
            html = "<body\n>"
            html = f"<h1>{command_name} <em>({ns})</em></h1>\n"
            html += f"<pre>{c['doc']}</pre>\n"
            html += "<h3>Arguments</h3>\n"
            html += "  <ul>\n"
            for a in c["arguments"]:
                html += f"    <li><b>{a['name']}</b> - type: {a['type']}</li>\n"
            html += "  </ul>"
            html += "<h3>Attributes</h3>\n"
            html += "  <ul>\n"
            for key, value in sorted(c["attributes"].items()):
                if key == "example_link":
                    q = value
                    url = (state.vars.get("server", "http://localhost") +
                           state.vars.get("api_path", "/q/") + q)
                    html += f'    <li><b>{key}</b>:<a href="{url}">{value}</a></li>\n'
                else:
                    html += f"    <li><b>{key}</b>:{value}</li>\n"
            html += "  </ul>"
            html += f"<h3>Python module</h3>\n"
            module = c["module"]
            if make_link:
                modfile = module.replace(".", "_")
                html += evaluate_template(
                    f'<a href="$ns-py-pygments/module_source-{module}/highlight/link-url-html$/{modfile}.html">{module}</a>\n'
                )
            else:
                html += module

            html += "</body>"
            html += "</html>"
            return state.with_data(html).with_filename("help.html")
        except KeyError:
            html = f"<h1>Command <em>{command_name}</em> not registered in namespace <em>{ns}</em></h1>"
            candidates = ", ".join(key for key, value in crd.items()
                                   if command_name in value)
            if len(candidates):
                html += f"Command can be found in: {candidates}"
            else:
                html += "There is no such command in available namespaces"
            return state.with_data(html).with_filename("help.html")
    except KeyError:
        return state.with_data(f"<h1>Unknown namespace <em>{ns}</em></h1>"
                               ).with_filename("help.html")
コード例 #4
0
def flat_commands_nodoc(*pairs):
    """Returns a list of commands in json format"""
    filters = [(pairs[i - 1], pairs[i]) for i in range(1, len(pairs), 2)]
    d = []
    for rl in command_registry().as_dict().values():
        for r in rl.values():
            if len(filters) == 0 or all(r["attributes"].get(key) == value
                                        for key, value in filters):
                c = {key: r.get(key) for key in ["name", "label", "module"]}
                for key, value in r["attributes"].items():
                    if key not in c and key != "context_menu":
                        c[key] = value
                d.append(c)
    return d
コード例 #5
0
ファイル: query.py プロジェクト: andreamlpython/liquer
def evaluate_ql_on(ql, state=None, cache=None):
    """This is equivalent to evaluate_query_on, but accepts decoded query
    (list of lists of strings)."""
    if cache is None:
        cache = get_cache()
    if state is None:
        state = State()
    elif not isinstance(state, State):
        state = State().with_data(state)

    cr = command_registry()
    for i, qcommand in enumerate(ql):
        if i == len(ql) - 1:
            if len(qcommand) == 1 and '.' in qcommand[0]:
                state.with_filename(qcommand[0])
                break
        state = cr.evaluate_command(state, qcommand)
        if state.caching and not state.is_error and not state.is_volatile():
            cache.store(state)

    return state
コード例 #6
0
ファイル: blueprint.py プロジェクト: andreamlpython/liquer
def commands():
    """Returns a list of commands in json format"""
    return jsonify(command_registry().as_dict())
コード例 #7
0
 def post(self, param):
     self.write(
         json.dumps(command_registry().register_remote_serialized(
             self.request.body)))
コード例 #8
0
 def get(self):
     """Returns a list of commands in json format"""
     self.write(json.dumps(command_registry().as_dict()))
コード例 #9
0
 def get(self, param):
     self.write(
         json.dumps(command_registry().register_remote_serialized(
             param.encode("ascii"))))
コード例 #10
0
 def get(self):
     mimetype = "application/json"
     header = "Content-Type"
     body = mimetype
     self.set_header(header, body)
     self.write(json.dumps(command_registry().as_dict()))
コード例 #11
0
 def command_registry(self):
     return command_registry()