%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) [![Build Status](https://img.shields.io/travis/iomintz/import-expression-parser/main.svg?label=tests)](https://travis-ci.org/iomintz/import-expression-parser) [![Coverage Status](https://coveralls.io/repos/github/iomintz/import-expression-parser/badge.svg?branch=main)](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 ``. 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 `. ### File rewriter Run `import-expression-rewrite ` 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 <>. 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) [![Build Status](https://img.shields.io/travis/iomintz/import-expression-parser/main.svg?label=tests)](https://travis-ci.org/iomintz/import-expression-parser) [![Coverage Status](https://coveralls.io/repos/github/iomintz/import-expression-parser/badge.svg?branch=main)](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 ``. 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 `. ### File rewriter Run `import-expression-rewrite ` 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 <>. 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) [![Build Status](https://img.shields.io/travis/iomintz/import-expression-parser/main.svg?label=tests)](https://travis-ci.org/iomintz/import-expression-parser) [![Coverage Status](https://coveralls.io/repos/github/iomintz/import-expression-parser/badge.svg?branch=main)](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 ``. 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 `. ### File rewriter Run `import-expression-rewrite ` 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 <>. 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 - 1.1.4-1 - Package Spec generated