-
Notifications
You must be signed in to change notification settings - Fork 951
Expand file tree
/
Copy pathsqlcommenter_utils.py
More file actions
60 lines (50 loc) · 1.55 KB
/
sqlcommenter_utils.py
File metadata and controls
60 lines (50 loc) · 1.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0
from opentelemetry import context
from opentelemetry.instrumentation.utils import _url_quote
def _add_sql_comment(sql, comment_position="end", **meta) -> str:
"""
Appends comments to the sql statement and returns it
"""
meta.update(**_add_framework_tags())
comment = _generate_sql_comment(**meta)
sql = sql.rstrip()
if sql.endswith(";"):
sql = sql[:-1]
end = ";"
else:
end = ""
if comment_position == "start":
sql = comment + " " + sql + end
else:
sql = sql + comment + end
return sql
def _generate_sql_comment(**meta) -> str:
"""
Return a SQL comment with comma delimited key=value pairs created from
**meta kwargs.
"""
key_value_delimiter = ","
if not meta: # No entries added.
return ""
# Sort the keywords to ensure that caching works and that testing is
# deterministic. It eases visual inspection as well.
return (
" /*"
+ key_value_delimiter.join(
f"{_url_quote(key)}={_url_quote(value)!r}"
for key, value in sorted(meta.items())
if value is not None
)
+ "*/"
)
def _add_framework_tags() -> dict:
"""
Returns orm related tags if any set by the context
"""
sqlcommenter_framework_values = (
context.get_value("SQLCOMMENTER_ORM_TAGS_AND_VALUES")
if context.get_value("SQLCOMMENTER_ORM_TAGS_AND_VALUES")
else {}
)
return sqlcommenter_framework_values