diff options
author | CoprDistGit <infra@openeuler.org> | 2023-04-10 13:53:48 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-04-10 13:53:48 +0000 |
commit | c21df9237b5ad29a630f865d28982cc8438b954f (patch) | |
tree | 50f911ed8a7173fd1e8753f9ca313b5bc724eedf | |
parent | 9753a9e266410c385755a793e6a8536eb223b32c (diff) |
automatic import of python-import-expression
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-import-expression.spec | 342 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 344 insertions, 0 deletions
@@ -0,0 +1 @@ +/import_expression-1.1.4.tar.gz diff --git a/python-import-expression.spec b/python-import-expression.spec new file mode 100644 index 0000000..ff89922 --- /dev/null +++ b/python-import-expression.spec @@ -0,0 +1,342 @@ +%global _empty_manifest_terminate_build 0 +Name: python-import-expression +Version: 1.1.4 +Release: 1 +Summary: Parses a superset of Python allowing for inline module import expressions +License: MIT +URL: https://github.com/iomintz/import-expression-parser +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/cf/b7/aca3c80b4efd272597754b37cf894521ac7dd82c2c2ebe58eaef494e627f/import_expression-1.1.4.tar.gz +BuildArch: noarch + +Requires: python3-astunparse +Requires: python3-pytest +Requires: python3-pytest-cov + +%description +# Import Expression Parser (for lack of a better name) + +[](https://travis-ci.org/iomintz/import-expression-parser) +[](https://coveralls.io/github/iomintz/import-expression-parser?branch=main) + +Import Expression Parser converts code like this: + +```py +urllib.parse!.quote('hello there') +``` + +Into this equivalent code: +```py +importlib.import_module('urllib.parse').quote('hello there') +``` + +## Usage + +```py +>>> import import_expression +>>> import_expression.eval('collections!.Counter("bccdddeeee")') +Counter({'e': 4, 'd': 3, 'c': 2, 'b': 1}) +``` + +The other public functions are `exec`, `compile`, `parse`, `find_imports`, and `update_globals`. +See their docstrings for details. + +By default, the filename for `SyntaxError`s is `<string>`. +To change this, pass in a filename via the `filename` kwarg. + +### Reusing compiled code objects + +import_expression.eval/exec/compile should not be passed strings in a tight loop. \ +Doing so will recompile the string every time. Instead, you should pre-compile the string to a code object +and pass that to import_expression.eval / import_expression.exec. +For example, instead of this: + +```py +for line in sys.stdin: + print(import_expression.eval('foo!.bar(l)', dict(l=line)) +``` + +Prefer this: + +```py +code = import_expression.compile('foo!.bar(l)', mode='eval') +for line in sys.stdin: + print(import_expression.eval(code, dict(l=line))) +``` + +### Custom encoding + +```py +# encoding: import_expression +print(typing!.TYPE_CHECKING) +``` + +This file, when run, will print True/False. For maximum laziness you can also do `#coding:ie`. + +### REPL usage + +Run `import-expression` for an import expression enabled REPL. \ +Run `import-expression -a` for a REPL that supports both import expressions and top level `await` (3.8+). + +See `import-expression --help` for more details. + +### Running a file + +Run `import-expression <filename.py>`. + +### File rewriter + +Run `import-expression-rewrite <file.py>` to rewrite a file containing import expressions to standard Python. \ +Add the `-i` flag to rewrite in-place. + +## Limitations / Known Issues + +* Due to the hell that is f-string parsing, and because `!` is already an operator inside f-strings, + import expressions inside f-strings will likely never be supported. +* Due to python limitations, results of `import_expression.exec` will have no effect on the caller's globals or locals + without an explicit `globals` argument. +* Unlike real operators, spaces before and after the import expression operator (such as `x ! .y`) are not supported. + +## [License](https://github.com/iomintz/import-expression-parser/blob/main/LICENSE) + +Copyright © 2018–2019 Io Mintz <<io@mintz.cc>>. All Rights Reserved. \ +Licensed under the MIT License. See the LICENSE file for details. + + + + +%package -n python3-import-expression +Summary: Parses a superset of Python allowing for inline module import expressions +Provides: python-import-expression +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-import-expression +# Import Expression Parser (for lack of a better name) + +[](https://travis-ci.org/iomintz/import-expression-parser) +[](https://coveralls.io/github/iomintz/import-expression-parser?branch=main) + +Import Expression Parser converts code like this: + +```py +urllib.parse!.quote('hello there') +``` + +Into this equivalent code: +```py +importlib.import_module('urllib.parse').quote('hello there') +``` + +## Usage + +```py +>>> import import_expression +>>> import_expression.eval('collections!.Counter("bccdddeeee")') +Counter({'e': 4, 'd': 3, 'c': 2, 'b': 1}) +``` + +The other public functions are `exec`, `compile`, `parse`, `find_imports`, and `update_globals`. +See their docstrings for details. + +By default, the filename for `SyntaxError`s is `<string>`. +To change this, pass in a filename via the `filename` kwarg. + +### Reusing compiled code objects + +import_expression.eval/exec/compile should not be passed strings in a tight loop. \ +Doing so will recompile the string every time. Instead, you should pre-compile the string to a code object +and pass that to import_expression.eval / import_expression.exec. +For example, instead of this: + +```py +for line in sys.stdin: + print(import_expression.eval('foo!.bar(l)', dict(l=line)) +``` + +Prefer this: + +```py +code = import_expression.compile('foo!.bar(l)', mode='eval') +for line in sys.stdin: + print(import_expression.eval(code, dict(l=line))) +``` + +### Custom encoding + +```py +# encoding: import_expression +print(typing!.TYPE_CHECKING) +``` + +This file, when run, will print True/False. For maximum laziness you can also do `#coding:ie`. + +### REPL usage + +Run `import-expression` for an import expression enabled REPL. \ +Run `import-expression -a` for a REPL that supports both import expressions and top level `await` (3.8+). + +See `import-expression --help` for more details. + +### Running a file + +Run `import-expression <filename.py>`. + +### File rewriter + +Run `import-expression-rewrite <file.py>` to rewrite a file containing import expressions to standard Python. \ +Add the `-i` flag to rewrite in-place. + +## Limitations / Known Issues + +* Due to the hell that is f-string parsing, and because `!` is already an operator inside f-strings, + import expressions inside f-strings will likely never be supported. +* Due to python limitations, results of `import_expression.exec` will have no effect on the caller's globals or locals + without an explicit `globals` argument. +* Unlike real operators, spaces before and after the import expression operator (such as `x ! .y`) are not supported. + +## [License](https://github.com/iomintz/import-expression-parser/blob/main/LICENSE) + +Copyright © 2018–2019 Io Mintz <<io@mintz.cc>>. All Rights Reserved. \ +Licensed under the MIT License. See the LICENSE file for details. + + + + +%package help +Summary: Development documents and examples for import-expression +Provides: python3-import-expression-doc +%description help +# Import Expression Parser (for lack of a better name) + +[](https://travis-ci.org/iomintz/import-expression-parser) +[](https://coveralls.io/github/iomintz/import-expression-parser?branch=main) + +Import Expression Parser converts code like this: + +```py +urllib.parse!.quote('hello there') +``` + +Into this equivalent code: +```py +importlib.import_module('urllib.parse').quote('hello there') +``` + +## Usage + +```py +>>> import import_expression +>>> import_expression.eval('collections!.Counter("bccdddeeee")') +Counter({'e': 4, 'd': 3, 'c': 2, 'b': 1}) +``` + +The other public functions are `exec`, `compile`, `parse`, `find_imports`, and `update_globals`. +See their docstrings for details. + +By default, the filename for `SyntaxError`s is `<string>`. +To change this, pass in a filename via the `filename` kwarg. + +### Reusing compiled code objects + +import_expression.eval/exec/compile should not be passed strings in a tight loop. \ +Doing so will recompile the string every time. Instead, you should pre-compile the string to a code object +and pass that to import_expression.eval / import_expression.exec. +For example, instead of this: + +```py +for line in sys.stdin: + print(import_expression.eval('foo!.bar(l)', dict(l=line)) +``` + +Prefer this: + +```py +code = import_expression.compile('foo!.bar(l)', mode='eval') +for line in sys.stdin: + print(import_expression.eval(code, dict(l=line))) +``` + +### Custom encoding + +```py +# encoding: import_expression +print(typing!.TYPE_CHECKING) +``` + +This file, when run, will print True/False. For maximum laziness you can also do `#coding:ie`. + +### REPL usage + +Run `import-expression` for an import expression enabled REPL. \ +Run `import-expression -a` for a REPL that supports both import expressions and top level `await` (3.8+). + +See `import-expression --help` for more details. + +### Running a file + +Run `import-expression <filename.py>`. + +### File rewriter + +Run `import-expression-rewrite <file.py>` to rewrite a file containing import expressions to standard Python. \ +Add the `-i` flag to rewrite in-place. + +## Limitations / Known Issues + +* Due to the hell that is f-string parsing, and because `!` is already an operator inside f-strings, + import expressions inside f-strings will likely never be supported. +* Due to python limitations, results of `import_expression.exec` will have no effect on the caller's globals or locals + without an explicit `globals` argument. +* Unlike real operators, spaces before and after the import expression operator (such as `x ! .y`) are not supported. + +## [License](https://github.com/iomintz/import-expression-parser/blob/main/LICENSE) + +Copyright © 2018–2019 Io Mintz <<io@mintz.cc>>. All Rights Reserved. \ +Licensed under the MIT License. See the LICENSE file for details. + + + + +%prep +%autosetup -n import-expression-1.1.4 + +%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-import-expression -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon Apr 10 2023 Python_Bot <Python_Bot@openeuler.org> - 1.1.4-1 +- Package Spec generated @@ -0,0 +1 @@ +c6fa0195b38c427fc7a624b2ccd99e04 import_expression-1.1.4.tar.gz |