[7.x] Update API generator for async
This commit is contained in:
committed by
Seth Michael Larson
parent
8ffae94912
commit
bed5ffc740
+35
-7
@@ -15,6 +15,7 @@ from click.testing import CliRunner
|
||||
from pathlib import Path
|
||||
|
||||
from jinja2 import Environment, FileSystemLoader, TemplateNotFound
|
||||
import unasync
|
||||
|
||||
|
||||
http = urllib3.PoolManager()
|
||||
@@ -78,9 +79,8 @@ class Module:
|
||||
def parse_orig(self):
|
||||
self.orders = []
|
||||
self.header = "class C:"
|
||||
fname = CODE_ROOT / "elasticsearch" / "client" / f"{self.namespace}.py"
|
||||
if os.path.exists(fname):
|
||||
with open(fname) as f:
|
||||
if os.path.exists(self.filepath):
|
||||
with open(self.filepath) as f:
|
||||
content = f.read()
|
||||
header_lines = []
|
||||
for line in content.split("\n"):
|
||||
@@ -96,7 +96,7 @@ class Module:
|
||||
break
|
||||
self.header = "\n".join(header_lines)
|
||||
self.orders = re.findall(
|
||||
r'\n def ([a-z_]+)\(',
|
||||
r'\n (?:async )?def ([a-z_]+)\(',
|
||||
content,
|
||||
re.MULTILINE
|
||||
)
|
||||
@@ -112,12 +112,15 @@ class Module:
|
||||
|
||||
def dump(self):
|
||||
self.sort()
|
||||
fname = CODE_ROOT / "elasticsearch" / "client" / f"{self.namespace}.py"
|
||||
with open(fname, "w") as f:
|
||||
with open(self.filepath, "w") as f:
|
||||
f.write(self.header)
|
||||
for api in self._apis:
|
||||
f.write(api.to_python())
|
||||
blacken(fname)
|
||||
blacken(self.filepath)
|
||||
|
||||
@property
|
||||
def filepath(self):
|
||||
return CODE_ROOT / f"elasticsearch/_async/client/{self.namespace}.py"
|
||||
|
||||
|
||||
class API:
|
||||
@@ -305,6 +308,31 @@ def dump_modules(modules):
|
||||
for mod in modules.values():
|
||||
mod.dump()
|
||||
|
||||
# Unasync all the generated async code
|
||||
additional_replacements = {
|
||||
# We want to rewrite to 'Transport' instead of 'SyncTransport', etc
|
||||
"AsyncTransport": "Transport",
|
||||
"AsyncElasticsearch": "Elasticsearch",
|
||||
# We don't want to rewrite this class
|
||||
"AsyncSearchClient": "AsyncSearchClient",
|
||||
}
|
||||
rules = [
|
||||
unasync.Rule(
|
||||
fromdir="/elasticsearch/_async/client/",
|
||||
todir="/elasticsearch/client/",
|
||||
additional_replacements=additional_replacements
|
||||
),
|
||||
]
|
||||
|
||||
filepaths = []
|
||||
for root, _, filenames in os.walk(CODE_ROOT / "elasticsearch/_async"):
|
||||
for filename in filenames:
|
||||
if filename.endswith(".py") and filename != "utils.py":
|
||||
filepaths.append(os.path.join(root, filename))
|
||||
|
||||
unasync.unasync_files(filepaths, rules)
|
||||
blacken(CODE_ROOT / "elasticsearch")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
dump_modules(read_modules())
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
@query_params({{ api.query_params|map("tojson")|join(", ")}})
|
||||
def {{ api.name }}(self, {% include "func_params" %}):
|
||||
async def {{ api.name }}(self, {% include "func_params" %}):
|
||||
"""
|
||||
{% if api.description %}
|
||||
{{ api.description|replace("\n", " ")|wordwrap(wrapstring="\n ") }}
|
||||
@@ -24,6 +24,6 @@
|
||||
body = _bulk_body(self.transport.serializer, body)
|
||||
{% endif %}
|
||||
{% block request %}
|
||||
return self.transport.perform_request("{{ api.method }}", {% include "url" %}, params=params, headers=headers{% if api.body %}, body=body{% endif %})
|
||||
return await self.transport.perform_request("{{ api.method }}", {% include "url" %}, params=params, headers=headers{% if api.body %}, body=body{% endif %})
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
elif scroll_id:
|
||||
params["scroll_id"] = scroll_id
|
||||
|
||||
return self.transport.perform_request("{{ api.method }}", "/_search/scroll", params=params, headers=headers, body=body)
|
||||
return await self.transport.perform_request("{{ api.method }}", "/_search/scroll", params=params, headers=headers, body=body)
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -4,6 +4,6 @@
|
||||
doc_type = "_doc"
|
||||
|
||||
|
||||
return self.transport.perform_request("POST" if id in SKIP_IN_PATH else "PUT", {% include "url" %}, params=params, headers=headers, body=body)
|
||||
return await self.transport.perform_request("POST" if id in SKIP_IN_PATH else "PUT", {% include "url" %}, params=params, headers=headers, body=body)
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
elif scroll_id:
|
||||
params["scroll_id"] = scroll_id
|
||||
|
||||
return self.transport.perform_request("{{ api.method }}", "/_search/scroll", params=params, headers=headers, body=body)
|
||||
return await self.transport.perform_request("{{ api.method }}", "/_search/scroll", params=params, headers=headers, body=body)
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{% extends "base" %}
|
||||
{% block request %}
|
||||
return self.transport.perform_request("{{ api.method }}", "/_cluster/stats" if node_id in SKIP_IN_PATH else _make_path("_cluster", "stats", "nodes", node_id), params=params, headers=headers)
|
||||
return await self.transport.perform_request("{{ api.method }}", "/_cluster/stats" if node_id in SKIP_IN_PATH else _make_path("_cluster", "stats", "nodes", node_id), params=params, headers=headers)
|
||||
{% endblock%}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user