symbex 0.3__py3-none-any.whl → 0.3.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
symbex/lib.py CHANGED
@@ -1,5 +1,5 @@
1
1
  import fnmatch
2
- from ast import literal_eval, parse, AST, FunctionDef, ClassDef
2
+ from ast import literal_eval, parse, AST, AsyncFunctionDef, FunctionDef, ClassDef
3
3
  from itertools import zip_longest
4
4
  import textwrap
5
5
  from typing import Iterable, List, Optional, Tuple
@@ -13,7 +13,7 @@ def find_symbol_nodes(
13
13
  matches = []
14
14
  module = parse(code)
15
15
  for node in module.body:
16
- if not isinstance(node, (ClassDef, FunctionDef)):
16
+ if not isinstance(node, (ClassDef, FunctionDef, AsyncFunctionDef)):
17
17
  continue
18
18
  name = getattr(node, "name", None)
19
19
  if match(name, symbols):
@@ -21,7 +21,7 @@ def find_symbol_nodes(
21
21
  # If it's a class search its methods too
22
22
  if isinstance(node, ClassDef):
23
23
  for child in node.body:
24
- if isinstance(child, FunctionDef):
24
+ if isinstance(child, (FunctionDef, AsyncFunctionDef)):
25
25
  qualified_name = f"{name}.{child.name}"
26
26
  if match(qualified_name, symbols):
27
27
  matches.append((child, name))
@@ -37,7 +37,7 @@ def code_for_node(
37
37
  start = None
38
38
  end = None
39
39
  if signatures:
40
- if isinstance(node, FunctionDef):
40
+ if isinstance(node, (FunctionDef, AsyncFunctionDef)):
41
41
  definition, lineno = function_definition(node), node.lineno
42
42
  if class_name:
43
43
  definition = " " + definition
@@ -109,7 +109,14 @@ def function_definition(function_node: AST):
109
109
  # if defaults has 2 and args has 3 then those
110
110
  # defaults correspond to the last two args
111
111
  defaults = [None] * (len(all_args) - len(function_node.args.defaults))
112
- defaults.extend(literal_eval(default) for default in function_node.args.defaults)
112
+ for default in function_node.args.defaults:
113
+ try:
114
+ value = literal_eval(default)
115
+ if isinstance(value, str):
116
+ value = f'"{value}"'
117
+ except ValueError:
118
+ value = getattr(default, "id", "...")
119
+ defaults.append(value)
113
120
 
114
121
  arguments = []
115
122
 
@@ -144,7 +151,11 @@ def function_definition(function_node: AST):
144
151
  # None shows as returns.value is None
145
152
  return_annotation = " -> None"
146
153
 
147
- return f"def {function_name}({arguments_str}){return_annotation}"
154
+ def_ = "def "
155
+ if isinstance(function_node, AsyncFunctionDef):
156
+ def_ = "async def "
157
+
158
+ return f"{def_}{function_name}({arguments_str}){return_annotation}"
148
159
 
149
160
 
150
161
  def class_definition(class_def):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: symbex
3
- Version: 0.3
3
+ Version: 0.3.2
4
4
  Summary: Find the Python code for specified symbols
5
5
  Home-page: https://github.com/simonw/symbex
6
6
  Author: Simon Willison
@@ -136,7 +136,7 @@ cog.out(
136
136
  # File: symbex/cli.py Line: 37
137
137
  def cli(symbols, files, directories, signatures, silent)
138
138
 
139
- # File: symbex/lib.py Line: 150
139
+ # File: symbex/lib.py Line: 161
140
140
  def class_definition(class_def)
141
141
 
142
142
  # File: symbex/lib.py Line: 32
@@ -0,0 +1,10 @@
1
+ symbex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ symbex/__main__.py,sha256=8hDtWlaFZK24KhfNq_ZKgtXqYHsDQDetukOCMlsbW0Q,59
3
+ symbex/cli.py,sha256=tWzT49q-fPN34HQH2sEFHBV3MXFKy9J5eh2EzOo5_CA,2857
4
+ symbex/lib.py,sha256=_IwiAfr9rCAe4ptdNt6o6MMibLHnwBmqpmgYRdRmEa4,6499
5
+ symbex-0.3.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
6
+ symbex-0.3.2.dist-info/METADATA,sha256=xlQ1koJSuZ6luJeC1WtNrU-D5g-dz82Br1NPYZ3yUXc,5695
7
+ symbex-0.3.2.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
8
+ symbex-0.3.2.dist-info/entry_points.txt,sha256=YgMSEfEGqNMHM9RysFObH8lkQKVZKyymKLnXbVue_Uk,42
9
+ symbex-0.3.2.dist-info/top_level.txt,sha256=qwle8HjAaYgpdMIHlJcTcN4gaG4wmDqUvkt54beTBTs,7
10
+ symbex-0.3.2.dist-info/RECORD,,
@@ -1,10 +0,0 @@
1
- symbex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- symbex/__main__.py,sha256=8hDtWlaFZK24KhfNq_ZKgtXqYHsDQDetukOCMlsbW0Q,59
3
- symbex/cli.py,sha256=tWzT49q-fPN34HQH2sEFHBV3MXFKy9J5eh2EzOo5_CA,2857
4
- symbex/lib.py,sha256=q8WhjbPLiXuGnbD3scwCvJrqVvs-RHAMbBEXIYyFqeI,6121
5
- symbex-0.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
6
- symbex-0.3.dist-info/METADATA,sha256=Yn6vp7j1nWfTn_GYWXmeWhD7NFXHw2OxI3YnpMRVvew,5693
7
- symbex-0.3.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
8
- symbex-0.3.dist-info/entry_points.txt,sha256=YgMSEfEGqNMHM9RysFObH8lkQKVZKyymKLnXbVue_Uk,42
9
- symbex-0.3.dist-info/top_level.txt,sha256=qwle8HjAaYgpdMIHlJcTcN4gaG4wmDqUvkt54beTBTs,7
10
- symbex-0.3.dist-info/RECORD,,
File without changes
File without changes