diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-04-11 18:06:41 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-04-11 18:06:41 +0000 |
| commit | 082af58c1f6a8df95f892696c4d441848360d678 (patch) | |
| tree | 44ad96e1901150a9a2ff0c346bd095dfeb94d0fb /python-py-solc-ast.spec | |
| parent | 3e0c2d90c1fc6bfab05ec094094a801691f068d0 (diff) | |
automatic import of python-py-solc-ast
Diffstat (limited to 'python-py-solc-ast.spec')
| -rw-r--r-- | python-py-solc-ast.spec | 552 |
1 files changed, 552 insertions, 0 deletions
diff --git a/python-py-solc-ast.spec b/python-py-solc-ast.spec new file mode 100644 index 0000000..1de6de2 --- /dev/null +++ b/python-py-solc-ast.spec @@ -0,0 +1,552 @@ +%global _empty_manifest_terminate_build 0 +Name: python-py-solc-ast +Version: 1.2.9 +Release: 1 +Summary: A tool for exploring the abstract syntax tree generated by solc. +License: MIT +URL: https://github.com/iamdefinitelyahuman/py-solc-ast +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/6b/49/4e463051d0936525866a516fc49b703e537e7f1e66234f8eb5df317be9c3/py-solc-ast-1.2.9.tar.gz +BuildArch: noarch + + +%description +# solc-ast + +[](https://pypi.org/project/py-solc-ast/) [](https://github.com/iamdefinitelyahuman/py-solc-ast/actions) [](https://codecov.io/gh/iamdefinitelyahuman/py-solc-ast) + +A tool for exploring the Solidity abstrax syntrax tree as generated by the [solc](https://github.com/ethereum/solidity) compiler. + +## Installation + +You can install the latest release via `pip`: + +```bash +$ pip install py-solc-ast +``` + +Or clone the repo and use `setuptools`: + +```bash +$ python setup.py install +``` + +## Usage + +First, use [py-solc-x](https://github.com/iamdefinitelyahuman/py-solc-x) to compile your contracts to the [standard JSON output format](https://solidity.readthedocs.io/en/latest/using-the-compiler.html#output-description). + +```python +>>> import json +>>> import solcx +>>> input_json = json.load(open('input.json')) +>>> output_json = solcx.compile_standard(input_json) +``` + +Next, import `solcast` and initialize using `from_standard_output_json` or `from_standard_output`. This returns a list of `SourceUnit` objects, which each represent the base AST node in a Solidity source file. + +```python +>>> import solcast +>>> nodes = solcast.from_standard_output(output_json) +>>> nodes +[<SourceUnit iterable 'contracts/Token.sol'>, <SourceUnit iterable 'contracts/SafeMath.sol'>] +``` + +You can also generate a single `SourceUnit` directly from that source's AST: + +```python +>>> import solcast +>>> node = solcast.from_ast(output_json["sources"]["contracts/Token.sol"]["ast"]) +>>> node +<SourceUnit iterable 'contracts/Token.sol'> +``` + +### Interacting with Nodes + +Each node has the following attributes: + +```python +>>> node +<FunctionDefinition iterable 'mul'> + +>>> node.depth # Number of nodes between this node and the SourceUnit +2 + +>>> node.offset # Absolute source offsets as a (start, stop) tuple +(1693, 2151) + +>>> node.contract_id # Contract ID as given by the standard compiler JSON +2 + +>>> node.fields # List of fields for this node +['baseNodeType', 'documentation', 'id', 'implemented', 'kind', 'modifiers', 'name', 'nodeType', 'nodes', 'parameters', 'returnParameters', 'scope', 'src', 'stateMutability', 'superFunction', 'visibility'] + +``` + +Fields mostly follow the expected [AST grammar](https://solidity.readthedocs.io/en/latest/miscellaneous.html#language-grammar). One notable difference: `Block` nodes are omitted and the body of each `Block` is available within it's parent as the attribute `nodes`. Nodes containing a body are iterable and can be accessed with list-like syntax. Additionally, any child node with a `name` field is accessible using dict-like syntax. + +The following additional fields are also available: + +* Most nodes have a `baseNodeType` field as defined in [grammar.py](solcast/grammar.py) +* `ContractDefinition` nodes have `dependencies` and `libraries` fields that point to related `ContractDefition` nodes + +Some Examples: + +```python +>>> source_node +<SourceUnit iterable 'contracts/math/SafeMath.sol'> + +>>> source_node.keys() +['absolutePath', 'children', 'contract_id', 'depth', 'exportedSymbols', 'id', 'is_child_of', 'is_parent_of', 'keys', 'nodeType', 'nodes', 'offset', 'parent', 'parents', 'src'] + +>>> source_node.nodes +[<PragmaDirective object>, <ContractDefinition iterable 'SafeMath'>] + +>>> source_node[1] +<ContractDefinition iterable 'SafeMath'> + +>>> source_node['SafeMath'] +<ContractDefinition iterable 'SafeMath'> + +>>> source_node['SafeMath'].keys() +['baseContracts', 'children', 'contractDependencies', 'contractKind', 'contract_id', 'dependencies', 'depth', 'documentation', 'fullyImplemented', 'id', 'is_child_of', 'is_parent_of', 'keys', 'libraries', 'linearizedBaseContracts', 'name', 'nodeType', 'nodes', 'offset', 'parent', 'parents', 'scope', 'src'] + +>>> source_node['SafeMath'].nodes +[<FunctionDefinition iterable 'add'>, <FunctionDefinition iterable 'sub'>, <FunctionDefinition iterable 'mul'>, <FunctionDefinition iterable 'div'>, <FunctionDefinition iterable 'mod'>] + +>>> source_node['SafeMath']['mul'] +<FunctionDefinition iterable 'mul'> + +>>> source_node['SafeMath']['mul'] +[<IfStatement object>, <VariableDeclarationStatement object>, <FunctionCall object>, <Return object>] +``` + +### Exploring the Tree + +The `Node.children()` method is used to search and filter through child nodes of a given node. It takes any of the following keyword arguments: + +* `depth`: Number of levels of children to traverse. `0` returns only this node. +* `include_self`: Includes this node in the results. +* `include_parents`: Includes nodes that match in the results, when they also have child nodes that match. +* `include_children`: If True, as soon as a match is found it's children will not be included in the search. +* `required_offset`: Only match nodes with a source offset that contains this offset. +* `offset_limits`: Only match nodes when their source offset is contained inside this source offset. +* `filters`: Dictionary of `{'attribute': "value"}` that children must match. Can also be given as a list of dicts, children that match any of the dicts will be returned. +* `exclude_filter`: Dictionary of `{'attribute': "value"}` that children cannot match. + +```python +>>> node = s['Token']['transfer'] +>>> node.children( + include_children=False, + filters={'nodeType': "FunctionCall", "expression.name": "require"} +) +[<FunctionCall>] +``` + +`Node.parent()` and `Node.parents()` are used to travel back up the tree. They take the following arguments: + +* `depth`: Depth limit. If given as a negative value, it will be subtracted from this object's depth. +* `filters`: Dictionary of `{'attribute': "value"}` that parents must match. + +`Node.parent()` returns one result, `Node.parents()` returns a list of matches. + +```python +>>> node.parents() +[<ContractDefinition iterable 'Token'>, <SourceUnit iterable object 'contracts/Token.sol'>] +``` + +## Tests + +To run the test suite: + +```bash +$ tox +``` + +## Development + +Comments, questions, criticisms and pull requests are welcomed! Feel free to open an issue if you encounter a problem or would like to suggest a new feature. + +## License + +This project is licensed under the [MIT license](LICENSE). + + + + +%package -n python3-py-solc-ast +Summary: A tool for exploring the abstract syntax tree generated by solc. +Provides: python-py-solc-ast +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-py-solc-ast +# solc-ast + +[](https://pypi.org/project/py-solc-ast/) [](https://github.com/iamdefinitelyahuman/py-solc-ast/actions) [](https://codecov.io/gh/iamdefinitelyahuman/py-solc-ast) + +A tool for exploring the Solidity abstrax syntrax tree as generated by the [solc](https://github.com/ethereum/solidity) compiler. + +## Installation + +You can install the latest release via `pip`: + +```bash +$ pip install py-solc-ast +``` + +Or clone the repo and use `setuptools`: + +```bash +$ python setup.py install +``` + +## Usage + +First, use [py-solc-x](https://github.com/iamdefinitelyahuman/py-solc-x) to compile your contracts to the [standard JSON output format](https://solidity.readthedocs.io/en/latest/using-the-compiler.html#output-description). + +```python +>>> import json +>>> import solcx +>>> input_json = json.load(open('input.json')) +>>> output_json = solcx.compile_standard(input_json) +``` + +Next, import `solcast` and initialize using `from_standard_output_json` or `from_standard_output`. This returns a list of `SourceUnit` objects, which each represent the base AST node in a Solidity source file. + +```python +>>> import solcast +>>> nodes = solcast.from_standard_output(output_json) +>>> nodes +[<SourceUnit iterable 'contracts/Token.sol'>, <SourceUnit iterable 'contracts/SafeMath.sol'>] +``` + +You can also generate a single `SourceUnit` directly from that source's AST: + +```python +>>> import solcast +>>> node = solcast.from_ast(output_json["sources"]["contracts/Token.sol"]["ast"]) +>>> node +<SourceUnit iterable 'contracts/Token.sol'> +``` + +### Interacting with Nodes + +Each node has the following attributes: + +```python +>>> node +<FunctionDefinition iterable 'mul'> + +>>> node.depth # Number of nodes between this node and the SourceUnit +2 + +>>> node.offset # Absolute source offsets as a (start, stop) tuple +(1693, 2151) + +>>> node.contract_id # Contract ID as given by the standard compiler JSON +2 + +>>> node.fields # List of fields for this node +['baseNodeType', 'documentation', 'id', 'implemented', 'kind', 'modifiers', 'name', 'nodeType', 'nodes', 'parameters', 'returnParameters', 'scope', 'src', 'stateMutability', 'superFunction', 'visibility'] + +``` + +Fields mostly follow the expected [AST grammar](https://solidity.readthedocs.io/en/latest/miscellaneous.html#language-grammar). One notable difference: `Block` nodes are omitted and the body of each `Block` is available within it's parent as the attribute `nodes`. Nodes containing a body are iterable and can be accessed with list-like syntax. Additionally, any child node with a `name` field is accessible using dict-like syntax. + +The following additional fields are also available: + +* Most nodes have a `baseNodeType` field as defined in [grammar.py](solcast/grammar.py) +* `ContractDefinition` nodes have `dependencies` and `libraries` fields that point to related `ContractDefition` nodes + +Some Examples: + +```python +>>> source_node +<SourceUnit iterable 'contracts/math/SafeMath.sol'> + +>>> source_node.keys() +['absolutePath', 'children', 'contract_id', 'depth', 'exportedSymbols', 'id', 'is_child_of', 'is_parent_of', 'keys', 'nodeType', 'nodes', 'offset', 'parent', 'parents', 'src'] + +>>> source_node.nodes +[<PragmaDirective object>, <ContractDefinition iterable 'SafeMath'>] + +>>> source_node[1] +<ContractDefinition iterable 'SafeMath'> + +>>> source_node['SafeMath'] +<ContractDefinition iterable 'SafeMath'> + +>>> source_node['SafeMath'].keys() +['baseContracts', 'children', 'contractDependencies', 'contractKind', 'contract_id', 'dependencies', 'depth', 'documentation', 'fullyImplemented', 'id', 'is_child_of', 'is_parent_of', 'keys', 'libraries', 'linearizedBaseContracts', 'name', 'nodeType', 'nodes', 'offset', 'parent', 'parents', 'scope', 'src'] + +>>> source_node['SafeMath'].nodes +[<FunctionDefinition iterable 'add'>, <FunctionDefinition iterable 'sub'>, <FunctionDefinition iterable 'mul'>, <FunctionDefinition iterable 'div'>, <FunctionDefinition iterable 'mod'>] + +>>> source_node['SafeMath']['mul'] +<FunctionDefinition iterable 'mul'> + +>>> source_node['SafeMath']['mul'] +[<IfStatement object>, <VariableDeclarationStatement object>, <FunctionCall object>, <Return object>] +``` + +### Exploring the Tree + +The `Node.children()` method is used to search and filter through child nodes of a given node. It takes any of the following keyword arguments: + +* `depth`: Number of levels of children to traverse. `0` returns only this node. +* `include_self`: Includes this node in the results. +* `include_parents`: Includes nodes that match in the results, when they also have child nodes that match. +* `include_children`: If True, as soon as a match is found it's children will not be included in the search. +* `required_offset`: Only match nodes with a source offset that contains this offset. +* `offset_limits`: Only match nodes when their source offset is contained inside this source offset. +* `filters`: Dictionary of `{'attribute': "value"}` that children must match. Can also be given as a list of dicts, children that match any of the dicts will be returned. +* `exclude_filter`: Dictionary of `{'attribute': "value"}` that children cannot match. + +```python +>>> node = s['Token']['transfer'] +>>> node.children( + include_children=False, + filters={'nodeType': "FunctionCall", "expression.name": "require"} +) +[<FunctionCall>] +``` + +`Node.parent()` and `Node.parents()` are used to travel back up the tree. They take the following arguments: + +* `depth`: Depth limit. If given as a negative value, it will be subtracted from this object's depth. +* `filters`: Dictionary of `{'attribute': "value"}` that parents must match. + +`Node.parent()` returns one result, `Node.parents()` returns a list of matches. + +```python +>>> node.parents() +[<ContractDefinition iterable 'Token'>, <SourceUnit iterable object 'contracts/Token.sol'>] +``` + +## Tests + +To run the test suite: + +```bash +$ tox +``` + +## Development + +Comments, questions, criticisms and pull requests are welcomed! Feel free to open an issue if you encounter a problem or would like to suggest a new feature. + +## License + +This project is licensed under the [MIT license](LICENSE). + + + + +%package help +Summary: Development documents and examples for py-solc-ast +Provides: python3-py-solc-ast-doc +%description help +# solc-ast + +[](https://pypi.org/project/py-solc-ast/) [](https://github.com/iamdefinitelyahuman/py-solc-ast/actions) [](https://codecov.io/gh/iamdefinitelyahuman/py-solc-ast) + +A tool for exploring the Solidity abstrax syntrax tree as generated by the [solc](https://github.com/ethereum/solidity) compiler. + +## Installation + +You can install the latest release via `pip`: + +```bash +$ pip install py-solc-ast +``` + +Or clone the repo and use `setuptools`: + +```bash +$ python setup.py install +``` + +## Usage + +First, use [py-solc-x](https://github.com/iamdefinitelyahuman/py-solc-x) to compile your contracts to the [standard JSON output format](https://solidity.readthedocs.io/en/latest/using-the-compiler.html#output-description). + +```python +>>> import json +>>> import solcx +>>> input_json = json.load(open('input.json')) +>>> output_json = solcx.compile_standard(input_json) +``` + +Next, import `solcast` and initialize using `from_standard_output_json` or `from_standard_output`. This returns a list of `SourceUnit` objects, which each represent the base AST node in a Solidity source file. + +```python +>>> import solcast +>>> nodes = solcast.from_standard_output(output_json) +>>> nodes +[<SourceUnit iterable 'contracts/Token.sol'>, <SourceUnit iterable 'contracts/SafeMath.sol'>] +``` + +You can also generate a single `SourceUnit` directly from that source's AST: + +```python +>>> import solcast +>>> node = solcast.from_ast(output_json["sources"]["contracts/Token.sol"]["ast"]) +>>> node +<SourceUnit iterable 'contracts/Token.sol'> +``` + +### Interacting with Nodes + +Each node has the following attributes: + +```python +>>> node +<FunctionDefinition iterable 'mul'> + +>>> node.depth # Number of nodes between this node and the SourceUnit +2 + +>>> node.offset # Absolute source offsets as a (start, stop) tuple +(1693, 2151) + +>>> node.contract_id # Contract ID as given by the standard compiler JSON +2 + +>>> node.fields # List of fields for this node +['baseNodeType', 'documentation', 'id', 'implemented', 'kind', 'modifiers', 'name', 'nodeType', 'nodes', 'parameters', 'returnParameters', 'scope', 'src', 'stateMutability', 'superFunction', 'visibility'] + +``` + +Fields mostly follow the expected [AST grammar](https://solidity.readthedocs.io/en/latest/miscellaneous.html#language-grammar). One notable difference: `Block` nodes are omitted and the body of each `Block` is available within it's parent as the attribute `nodes`. Nodes containing a body are iterable and can be accessed with list-like syntax. Additionally, any child node with a `name` field is accessible using dict-like syntax. + +The following additional fields are also available: + +* Most nodes have a `baseNodeType` field as defined in [grammar.py](solcast/grammar.py) +* `ContractDefinition` nodes have `dependencies` and `libraries` fields that point to related `ContractDefition` nodes + +Some Examples: + +```python +>>> source_node +<SourceUnit iterable 'contracts/math/SafeMath.sol'> + +>>> source_node.keys() +['absolutePath', 'children', 'contract_id', 'depth', 'exportedSymbols', 'id', 'is_child_of', 'is_parent_of', 'keys', 'nodeType', 'nodes', 'offset', 'parent', 'parents', 'src'] + +>>> source_node.nodes +[<PragmaDirective object>, <ContractDefinition iterable 'SafeMath'>] + +>>> source_node[1] +<ContractDefinition iterable 'SafeMath'> + +>>> source_node['SafeMath'] +<ContractDefinition iterable 'SafeMath'> + +>>> source_node['SafeMath'].keys() +['baseContracts', 'children', 'contractDependencies', 'contractKind', 'contract_id', 'dependencies', 'depth', 'documentation', 'fullyImplemented', 'id', 'is_child_of', 'is_parent_of', 'keys', 'libraries', 'linearizedBaseContracts', 'name', 'nodeType', 'nodes', 'offset', 'parent', 'parents', 'scope', 'src'] + +>>> source_node['SafeMath'].nodes +[<FunctionDefinition iterable 'add'>, <FunctionDefinition iterable 'sub'>, <FunctionDefinition iterable 'mul'>, <FunctionDefinition iterable 'div'>, <FunctionDefinition iterable 'mod'>] + +>>> source_node['SafeMath']['mul'] +<FunctionDefinition iterable 'mul'> + +>>> source_node['SafeMath']['mul'] +[<IfStatement object>, <VariableDeclarationStatement object>, <FunctionCall object>, <Return object>] +``` + +### Exploring the Tree + +The `Node.children()` method is used to search and filter through child nodes of a given node. It takes any of the following keyword arguments: + +* `depth`: Number of levels of children to traverse. `0` returns only this node. +* `include_self`: Includes this node in the results. +* `include_parents`: Includes nodes that match in the results, when they also have child nodes that match. +* `include_children`: If True, as soon as a match is found it's children will not be included in the search. +* `required_offset`: Only match nodes with a source offset that contains this offset. +* `offset_limits`: Only match nodes when their source offset is contained inside this source offset. +* `filters`: Dictionary of `{'attribute': "value"}` that children must match. Can also be given as a list of dicts, children that match any of the dicts will be returned. +* `exclude_filter`: Dictionary of `{'attribute': "value"}` that children cannot match. + +```python +>>> node = s['Token']['transfer'] +>>> node.children( + include_children=False, + filters={'nodeType': "FunctionCall", "expression.name": "require"} +) +[<FunctionCall>] +``` + +`Node.parent()` and `Node.parents()` are used to travel back up the tree. They take the following arguments: + +* `depth`: Depth limit. If given as a negative value, it will be subtracted from this object's depth. +* `filters`: Dictionary of `{'attribute': "value"}` that parents must match. + +`Node.parent()` returns one result, `Node.parents()` returns a list of matches. + +```python +>>> node.parents() +[<ContractDefinition iterable 'Token'>, <SourceUnit iterable object 'contracts/Token.sol'>] +``` + +## Tests + +To run the test suite: + +```bash +$ tox +``` + +## Development + +Comments, questions, criticisms and pull requests are welcomed! Feel free to open an issue if you encounter a problem or would like to suggest a new feature. + +## License + +This project is licensed under the [MIT license](LICENSE). + + + + +%prep +%autosetup -n py-solc-ast-1.2.9 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-py-solc-ast -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 1.2.9-1 +- Package Spec generated |
