copr-backendsrc719fda9a70adb4a3ee9ec30c791a70f054507f8821be8d72aa08e51a72421b39Backend for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains backend.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c81aa1c6-7830-4928-bd89-d5ef271131d0copr-backendsrcd244c3d29ea8c042a87e0b2f6c706df2cf494c142c1253a036436071f721709fBackend for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains backend.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-7e5ed7c3-a8b4-4735-a744-bc0561dd5c4acopr-backendsrc873fe9ec0d6a1bb7f6183bb574a2621ba0be984a3cb3cd28771e12f88fd0deaaBackend for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains backend.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d816d000-a8b9-4240-b18b-ff361b3179b2copr-backendsrc5feeca9b7bd104ee42c2f5b0d4470054bc74b8e8e6804e1d43eb0e40b9c94b66Backend for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains backend.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ea842833-c78c-4fbe-9b73-eaf717f374accopr-builderx86_64ec69f39a973fc3d03095d821e25779beea938650ab2d7c2e95d5d64283cc9cc7copr-rpmbuild with all weak dependenciesProvides command capable of running COPR build-tasks.
Example: copr-rpmbuild 12345-epel-7-x86_64 will locally
build build-id 12345 for chroot epel-7-x86_64.
This package contains all optional modules for building SRPM.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b769dd42-2f8b-4301-879f-ab304a4ef3a2copr-rpmbuild-0.68-1.src.rpm/etc/copr-builder/etc/copr-builder/hooks/etc/copr-builder/hooks/cleanup/etc/copr-builder/hooks/cleanup/README/etc/copr-rpmbuild/mock-config-overrides/etc/copr-rpmbuild/mock-config-overrides/README/usr/bin/copr-builder-cleanup/usr/bin/copr-update-buildercopr-clisrcc95193cb7a04989a94e2e010a761dbbd4c886be16ac786cd4a75499a52c5e706Command line interface for COPRCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latests builds.
This package contains command line interface.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-4f2cc9a9-c8d8-4ca8-ab61-bc4a895c830ccopr-clinoarch0ead90059d6fe27fe0ec046d0a2f47a668e44babd9a318f4b5134abb29454989Command line interface for COPRCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latests builds.
This package contains command line interface.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b9cbef08-3acd-45b4-8581-eedaafaac31fcopr-cli-1.109-1.git.7652.b8277be.src.rpm/usr/bin/copr/usr/bin/copr-cli/usr/bin/package-build-ordercopr-clisrcd82579b9792dcd87e04815145a5ff8f011baa2dad73b1bdd477a4252b08e974eCommand line interface for COPRCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latests builds.
This package contains command line interface.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d6e710b1-e0de-4066-b86d-8a8c980bfbaacopr-clisrc2f28ff10bd3b57fab04d5329a8709971c72fe367e04ebde138e4dfc7376622b5Command line interface for COPRCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latests builds.
This package contains command line interface.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b9cbef08-3acd-45b4-8581-eedaafaac31fcopr-clisrcbe8618f102acfb1ed628a68082f16561c7663bad9137cadaba2193e00eb3e528Command line interface for COPRCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latests builds.
This package contains command line interface.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-20fcfd7e-fb2e-44c0-8c81-cbb76a370d35copr-dist-gitsrcb92c93fd342b4e027000161e5dd19ea493d562e4c61c7757851fb8c9649ee1bcCopr services for Dist Git serverCOPR is lightweight build system. It allows you to create new project in WebUI
and submit new builds and COPR will create yum repository from latest builds.
This package contains Copr services for Dist Git server.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3b3d6607-b444-4e9d-a59f-76d5dbcda7bccopr-dist-gitsrcb803c3d67740ee217bc5ac602cbd28780c0efe2d591338ffb69e2eb550bd7e20Copr services for Dist Git serverCOPR is lightweight build system. It allows you to create new project in WebUI
and submit new builds and COPR will create yum repository from latest builds.
This package contains Copr services for Dist Git server.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c2598c19-13be-42fb-87f3-1b2bc48567eacopr-dist-gitsrc66944cc0db7e6927ce550b810ba360acbb4d0a03538132ed825318819303cd3fCopr services for Dist Git serverCOPR is lightweight build system. It allows you to create new project in WebUI
and submit new builds and COPR will create yum repository from latest builds.
This package contains Copr services for Dist Git server.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a1e74cf6-e060-46ef-8d0b-f66fee0fa988copr-distgit-clientx86_64005bb5834e9f94ac23909b3cec5776fb929a0add49ad84c6b0652f7f42c401c4Utility to download sources from dist-gitA simple, configurable python utility that is able to download sources from
various dist-git instances, and generate source RPMs.
The utility is able to automatically map the .git/config clone URL into
the corresponding dist-git instance configuration.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b769dd42-2f8b-4301-879f-ab304a4ef3a2copr-rpmbuild-0.68-1.src.rpm/etc/copr-distgit-client/etc/copr-distgit-client/default.ini/usr/bin/copr-distgit-clientcopr-frontendsrc3ca3d0ea611afba8e47f3f69c0f2b3e447a843002498bcfa5e95e66f5dfa4195Frontend for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latests builds.
This package contains frontend.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-96041642-e2fc-4731-9f97-b1df5a608792copr-frontendsrc80155d1bd622a25d0cbf25b53740308ea2d14b28eb7ed0af23b99923f0c9077bFrontend for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latests builds.
This package contains frontend.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-248b4ea4-3910-4ce5-9a49-abc10e36cddbcopr-frontendsrce825633116f1132a3319dfce222ef8a6fcd815c03aff9dfd6354b1a6dee06f03Frontend for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latests builds.
This package contains frontend.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f5ada082-c113-45bd-8ee5-14902e023f54copr-frontendsrcfad68d1d563168a1818e0c3ab95b79dfb08626ce23e3cf74bcde158f0386b567Frontend for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latests builds.
This package contains frontend.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-8e1da11b-f3c9-4dac-afe0-5fc249e62475copr-frontendsrc79d8ed7e70b76f017ef567f5984f36537403f2cc14434a569c6ad0a4ab93d305Frontend for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latests builds.
This package contains frontend.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-92a91969-539f-4f4c-963b-994d09c95edbcopr-keygennoarche192719d752ead981b1f3bbe49b26553933cae78097cc9d5b010add15f01c8d2Part of Copr build system. Aux service that generate keys for signdCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains aux service that generate keys for package signing.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d30a9d8b-f05b-447f-9c5d-faf5b34251a3copr-keygen-1.90-1.src.rpm/etc/copr-keygen/etc/cron.daily/copr-keygen/etc/logrotate.d/copr-keygen/etc/sudoers.d/copr_signer/usr/bin/gpg-copr/usr/bin/gpg-copr-prolong/usr/bin/gpg_copr.shcopr-keygensrc2d0d2e3d183b21430859c1d3443ade7edf6ef51187525306c5599ef4fa344ca9Part of Copr build system. Aux service that generate keys for signdCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains aux service that generate keys for package signing.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d30a9d8b-f05b-447f-9c5d-faf5b34251a3copr-rpmbuildsrc5dc173917e9461f337965ddbd1abbe017a3aa8487e90a710c9e644b9db373984Run COPR build tasksProvides command capable of running COPR build-tasks.
Example: copr-rpmbuild 12345-epel-7-x86_64 will locally
build build-id 12345 for chroot epel-7-x86_64.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-288babd2-91c5-4d62-bc26-f7c5312b3190copr-rpmbuildsrc1a9dcf29903daff64937a9022f0b3f0614435406f28c356afc2045a13972644bRun COPR build tasksProvides command capable of running COPR build-tasks.
Example: copr-rpmbuild 12345-epel-7-x86_64 will locally
build build-id 12345 for chroot epel-7-x86_64.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-747a8944-04af-4ec5-a138-3b91e3f3ead6copr-rpmbuildsrcfc6667e0517606ce6b6af0a8ab0d95f67d78a7edd70b31d9115156b1de5f701bRun COPR build tasksProvides command capable of running COPR build-tasks.
Example: copr-rpmbuild 12345-epel-7-x86_64 will locally
build build-id 12345 for chroot epel-7-x86_64.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b769dd42-2f8b-4301-879f-ab304a4ef3a2copr-rpmbuildx86_64029c50fe506a98a24bdc3795e868ae5a5686a1e0d10ba35c3dc542127a62914eRun COPR build tasksProvides command capable of running COPR build-tasks.
Example: copr-rpmbuild 12345-epel-7-x86_64 will locally
build build-id 12345 for chroot epel-7-x86_64.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b769dd42-2f8b-4301-879f-ab304a4ef3a2copr-rpmbuild-0.68-1.src.rpm/etc/copr-rpmbuild/etc/copr-rpmbuild/main.ini/etc/copr-rpmbuild/mock-custom-build.cfg.j2/etc/copr-rpmbuild/mock-source-build.cfg.j2/etc/copr-rpmbuild/mock.cfg.j2/etc/copr-rpmbuild/rpkg.conf.j2/usr/bin/copr-rpmbuild/usr/bin/copr-rpmbuild-cancel/usr/bin/copr-rpmbuild-log/usr/bin/copr-rpmbuild-loggify/usr/bin/copr-sources-customdist-gitnoarch9e76d7c14dff452bbe47eb774f201465469b9a280f28ddb3a7cbf9a01f1126ecPackage source version control systemDistGit is a Git repository specifically designed to hold RPM
package sources.https://github.com/release-engineering/dist-gitMIT AND GPL-1.0-onlyopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a7db64ba-da7c-4dbc-846a-0659b88e4359dist-git-1.17-1.src.rpm/etc/dist-git/etc/dist-git/dist-git.conf/etc/httpd/conf.d/dist-git/etc/httpd/conf.d/dist-git.conf/etc/httpd/conf.d/dist-git/git-smart-http.conf/etc/httpd/conf.d/dist-git/lookaside-upload.conf.example/etc/httpd/conf.d/dist-git/lookaside.conf/etc/httpd/conf.d/dist-git/manifest.confdist-gitsrc025bb567b71ddd0acc7f9a3794ba903f87459785c194d03b619f5afb83bb1ba9Package source version control systemDistGit is a Git repository specifically designed to hold RPM
package sources.https://github.com/release-engineering/dist-gitMIT AND GPL-1.0-onlyopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a7db64ba-da7c-4dbc-846a-0659b88e4359dist-git-selinuxnoarch945d7ce88ee3949d2e7125db8e86c88a9396867bf909af9a81798a08f3067c13SELinux support for dist-gitDist Git is a remote Git repository specifically designed to hold RPM
package sources.
This package includes SELinux support.https://github.com/release-engineering/dist-gitMIT AND GPL-1.0-onlyopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a7db64ba-da7c-4dbc-846a-0659b88e4359dist-git-1.17-1.src.rpm/usr/bin/dist-git-gc/usr/bin/mkbranch/usr/bin/mkbranch_branching/usr/bin/remove_unused_sources/usr/bin/setup_git_packagedistribution-gpg-keysnoarch8c74724c662085644795b6bd74a21fc141444b892f79f970c5e8d62671f6c6c3GPG keys of various Linux distributionsGPG keys used by various Linux distributions to sign packages.https://github.com/xsuchy/distribution-gpg-keysCC0-1.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-eab6ed4d-e1d3-4129-b864-a4e0cdc14cf5distribution-gpg-keys-1.87-1.src.rpmdistribution-gpg-keyssrcff1561602a81dcba4d56a5400839b58eac67461a7c3c473f865a3d81e557bd60GPG keys of various Linux distributionsGPG keys used by various Linux distributions to sign packages.https://github.com/xsuchy/distribution-gpg-keysCC0-1.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-eab6ed4d-e1d3-4129-b864-a4e0cdc14cf5distribution-gpg-keys-coprnoarche86fca384e9a94e0e6d3107c9dcc17e11a2b0557ba0b21de114c21c76bc8ff44GPG keys for Copr projectsGPG keys used by Copr projects.https://github.com/xsuchy/distribution-gpg-keysCC0-1.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-eab6ed4d-e1d3-4129-b864-a4e0cdc14cf5distribution-gpg-keys-1.87-1.src.rpmjs-jquery-uinoarch35ab56946fc67e0335d1a76dd6628747a311d60fdd10b36263c93aab0912da14jQuery user interfaceA curated set of user interface interactions, effects, widgets, and
themes built on top of the jQuery JavaScript Library.https://jqueryui.com/MITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a41c7d43-781c-4fc1-b9cb-0ac6e619faa4js-jquery-ui-1.13.2-1.src.rpmjs-jquery-uisrccd9b7aa593678ef45976d5e9ffcb1f7655a2aca4e34c511fafb4591f7f41621cjQuery user interfaceA curated set of user interface interactions, effects, widgets, and
themes built on top of the jQuery JavaScript Library.https://jqueryui.com/MITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a41c7d43-781c-4fc1-b9cb-0ac6e619faa4kojinoarch4e7d241189110e5598ba318ac6dc662a5057c4ab1c2b30e6583ee6cd496b002fBuild system toolsKoji is a system for building and tracking RPMS. The base package
contains shared libraries and the command-line interface.https://pagure.io/koji/LGPLv2 and GPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-43d5e2df-66df-4fb1-b7e7-be8330c989c5koji-1.32.0-1.src.rpm/etc/koji.conf/etc/koji.conf.d/usr/bin/kojikojinoarch33d4021d56daa87dd13d7b2ff1f546cbb47be08c4c54eebc7f1391389852ad9cBuild system toolsKoji is a system for building and tracking RPMS. The base package
contains shared libraries and the command-line interface.https://pagure.io/koji/LGPLv2 and GPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-fb1e5b17-d116-44dd-88dd-e321152ce5e5koji-1.32.0-1.src.rpm/etc/koji.conf/etc/koji.conf.d/usr/bin/kojikojisrc26d920fe675e851057d1c7980658a311c15b99d4ea203ab4429d04d3f070d751Build system toolsKoji is a system for building and tracking RPMS. The base package
contains shared libraries and the command-line interface.https://pagure.io/koji/LGPLv2 and GPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-43d5e2df-66df-4fb1-b7e7-be8330c989c5kojisrc444237e9ff7848b16ffe07ef0c529382996cc4fbef7e63352748f6b46e5dc152Build system toolsKoji is a system for building and tracking RPMS. The base package
contains shared libraries and the command-line interface.https://pagure.io/koji/LGPLv2 and GPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-fb1e5b17-d116-44dd-88dd-e321152ce5e5koji-builder-plugin-rpmautospecnoarch9dce672677674f08c5a1b032d256deae191f0067ab92919f063eebbb25866ea5Koji plugin for generating RPM releases and changelogsA Koji plugin for generating RPM releases and changelogs.https://pagure.io/fedora-infra/rpmautospecMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c193af30-d8cf-41b3-964b-b57181e178a6python-rpmautospec-0.3.5-1.src.rpmkoji-builder-plugin-rpmautospecnoarchc697d354c2378c22b1187ce8bf4b5b1cc2158f15d261821476d29a52b9e2ab85Koji plugin for generating RPM releases and changelogsA Koji plugin for generating RPM releases and changelogs.https://pagure.io/fedora-infra/rpmautospecMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f4072875-c26a-4cd8-abb4-0b60ae8fd4e9python-rpmautospec-0.3.5-1.src.rpmmocknoarchc7cf7cdc8de2f4b34284bad018ff3bbc5cb45746af6325966ce1f94d4e345e06Builds packages inside chrootsMock takes an SRPM and builds it in a chroot.https://github.com/rpm-software-management/mock/GPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-36990101-4763-400a-a605-019bd1d3c743mock-3.5-1.src.rpm/etc/mock/logging.ini/etc/pam.d/mock/etc/pki/mock/etc/pki/mock/README.txt/etc/security/console.apps/mock/usr/bin/mock/usr/bin/mock-parse-buildlog/usr/bin/mockchainmocksrce0428c82c6770fc8fcf9e2c0ae8ce08f4097f5c16060e918aba2f5a7e84edb6cBuilds packages inside chrootsMock takes an SRPM and builds it in a chroot.https://github.com/rpm-software-management/mock/GPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-36990101-4763-400a-a605-019bd1d3c743mock-core-configsnoarch0e86b14647657a38dd3914d31a9b9e0f511981948900febc77c1ba7d5ffb1e09Mock core config files basic chrootsConfig files which allow you to create chroots for:
* Fedora
* Epel
* Mageia
* Custom chroot
* OpenSuse Tumbleweed and Leap
* openEulerhttps://github.com/rpm-software-management/mock/GPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9c8deaa6-0c9d-48e5-801d-28572e613f0bmock-core-configs-31.6-1.src.rpm/etc/mock/etc/mock/amazonlinux-2-aarch64.cfg/etc/mock/amazonlinux-2-x86_64.cfg/etc/mock/centos-stream-aarch64.cfg/etc/mock/centos-stream-ppc64le.cfg/etc/mock/centos-stream-x86_64.cfg/etc/mock/custom-1-aarch64.cfg/etc/mock/custom-1-armhfp.cfg/etc/mock/custom-1-i386.cfg/etc/mock/custom-1-ppc64.cfg/etc/mock/custom-1-ppc64le.cfg/etc/mock/custom-1-s390.cfg/etc/mock/custom-1-s390x.cfg/etc/mock/custom-1-x86_64.cfg/etc/mock/default.cfg/etc/mock/eol/etc/mock/eol/epel-5-i386.cfg/etc/mock/eol/epel-5-x86_64.cfg/etc/mock/eol/fedora-25-aarch64.cfg/etc/mock/eol/fedora-25-armhfp.cfg/etc/mock/eol/fedora-25-i386.cfg/etc/mock/eol/fedora-25-ppc64.cfg/etc/mock/eol/fedora-25-ppc64le.cfg/etc/mock/eol/fedora-25-s390x.cfg/etc/mock/eol/fedora-25-x86_64.cfg/etc/mock/eol/fedora-26-aarch64.cfg/etc/mock/eol/fedora-26-armhfp.cfg/etc/mock/eol/fedora-26-i386.cfg/etc/mock/eol/fedora-26-ppc64.cfg/etc/mock/eol/fedora-26-ppc64le.cfg/etc/mock/eol/fedora-26-s390x.cfg/etc/mock/eol/fedora-26-x86_64.cfg/etc/mock/eol/fedora-27-aarch64.cfg/etc/mock/eol/fedora-27-armhfp.cfg/etc/mock/eol/fedora-27-i386.cfg/etc/mock/eol/fedora-27-ppc64.cfg/etc/mock/eol/fedora-27-ppc64le.cfg/etc/mock/eol/fedora-27-s390x.cfg/etc/mock/eol/fedora-27-x86_64.cfg/etc/mock/eol/fedora-28-aarch64.cfg/etc/mock/eol/fedora-28-armhfp.cfg/etc/mock/eol/fedora-28-i386.cfg/etc/mock/eol/fedora-28-ppc64.cfg/etc/mock/eol/fedora-28-ppc64le.cfg/etc/mock/eol/fedora-28-s390x.cfg/etc/mock/eol/fedora-28-x86_64.cfg/etc/mock/epel-6-i386.cfg/etc/mock/epel-6-ppc64.cfg/etc/mock/epel-6-x86_64.cfg/etc/mock/epel-7-aarch64.cfg/etc/mock/epel-7-ppc64.cfg/etc/mock/epel-7-ppc64le.cfg/etc/mock/epel-7-x86_64.cfg/etc/mock/epel-8-aarch64.cfg/etc/mock/epel-8-ppc64le.cfg/etc/mock/epel-8-x86_64.cfg/etc/mock/fedora-29-aarch64.cfg/etc/mock/fedora-29-armhfp.cfg/etc/mock/fedora-29-i386.cfg/etc/mock/fedora-29-ppc64le.cfg/etc/mock/fedora-29-s390x.cfg/etc/mock/fedora-29-x86_64.cfg/etc/mock/fedora-30-aarch64.cfg/etc/mock/fedora-30-armhfp.cfg/etc/mock/fedora-30-i386.cfg/etc/mock/fedora-30-ppc64le.cfg/etc/mock/fedora-30-s390x.cfg/etc/mock/fedora-30-x86_64.cfg/etc/mock/fedora-31-aarch64.cfg/etc/mock/fedora-31-armhfp.cfg/etc/mock/fedora-31-i386.cfg/etc/mock/fedora-31-ppc64le.cfg/etc/mock/fedora-31-s390x.cfg/etc/mock/fedora-31-x86_64.cfg/etc/mock/fedora-32-aarch64.cfg/etc/mock/fedora-32-armhfp.cfg/etc/mock/fedora-32-i386.cfg/etc/mock/fedora-32-ppc64le.cfg/etc/mock/fedora-32-s390x.cfg/etc/mock/fedora-32-x86_64.cfg/etc/mock/fedora-rawhide-aarch64.cfg/etc/mock/fedora-rawhide-armhfp.cfg/etc/mock/fedora-rawhide-i386.cfg/etc/mock/fedora-rawhide-ppc64le.cfg/etc/mock/fedora-rawhide-s390x.cfg/etc/mock/fedora-rawhide-x86_64.cfg/etc/mock/mageia-6-armv5tl.cfg/etc/mock/mageia-6-armv7hl.cfg/etc/mock/mageia-6-i586.cfg/etc/mock/mageia-6-x86_64.cfg/etc/mock/mageia-7-aarch64.cfg/etc/mock/mageia-7-armv7hl.cfg/etc/mock/mageia-7-i586.cfg/etc/mock/mageia-7-x86_64.cfg/etc/mock/mageia-8-aarch64.cfg/etc/mock/mageia-8-armv7hl.cfg/etc/mock/mageia-8-i586.cfg/etc/mock/mageia-8-x86_64.cfg/etc/mock/mageia-cauldron-aarch64.cfg/etc/mock/mageia-cauldron-armv7hl.cfg/etc/mock/mageia-cauldron-i586.cfg/etc/mock/mageia-cauldron-x86_64.cfg/etc/mock/openmandriva-4.0-aarch64.cfg/etc/mock/openmandriva-4.0-armv7hnl.cfg/etc/mock/openmandriva-4.0-i686.cfg/etc/mock/openmandriva-4.0-x86_64.cfg/etc/mock/openmandriva-cooker-aarch64.cfg/etc/mock/openmandriva-cooker-armv7hnl.cfg/etc/mock/openmandriva-cooker-i686.cfg/etc/mock/openmandriva-cooker-x86_64.cfg/etc/mock/openmandriva-rolling-aarch64.cfg/etc/mock/openmandriva-rolling-armv7hnl.cfg/etc/mock/openmandriva-rolling-i686.cfg/etc/mock/openmandriva-rolling-x86_64.cfg/etc/mock/opensuse-leap-15.0-aarch64.cfg/etc/mock/opensuse-leap-15.0-x86_64.cfg/etc/mock/opensuse-leap-15.1-aarch64.cfg/etc/mock/opensuse-leap-15.1-x86_64.cfg/etc/mock/opensuse-tumbleweed-aarch64.cfg/etc/mock/opensuse-tumbleweed-i586.cfg/etc/mock/opensuse-tumbleweed-ppc64.cfg/etc/mock/opensuse-tumbleweed-ppc64le.cfg/etc/mock/opensuse-tumbleweed-x86_64.cfg/etc/mock/rhel-7-aarch64.cfg/etc/mock/rhel-7-ppc64.cfg/etc/mock/rhel-7-ppc64le.cfg/etc/mock/rhel-7-x86_64.cfg/etc/mock/rhel-8-aarch64.cfg/etc/mock/rhel-8-ppc64.cfg/etc/mock/rhel-8-ppc64le.cfg/etc/mock/rhel-8-x86_64.cfg/etc/mock/rhelbeta-8-aarch64.cfg/etc/mock/rhelbeta-8-ppc64le.cfg/etc/mock/rhelbeta-8-s390x.cfg/etc/mock/rhelbeta-8-x86_64.cfg/etc/mock/rhelepel-8-aarch64.cfg/etc/mock/rhelepel-8-ppc64.cfg/etc/mock/rhelepel-8-ppc64le.cfg/etc/mock/rhelepel-8-x86_64.cfg/etc/mock/templates/etc/mock/templates/amazonlinux-2.tpl/etc/mock/templates/centos-8.tpl/etc/mock/templates/centos-stream.tpl/etc/mock/templates/epel-8.tpl/etc/mock/templates/epel-playground-8.tpl/etc/mock/templates/fedora-29.tpl/etc/mock/templates/fedora-30.tpl/etc/mock/templates/fedora-31.tpl/etc/mock/templates/fedora-rawhide.tpl/etc/mock/templates/rhel-7.tpl/etc/mock/templates/rhel-8.tplmock-core-configssrc193bef0489c5858269b63545289638044468a9be2616d6228cee4a5052ddd972Mock core config files basic chrootsConfig files which allow you to create chroots for:
* Fedora
* Epel
* Mageia
* Custom chroot
* OpenSuse Tumbleweed and Leap
* openEulerhttps://github.com/rpm-software-management/mock/GPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9c8deaa6-0c9d-48e5-801d-28572e613f0bmock-core-configsnoarch05abe0aa3068222592738344e3c857170211d3a5b38630d6597a7074318072d4Mock core config files basic chrootsConfig files which allow you to create chroots for:
* Fedora
* Epel
* Mageia
* Custom chroot
* OpenSuse Tumbleweed and Leap
* openEulerhttps://github.com/rpm-software-management/mock/GPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b273641b-2518-4c8d-97ea-30881b533ef6mock-core-configs-38.3-2.src.rpm/etc/mock/etc/mock/alma+epel-8-aarch64.cfg/etc/mock/alma+epel-8-ppc64le.cfg/etc/mock/alma+epel-8-x86_64.cfg/etc/mock/alma+epel-9-aarch64.cfg/etc/mock/alma+epel-9-ppc64le.cfg/etc/mock/alma+epel-9-s390x.cfg/etc/mock/alma+epel-9-x86_64.cfg/etc/mock/almalinux-8-aarch64.cfg/etc/mock/almalinux-8-ppc64le.cfg/etc/mock/almalinux-8-x86_64.cfg/etc/mock/almalinux-9-aarch64.cfg/etc/mock/almalinux-9-ppc64le.cfg/etc/mock/almalinux-9-s390x.cfg/etc/mock/almalinux-9-x86_64.cfg/etc/mock/amazonlinux-2-aarch64.cfg/etc/mock/amazonlinux-2-x86_64.cfg/etc/mock/anolis-7-aarch64.cfg/etc/mock/anolis-7-x86_64.cfg/etc/mock/anolis-8-aarch64.cfg/etc/mock/anolis-8-x86_64.cfg/etc/mock/centos+epel-7-ppc64le.cfg/etc/mock/centos+epel-7-x86_64.cfg/etc/mock/centos-7-aarch64.cfg/etc/mock/centos-7-ppc64.cfg/etc/mock/centos-7-ppc64le.cfg/etc/mock/centos-7-x86_64.cfg/etc/mock/centos-stream+epel-8-aarch64.cfg/etc/mock/centos-stream+epel-8-ppc64le.cfg/etc/mock/centos-stream+epel-8-x86_64.cfg/etc/mock/centos-stream+epel-9-aarch64.cfg/etc/mock/centos-stream+epel-9-ppc64le.cfg/etc/mock/centos-stream+epel-9-s390x.cfg/etc/mock/centos-stream+epel-9-x86_64.cfg/etc/mock/centos-stream+epel-next-8-aarch64.cfg/etc/mock/centos-stream+epel-next-8-ppc64le.cfg/etc/mock/centos-stream+epel-next-8-x86_64.cfg/etc/mock/centos-stream+epel-next-9-aarch64.cfg/etc/mock/centos-stream+epel-next-9-ppc64le.cfg/etc/mock/centos-stream+epel-next-9-s390x.cfg/etc/mock/centos-stream+epel-next-9-x86_64.cfg/etc/mock/centos-stream-8-aarch64.cfg/etc/mock/centos-stream-8-ppc64le.cfg/etc/mock/centos-stream-8-x86_64.cfg/etc/mock/centos-stream-9-aarch64.cfg/etc/mock/centos-stream-9-ppc64le.cfg/etc/mock/centos-stream-9-s390x.cfg/etc/mock/centos-stream-9-x86_64.cfg/etc/mock/chroot-aliases.cfg/etc/mock/circlelinux+epel-8-aarch64.cfg/etc/mock/circlelinux+epel-8-ppc64le.cfg/etc/mock/circlelinux+epel-8-x86_64.cfg/etc/mock/circlelinux-8-aarch64.cfg/etc/mock/circlelinux-8-ppc64le.cfg/etc/mock/circlelinux-8-x86_64.cfg/etc/mock/custom-1-aarch64.cfg/etc/mock/custom-1-armhfp.cfg/etc/mock/custom-1-i386.cfg/etc/mock/custom-1-ppc64.cfg/etc/mock/custom-1-ppc64le.cfg/etc/mock/custom-1-s390.cfg/etc/mock/custom-1-s390x.cfg/etc/mock/custom-1-x86_64.cfg/etc/mock/default.cfg/etc/mock/eol/etc/mock/eol/centos+epel-7-aarch64.cfg/etc/mock/eol/centos+epel-7-ppc64.cfg/etc/mock/eol/centos+epel-8-aarch64.cfg/etc/mock/eol/centos+epel-8-ppc64le.cfg/etc/mock/eol/centos+epel-8-x86_64.cfg/etc/mock/eol/centos-6-i386.cfg/etc/mock/eol/centos-6-x86_64.cfg/etc/mock/eol/centos-8-aarch64.cfg/etc/mock/eol/centos-8-ppc64le.cfg/etc/mock/eol/centos-8-x86_64.cfg/etc/mock/eol/epel-5-i386.cfg/etc/mock/eol/epel-5-x86_64.cfg/etc/mock/eol/epel-6-i386.cfg/etc/mock/eol/epel-6-x86_64.cfg/etc/mock/eol/epelplayground-8-aarch64.cfg/etc/mock/eol/epelplayground-8-ppc64le.cfg/etc/mock/eol/epelplayground-8-x86_64.cfg/etc/mock/eol/fedora-25-aarch64.cfg/etc/mock/eol/fedora-25-armhfp.cfg/etc/mock/eol/fedora-25-i386.cfg/etc/mock/eol/fedora-25-ppc64.cfg/etc/mock/eol/fedora-25-ppc64le.cfg/etc/mock/eol/fedora-25-s390x.cfg/etc/mock/eol/fedora-25-x86_64.cfg/etc/mock/eol/fedora-26-aarch64.cfg/etc/mock/eol/fedora-26-armhfp.cfg/etc/mock/eol/fedora-26-i386.cfg/etc/mock/eol/fedora-26-ppc64.cfg/etc/mock/eol/fedora-26-ppc64le.cfg/etc/mock/eol/fedora-26-s390x.cfg/etc/mock/eol/fedora-26-x86_64.cfg/etc/mock/eol/fedora-27-aarch64.cfg/etc/mock/eol/fedora-27-armhfp.cfg/etc/mock/eol/fedora-27-i386.cfg/etc/mock/eol/fedora-27-ppc64.cfg/etc/mock/eol/fedora-27-ppc64le.cfg/etc/mock/eol/fedora-27-s390x.cfg/etc/mock/eol/fedora-27-x86_64.cfg/etc/mock/eol/fedora-28-aarch64.cfg/etc/mock/eol/fedora-28-armhfp.cfg/etc/mock/eol/fedora-28-i386.cfg/etc/mock/eol/fedora-28-ppc64.cfg/etc/mock/eol/fedora-28-ppc64le.cfg/etc/mock/eol/fedora-28-s390x.cfg/etc/mock/eol/fedora-28-x86_64.cfg/etc/mock/eol/fedora-29-aarch64.cfg/etc/mock/eol/fedora-29-armhfp.cfg/etc/mock/eol/fedora-29-i386.cfg/etc/mock/eol/fedora-29-ppc64le.cfg/etc/mock/eol/fedora-29-s390x.cfg/etc/mock/eol/fedora-29-x86_64.cfg/etc/mock/eol/fedora-30-aarch64.cfg/etc/mock/eol/fedora-30-armhfp.cfg/etc/mock/eol/fedora-30-i386.cfg/etc/mock/eol/fedora-30-ppc64le.cfg/etc/mock/eol/fedora-30-s390x.cfg/etc/mock/eol/fedora-30-x86_64.cfg/etc/mock/eol/fedora-31-aarch64.cfg/etc/mock/eol/fedora-31-armhfp.cfg/etc/mock/eol/fedora-31-i386.cfg/etc/mock/eol/fedora-31-ppc64le.cfg/etc/mock/eol/fedora-31-s390x.cfg/etc/mock/eol/fedora-31-x86_64.cfg/etc/mock/eol/fedora-32-aarch64.cfg/etc/mock/eol/fedora-32-armhfp.cfg/etc/mock/eol/fedora-32-i386.cfg/etc/mock/eol/fedora-32-ppc64le.cfg/etc/mock/eol/fedora-32-s390x.cfg/etc/mock/eol/fedora-32-x86_64.cfg/etc/mock/eol/fedora-33-aarch64.cfg/etc/mock/eol/fedora-33-armhfp.cfg/etc/mock/eol/fedora-33-i386.cfg/etc/mock/eol/fedora-33-ppc64le.cfg/etc/mock/eol/fedora-33-s390x.cfg/etc/mock/eol/fedora-33-x86_64.cfg/etc/mock/eol/fedora-34-aarch64.cfg/etc/mock/eol/fedora-34-armhfp.cfg/etc/mock/eol/fedora-34-i386.cfg/etc/mock/eol/fedora-34-ppc64le.cfg/etc/mock/eol/fedora-34-s390x.cfg/etc/mock/eol/fedora-34-x86_64.cfg/etc/mock/eol/mageia-6-armv5tl.cfg/etc/mock/eol/mageia-6-armv7hl.cfg/etc/mock/eol/mageia-6-i586.cfg/etc/mock/eol/mageia-6-x86_64.cfg/etc/mock/eol/openmandriva-4.0-aarch64.cfg/etc/mock/eol/openmandriva-4.0-armv7hnl.cfg/etc/mock/eol/openmandriva-4.0-i686.cfg/etc/mock/eol/openmandriva-4.0-x86_64.cfg/etc/mock/eol/opensuse-leap-15.0-aarch64.cfg/etc/mock/eol/opensuse-leap-15.0-x86_64.cfg/etc/mock/eol/opensuse-leap-15.1-aarch64.cfg/etc/mock/eol/opensuse-leap-15.1-x86_64.cfg/etc/mock/eol/opensuse-leap-15.2-aarch64.cfg/etc/mock/eol/opensuse-leap-15.2-x86_64.cfg/etc/mock/eol/rhel-6-x86_64.cfg/etc/mock/epel-7-ppc64le.cfg/etc/mock/epel-7-x86_64.cfg/etc/mock/eurolinux-8-aarch64.cfg/etc/mock/eurolinux-8-i686.cfg/etc/mock/eurolinux-8-x86_64.cfg/etc/mock/eurolinux-9-aarch64.cfg/etc/mock/eurolinux-9-i686.cfg/etc/mock/eurolinux-9-x86_64.cfg/etc/mock/fedora-35-aarch64.cfg/etc/mock/fedora-35-armhfp.cfg/etc/mock/fedora-35-i386.cfg/etc/mock/fedora-35-ppc64le.cfg/etc/mock/fedora-35-s390x.cfg/etc/mock/fedora-35-x86_64.cfg/etc/mock/fedora-36-aarch64.cfg/etc/mock/fedora-36-armhfp.cfg/etc/mock/fedora-36-i386.cfg/etc/mock/fedora-36-ppc64le.cfg/etc/mock/fedora-36-s390x.cfg/etc/mock/fedora-36-x86_64.cfg/etc/mock/fedora-37-aarch64.cfg/etc/mock/fedora-37-i386.cfg/etc/mock/fedora-37-ppc64le.cfg/etc/mock/fedora-37-s390x.cfg/etc/mock/fedora-37-x86_64.cfg/etc/mock/fedora-38-aarch64.cfg/etc/mock/fedora-38-i386.cfg/etc/mock/fedora-38-ppc64le.cfg/etc/mock/fedora-38-s390x.cfg/etc/mock/fedora-38-x86_64.cfg/etc/mock/fedora-39-aarch64.cfg/etc/mock/fedora-39-i386.cfg/etc/mock/fedora-39-ppc64le.cfg/etc/mock/fedora-39-s390x.cfg/etc/mock/fedora-39-x86_64.cfg/etc/mock/fedora-eln-aarch64.cfg/etc/mock/fedora-eln-i386.cfg/etc/mock/fedora-eln-ppc64le.cfg/etc/mock/fedora-eln-s390x.cfg/etc/mock/fedora-eln-x86_64.cfg/etc/mock/fedora-rawhide-aarch64.cfg/etc/mock/fedora-rawhide-i386.cfg/etc/mock/fedora-rawhide-ppc64le.cfg/etc/mock/fedora-rawhide-s390x.cfg/etc/mock/fedora-rawhide-x86_64.cfg/etc/mock/mageia-7-aarch64.cfg/etc/mock/mageia-7-armv7hl.cfg/etc/mock/mageia-7-i586.cfg/etc/mock/mageia-7-x86_64.cfg/etc/mock/mageia-8-aarch64.cfg/etc/mock/mageia-8-armv7hl.cfg/etc/mock/mageia-8-i586.cfg/etc/mock/mageia-8-x86_64.cfg/etc/mock/mageia-9-aarch64.cfg/etc/mock/mageia-9-armv7hl.cfg/etc/mock/mageia-9-i586.cfg/etc/mock/mageia-9-x86_64.cfg/etc/mock/mageia-cauldron-aarch64.cfg/etc/mock/mageia-cauldron-armv7hl.cfg/etc/mock/mageia-cauldron-i586.cfg/etc/mock/mageia-cauldron-x86_64.cfg/etc/mock/navy-8-x86_64.cfg/etc/mock/openeuler-20.03-aarch64.cfg/etc/mock/openeuler-20.03-x86_64.cfg/etc/mock/openeuler-20.03_LTS-aarch64.cfg/etc/mock/openeuler-20.03_LTS-x86_64.cfg/etc/mock/openeuler-20.03_LTS_SP1-aarch64.cfg/etc/mock/openeuler-20.03_LTS_SP1-x86_64.cfg/etc/mock/openeuler-20.03_LTS_SP2-aarch64.cfg/etc/mock/openeuler-20.03_LTS_SP2-x86_64.cfg/etc/mock/openeuler-20.03_LTS_SP3-aarch64.cfg/etc/mock/openeuler-20.03_LTS_SP3-x86_64.cfg/etc/mock/openeuler-20.09-aarch64.cfg/etc/mock/openeuler-20.09-x86_64.cfg/etc/mock/openeuler-21.03-aarch64.cfg/etc/mock/openeuler-21.03-x86_64.cfg/etc/mock/openeuler-21.09-aarch64.cfg/etc/mock/openeuler-21.09-x86_64.cfg/etc/mock/openeuler-22.03-aarch64.cfg/etc/mock/openeuler-22.03-x86_64.cfg/etc/mock/openeuler-22.03_LTS-aarch64.cfg/etc/mock/openeuler-22.03_LTS-x86_64.cfg/etc/mock/openeuler-22.03_LTS_SP1-aarch64.cfg/etc/mock/openeuler-22.03_LTS_SP1-x86_64.cfg/etc/mock/openeuler-22.03_LTS_SP2-aarch64.cfg/etc/mock/openeuler-22.03_LTS_SP2-x86_64.cfg/etc/mock/openeuler-22.09-aarch64.cfg/etc/mock/openeuler-22.09-x86_64.cfg/etc/mock/openeuler-23.03-aarch64.cfg/etc/mock/openeuler-23.03-x86_64.cfg/etc/mock/openmandriva-4.1-aarch64.cfg/etc/mock/openmandriva-4.1-armv7hnl.cfg/etc/mock/openmandriva-4.1-i686.cfg/etc/mock/openmandriva-4.1-x86_64.cfg/etc/mock/openmandriva-cooker-aarch64.cfg/etc/mock/openmandriva-cooker-armv7hnl.cfg/etc/mock/openmandriva-cooker-i686.cfg/etc/mock/openmandriva-cooker-x86_64.cfg/etc/mock/openmandriva-rolling-aarch64.cfg/etc/mock/openmandriva-rolling-armv7hnl.cfg/etc/mock/openmandriva-rolling-i686.cfg/etc/mock/openmandriva-rolling-x86_64.cfg/etc/mock/opensuse-leap-15.3-aarch64.cfg/etc/mock/opensuse-leap-15.3-ppc64le.cfg/etc/mock/opensuse-leap-15.3-s390x.cfg/etc/mock/opensuse-leap-15.3-x86_64.cfg/etc/mock/opensuse-leap-15.4-aarch64.cfg/etc/mock/opensuse-leap-15.4-ppc64le.cfg/etc/mock/opensuse-leap-15.4-s390x.cfg/etc/mock/opensuse-leap-15.4-x86_64.cfg/etc/mock/opensuse-tumbleweed-aarch64.cfg/etc/mock/opensuse-tumbleweed-i586.cfg/etc/mock/opensuse-tumbleweed-ppc64.cfg/etc/mock/opensuse-tumbleweed-ppc64le.cfg/etc/mock/opensuse-tumbleweed-s390x.cfg/etc/mock/opensuse-tumbleweed-x86_64.cfg/etc/mock/oraclelinux+epel-7-aarch64.cfg/etc/mock/oraclelinux+epel-7-x86_64.cfg/etc/mock/oraclelinux+epel-8-aarch64.cfg/etc/mock/oraclelinux+epel-8-x86_64.cfg/etc/mock/oraclelinux+epel-9-aarch64.cfg/etc/mock/oraclelinux+epel-9-x86_64.cfg/etc/mock/oraclelinux-7-aarch64.cfg/etc/mock/oraclelinux-7-x86_64.cfg/etc/mock/oraclelinux-8-aarch64.cfg/etc/mock/oraclelinux-8-x86_64.cfg/etc/mock/oraclelinux-9-aarch64.cfg/etc/mock/oraclelinux-9-x86_64.cfg/etc/mock/rhel+epel-8-aarch64.cfg/etc/mock/rhel+epel-8-ppc64le.cfg/etc/mock/rhel+epel-8-s390x.cfg/etc/mock/rhel+epel-8-x86_64.cfg/etc/mock/rhel+epel-9-aarch64.cfg/etc/mock/rhel+epel-9-ppc64le.cfg/etc/mock/rhel+epel-9-s390x.cfg/etc/mock/rhel+epel-9-x86_64.cfg/etc/mock/rhel-7-aarch64.cfg/etc/mock/rhel-7-ppc64.cfg/etc/mock/rhel-7-ppc64le.cfg/etc/mock/rhel-7-s390x.cfg/etc/mock/rhel-7-x86_64.cfg/etc/mock/rhel-8-aarch64.cfg/etc/mock/rhel-8-ppc64le.cfg/etc/mock/rhel-8-s390x.cfg/etc/mock/rhel-8-x86_64.cfg/etc/mock/rhel-9-aarch64.cfg/etc/mock/rhel-9-ppc64le.cfg/etc/mock/rhel-9-s390x.cfg/etc/mock/rhel-9-x86_64.cfg/etc/mock/rocky+epel-8-aarch64.cfg/etc/mock/rocky+epel-8-x86_64.cfg/etc/mock/rocky+epel-9-aarch64.cfg/etc/mock/rocky+epel-9-ppc64le.cfg/etc/mock/rocky+epel-9-s390x.cfg/etc/mock/rocky+epel-9-x86_64.cfg/etc/mock/rocky-8-aarch64.cfg/etc/mock/rocky-8-x86_64.cfg/etc/mock/rocky-9-aarch64.cfg/etc/mock/rocky-9-ppc64le.cfg/etc/mock/rocky-9-s390x.cfg/etc/mock/rocky-9-x86_64.cfg/etc/mock/site-defaults.cfg/etc/mock/templates/etc/mock/templates/almalinux-8.tpl/etc/mock/templates/almalinux-9.tpl/etc/mock/templates/amazonlinux-2.tpl/etc/mock/templates/anolis-7.tpl/etc/mock/templates/anolis-8.tpl/etc/mock/templates/centos-7.tpl/etc/mock/templates/centos-stream-8.tpl/etc/mock/templates/centos-stream-9.tpl/etc/mock/templates/circlelinux-8.tpl/etc/mock/templates/custom-1.tpl/etc/mock/templates/epel-7.tpl/etc/mock/templates/epel-8.tpl/etc/mock/templates/epel-9.tpl/etc/mock/templates/epel-next-8.tpl/etc/mock/templates/epel-next-9.tpl/etc/mock/templates/eurolinux-8.tpl/etc/mock/templates/eurolinux-9.tpl/etc/mock/templates/fedora-branched.tpl/etc/mock/templates/fedora-eln.tpl/etc/mock/templates/fedora-rawhide.tpl/etc/mock/templates/mageia-7.tpl/etc/mock/templates/mageia-branched.tpl/etc/mock/templates/mageia-cauldron.tpl/etc/mock/templates/navy-8.tpl/etc/mock/templates/openeuler-20.03-sp1.tpl/etc/mock/templates/openeuler-20.03-sp2.tpl/etc/mock/templates/openeuler-20.03-sp3.tpl/etc/mock/templates/openeuler-20.03.tpl/etc/mock/templates/openeuler-20.09.tpl/etc/mock/templates/openeuler-21.03.tpl/etc/mock/templates/openeuler-21.09.tpl/etc/mock/templates/openeuler-22.03-sp1.tpl/etc/mock/templates/openeuler-22.03-sp2.tpl/etc/mock/templates/openeuler-22.03.tpl/etc/mock/templates/openeuler-22.09.tpl/etc/mock/templates/openeuler-23.03.tpl/etc/mock/templates/openmandriva-branched.tpl/etc/mock/templates/openmandriva-cooker.tpl/etc/mock/templates/openmandriva-rolling.tpl/etc/mock/templates/opensuse-leap-15.3.tpl/etc/mock/templates/opensuse-leap-15.4.tpl/etc/mock/templates/opensuse-tumbleweed.tpl/etc/mock/templates/oraclelinux-7.tpl/etc/mock/templates/oraclelinux-8.tpl/etc/mock/templates/oraclelinux-9.tpl/etc/mock/templates/oraclelinux-epel-7.tpl/etc/mock/templates/oraclelinux-epel-8.tpl/etc/mock/templates/oraclelinux-epel-9.tpl/etc/mock/templates/rhel-7.tpl/etc/mock/templates/rhel-8.tpl/etc/mock/templates/rhel-9.tpl/etc/mock/templates/rocky-8.tpl/etc/mock/templates/rocky-9.tplmock-core-configssrc1d429fcfa55a66c3963889d55ad6e6197aa30dfa45a7054ce8fc50e9a2612dc7Mock core config files basic chrootsConfig files which allow you to create chroots for:
* Fedora
* Epel
* Mageia
* Custom chroot
* OpenSuse Tumbleweed and Leap
* openEulerhttps://github.com/rpm-software-management/mock/GPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b273641b-2518-4c8d-97ea-30881b533ef6mock-filesystemnoarchec28735d969b2f24da9514b5729c41801deeabcca80d9af270c5e007479624c9Mock filesystem layoutFilesystem layout and group for Mock.https://github.com/rpm-software-management/mock/GPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-36990101-4763-400a-a605-019bd1d3c743mock-3.5-1.src.rpm/etc/mock/etc/mock/eol/etc/mock/eol/templates/etc/mock/templatesmock-lvmnoarchbc70ee259e7035780f6f5ce925e7d84c30da41cb60601fcb3b5d88e1b833a1a7LVM plugin for mockMock plugin that enables using LVM as a backend and support creating snapshots
of the buildroot.https://github.com/rpm-software-management/mock/GPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-36990101-4763-400a-a605-019bd1d3c743mock-3.5-1.src.rpmmock-scmnoarche9dc913ea11a35ea00c65c4a9e16697efbbcb4b668b50a45bd9501fee1baaab5Mock SCM integration moduleMock SCM integration module.https://github.com/rpm-software-management/mock/GPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-36990101-4763-400a-a605-019bd1d3c743mock-3.5-1.src.rpmmodulemd-toolsnoarch6138bd6fe4a039ea14b92a5ca269c75d57e33b6adae74f25c1838e7db959ce7bCollection of tools for parsing and generating modulemd YAML filesTools provided by this package:
repo2module - Takes a YUM repository on its input and creates modules.yaml
containing YAML module definitions generated for each package.
dir2module - Generates a module YAML definition based on essential module
information provided via command-line parameters. The packages provided by
the module are found in a specified directory or a text file containing
their list.
createrepo_mod - A small wrapper around createrepo_c and modifyrepo_c to provide
an easy tool for generating module repositories.
modulemd-add-platform - Add a new context configuration for a new platform
into a modulemd-packager file.
modulemd-merge - Merge several modules.yaml files into one. This is useful for
example if you have several yum repositories and want to merge them into one.
modulemd-generate-macros - Generate module-build-macros SRPM package, which is
a central piece for building modules. It should be present in the buildroot
before any other module packages are submitted to be built.
bld2repo - Simple tool for dowloading build required RPMs of a modular build from koji.https://github.com/rpm-software-management/modulemd-toolsMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f2f438ee-ccdd-4cce-9b6f-e13b396e76d1modulemd-tools-0.13-1.src.rpm/usr/bin/bld2repo/usr/bin/createrepo_mod/usr/bin/dir2module/usr/bin/modulemd-add-platform/usr/bin/modulemd-generate-macros/usr/bin/modulemd-merge/usr/bin/repo2modulemodulemd-toolssrcee86c4daee7fd12706e99fdda2fbe1ab0455a1b22ead98008e183f7d0b7f0817Collection of tools for parsing and generating modulemd YAML filesTools provided by this package:
repo2module - Takes a YUM repository on its input and creates modules.yaml
containing YAML module definitions generated for each package.
dir2module - Generates a module YAML definition based on essential module
information provided via command-line parameters. The packages provided by
the module are found in a specified directory or a text file containing
their list.
createrepo_mod - A small wrapper around createrepo_c and modifyrepo_c to provide
an easy tool for generating module repositories.
modulemd-add-platform - Add a new context configuration for a new platform
into a modulemd-packager file.
modulemd-merge - Merge several modules.yaml files into one. This is useful for
example if you have several yum repositories and want to merge them into one.
modulemd-generate-macros - Generate module-build-macros SRPM package, which is
a central piece for building modules. It should be present in the buildroot
before any other module packages are submitted to be built.
bld2repo - Simple tool for dowloading build required RPMs of a modular build from koji.https://github.com/rpm-software-management/modulemd-toolsMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f2f438ee-ccdd-4cce-9b6f-e13b396e76d1mysql-connector-pythonsrcc7154b457a7fd5e7387d4e81f5e9ae4d70addd781ddb8fa9a779c456e1477e98MySQL driver written in Python
MySQL driver written in Python which does not depend on MySQL C client
libraries and implements the DB API v2.0 specification (PEP-249).http://dev.mysql.com/doc/connector-python/en/index.htmlGNU GPLv2 (with FOSS License Exception)openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-8e36d370-c800-4421-96df-1d3be509660fmysql-connector-python-debuginfox86_648251c621c8c1ca36d5db0700ff83c85f110a056e9d7cfe3d202b8114cfe4ff3bDebug information for package mysql-connector-pythonThis package provides debug information for package mysql-connector-python.
Debug information is useful when developing applications that use this
package or when debugging this package.http://dev.mysql.com/doc/connector-python/en/index.htmlGNU GPLv2 (with FOSS License Exception)openEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-8e36d370-c800-4421-96df-1d3be509660fmysql-connector-python-8.0.32-1.src.rpmmysql-connector-python-debugsourcex86_64c38e828ee6ea30738ca099318d7379a895e6b82cc4d76d1cbca1a7dda92473c2Debug sources for package mysql-connector-pythonThis package provides debug sources for package mysql-connector-python.
Debug sources are useful when developing applications that use this
package or when debugging this package.http://dev.mysql.com/doc/connector-python/en/index.htmlGNU GPLv2 (with FOSS License Exception)openEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-8e36d370-c800-4421-96df-1d3be509660fmysql-connector-python-8.0.32-1.src.rpmmysql-connector-python-helpx86_644f11dd92456829f694ba7446abdaa91862c5a59d438e39e0680e3f2bf7389624Development documents and examples for mysql-connector-python
MySQL driver written in Python which does not depend on MySQL C client
libraries and implements the DB API v2.0 specification (PEP-249).http://dev.mysql.com/doc/connector-python/en/index.htmlGNU GPLv2 (with FOSS License Exception)openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-8e36d370-c800-4421-96df-1d3be509660fmysql-connector-python-8.0.32-1.src.rpmmysql-connector-python3x86_641a8df786ccdaa948c232eaa60fb2d8a27f3655b1c459aa93dbe7bba1a36fb8c2MySQL driver written in Python
MySQL driver written in Python which does not depend on MySQL C client
libraries and implements the DB API v2.0 specification (PEP-249).http://dev.mysql.com/doc/connector-python/en/index.htmlGNU GPLv2 (with FOSS License Exception)openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-8e36d370-c800-4421-96df-1d3be509660fmysql-connector-python-8.0.32-1.src.rpmobs-signdsrcb1f57047518f06f166f9de07115206a1dcd95a037b908a46a524bbffbef47b2aThe OBS sign daemonThe OpenSUSE Build Service sign client and daemon.
This daemon can be used to sign anything via gpg by communicating
with a remote server to avoid the need to host the private key
on the same server.https://github.com/openSUSE/obs-signGPL-2.0-onlyopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-8252694f-aba7-4b28-81c1-c87ddd3c93dfobs-signdx86_64c9f0245895d6a39a5fee86adb00844970581288c597a2e5ad2e69ce08db8f16cThe OBS sign daemonThe OpenSUSE Build Service sign client and daemon.
This daemon can be used to sign anything via gpg by communicating
with a remote server to avoid the need to host the private key
on the same server.https://github.com/openSUSE/obs-signGPL-2.0-onlyopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-8252694f-aba7-4b28-81c1-c87ddd3c93dfobs-signd-2.6.1-1.src.rpm/etc/sign.conf/usr/bin/sign/usr/sbin/signdobs-signd-debuginfox86_64679fbde4454f8f6782b9b4b7c2fb0d6287c04b835f3917db6228f46f2c58ebefDebug information for package obs-signdThis package provides debug information for package obs-signd.
Debug information is useful when developing applications that use this
package or when debugging this package.https://github.com/openSUSE/obs-signGPL-2.0-onlyopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-8252694f-aba7-4b28-81c1-c87ddd3c93dfobs-signd-2.6.1-1.src.rpm/usr/lib/debug/usr/bin/sign-2.6.1-1.x86_64.debugobs-signd-debugsourcex86_647384519a0c7d9761b0a6f1af8a261056d6ed2cf4ea6f12eea3da3bb7a5fe67fdDebug sources for package obs-signdThis package provides debug sources for package obs-signd.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://github.com/openSUSE/obs-signGPL-2.0-onlyopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-8252694f-aba7-4b28-81c1-c87ddd3c93dfobs-signd-2.6.1-1.src.rpmpreprocnoarchb037151174f47497c8afaad306731cdd62110891ee645b74774ff77357d86bacSimple text preprocessorSimple text preprocessor implementing a very basic templating language.
You can use bash code enclosed in triple braces in a text file and
then pipe content of that file to preproc. preproc will replace each of
the tags with stdout of the executed code and print the final renderred
result to its own stdout.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-158cce37-a600-4f66-abde-b26a64340687preproc-0.5-1.src.rpm/usr/bin/preprocpreprocnoarch1a33ab5b7d90dccf81a130b8a70d4a9564d2a1f86468946275f4fb90ff7ec00cSimple text preprocessorSimple text preprocessor implementing a very basic templating language.
You can use bash code enclosed in triple braces in a text file and
then pipe content of that file to preproc. preproc will replace each of
the tags with stdout of the executed code and print the final renderred
result to its own stdout.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3a719ab7-b0b6-40e9-9aa2-8d7426c76f2apreproc-0.5-1.src.rpm/usr/bin/preprocpreprocsrcb79e6f3b25b3a6e4fd6fa6f57dff3a451963d46733eddc04e2b1e55ecd0dc877Simple text preprocessorSimple text preprocessor implementing a very basic templating language.
You can use bash code enclosed in triple braces in a text file and
then pipe content of that file to preproc. preproc will replace each of
the tags with stdout of the executed code and print the final renderred
result to its own stdout.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-158cce37-a600-4f66-abde-b26a64340687preprocsrccfc9b74820ba735f0210cfa7492ab4088aadcaabed12dcdfa8d80998eb4ad148Simple text preprocessorSimple text preprocessor implementing a very basic templating language.
You can use bash code enclosed in triple braces in a text file and
then pipe content of that file to preproc. preproc will replace each of
the tags with stdout of the executed code and print the final renderred
result to its own stdout.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3a719ab7-b0b6-40e9-9aa2-8d7426c76f2aprocenvsrcaee5c73cace3f0a8f765bd4a7db832f1df77bd0a7be802e9c6464ceea58b509fUtility to show process environmentThis package contains a command-line tool that displays as much
detail about itself and its environment as possible. It can be
used as a test tool, to understand the type of environment a
process runs in, and for comparing system environments.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a6b551b4-e1fd-4c7b-bf07-d364974c6e74procenvsrcc119ab60b3a34056d12acd7fb09f9aa1c0113765089280bb903b5bea25bbcc8fUtility to show process environmentThis package contains a command-line tool that displays as much
detail about itself and its environment as possible. It can be
used as a test tool, to understand the type of environment a
process runs in, and for comparing system environments.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1b3eeb02-8e16-412c-8504-72b35309878dprocenvsrccafe2af94858a10daed5e8582c2e4a7b6d829fe399db382698c8fd33ed7cb96dUtility to show process environmentThis package contains a command-line tool that displays as much
detail about itself and its environment as possible. It can be
used as a test tool, to understand the type of environment a
process runs in, and for comparing system environments.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedeur-prod-workerlocal-x86-64-normal-prod-00210491-20240301-02525procenvx86_646fcc81d023e8450b9970c2c4c5d587fc7308abcfdbf3354dc971000d5f1e6c86Utility to show process environmentThis package contains a command-line tool that displays as much
detail about itself and its environment as possible. It can be
used as a test tool, to understand the type of environment a
process runs in, and for comparing system environments.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a6b551b4-e1fd-4c7b-bf07-d364974c6e74procenv-0.60-1.src.rpm/usr/bin/procenvprocenvx86_643fc7b84c9a6f057ef64fa13c2f3924111dcdfacd5b0b2d82bc896ee55a5feb1dUtility to show process environmentThis package contains a command-line tool that displays as much
detail about itself and its environment as possible. It can be
used as a test tool, to understand the type of environment a
process runs in, and for comparing system environments.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1b3eeb02-8e16-412c-8504-72b35309878dprocenv-0.60-1.src.rpm/usr/bin/procenvprocenvx86_64a5cbde04d55f5009960ba1f5b4c4b0e2aa06df8d90761bf67c0c2fa72c8c1ff7Utility to show process environmentThis package contains a command-line tool that displays as much
detail about itself and its environment as possible. It can be
used as a test tool, to understand the type of environment a
process runs in, and for comparing system environments.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedeur-prod-workerlocal-x86-64-normal-prod-00210491-20240301-02525procenv-0.60-1.src.rpm/usr/bin/procenvprocenv-debuginfox86_644c64c882219b37aea1052e74b618ca9193fe171d9d06b679fbb5ad99f695fddbDebug information for package procenvThis package provides debug information for package procenv.
Debug information is useful when developing applications that use this
package or when debugging this package.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-a6b551b4-e1fd-4c7b-bf07-d364974c6e74procenv-0.60-1.src.rpm/usr/lib/debug/usr/bin/procenv-0.60-1.x86_64.debugprocenv-debuginfox86_64e4eb50df3e53d0254bb5f70e596c4d13f800b979a4c8db0c326b4f2469a31233Debug information for package procenvThis package provides debug information for package procenv.
Debug information is useful when developing applications that use this
package or when debugging this package.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-1b3eeb02-8e16-412c-8504-72b35309878dprocenv-0.60-1.src.rpm/usr/lib/debug/usr/bin/procenv-0.60-1.x86_64.debugprocenv-debuginfox86_646090087a49b1160823f78a24cac566925fd34c6fe9db56fcafe66c57be5c563bDebug information for package procenvThis package provides debug information for package procenv.
Debug information is useful when developing applications that use this
package or when debugging this package.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminDevelopment/Debugeur-prod-workerlocal-x86-64-normal-prod-00210491-20240301-02525procenv-0.60-1.src.rpm/usr/lib/debug/usr/bin/procenv-0.60-1.x86_64.debugprocenv-debugsourcex86_643525d11a14b55c959e369f89dfc33a95e2b8e89c7078c3e7736956006b3ae8cbDebug sources for package procenvThis package provides debug sources for package procenv.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-a6b551b4-e1fd-4c7b-bf07-d364974c6e74procenv-0.60-1.src.rpmprocenv-debugsourcex86_64d2de1006a4d158d5470c5a24f70f14e29a4c84f4f2462ef00a55755b84249229Debug sources for package procenvThis package provides debug sources for package procenv.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-1b3eeb02-8e16-412c-8504-72b35309878dprocenv-0.60-1.src.rpmprocenv-debugsourcex86_64eecfd58b68827f2c415e61bdf55812a1ef6b9ec3ca7ce9f3257b1e7a214958ffDebug sources for package procenvThis package provides debug sources for package procenv.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://github.com/jamesodhunt/procenvGPL-3.0-or-lateropenEuler Copr - user mywaaagh_adminDevelopment/Debugeur-prod-workerlocal-x86-64-normal-prod-00210491-20240301-02525procenv-0.60-1.src.rpmprunereponoarchac43ef35e89d28a19a74072a80e9417f4fc3ecdf42a91a4a69bc2785b32fb359Remove old packages from rpm-md repositoryRPM packages that have newer version available in that same
repository are deleted from filesystem and the rpm-md metadata are
recreated afterwards. If there is a source rpm for a deleted rpm
(and they both share the same directory path), then the source rpm
will be deleted as well.
Support for specific repository structure (e.g. COPR) is also available
making it possible to additionally remove build logs and whole build
directories associated with a package.
After deletion of obsoleted packages, the command
"createrepo_c --database --update" is called
to recreate the repository metadata.https://pagure.io/prunerepoGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bed41a8b-2b29-4ae1-9a80-ee503a22be41prunerepo-1.21-1.src.rpm/usr/bin/prunerepoprunereposrc83fce90cb098d2770cda69c4ca8690ee2eca36132df5ddd2752e3b794f706dcdRemove old packages from rpm-md repositoryRPM packages that have newer version available in that same
repository are deleted from filesystem and the rpm-md metadata are
recreated afterwards. If there is a source rpm for a deleted rpm
(and they both share the same directory path), then the source rpm
will be deleted as well.
Support for specific repository structure (e.g. COPR) is also available
making it possible to additionally remove build logs and whole build
directories associated with a package.
After deletion of obsoleted packages, the command
"createrepo_c --database --update" is called
to recreate the repository metadata.https://pagure.io/prunerepoGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bed41a8b-2b29-4ae1-9a80-ee503a22be41pyproject-rpm-macrosnoarch9ede6d345c984e41c878f822b99f45f83c6f8500d822df9f9ba2e8f5a8a67d31RPM macros for PEP 517 Python packagesThese macros allow projects that follow the Python packaging specifications
to be packaged as RPMs.
They work for:
* traditional Setuptools-based projects that use the setup.py file,
* newer Setuptools-based projects that have a setup.cfg file,
* general Python projects that use the PEP 517 pyproject.toml file
(which allows using any build system, such as setuptools, flit or poetry).
These macros replace %py3_build and %py3_install,
which only work with setup.py.https://src.fedoraproject.org/rpms/pyproject-rpm-macrosMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e1ac07e6-74bd-4569-a098-87ba91162e6fpyproject-rpm-macros-1.4.0-1.src.rpmpyproject-rpm-macrossrc8a57e4041f13a5cff057e9064a5869117c60960bb379515d7383d3f61fa61d40RPM macros for PEP 517 Python packagesThese macros allow projects that follow the Python packaging specifications
to be packaged as RPMs.
They work for:
* traditional Setuptools-based projects that use the setup.py file,
* newer Setuptools-based projects that have a setup.cfg file,
* general Python projects that use the PEP 517 pyproject.toml file
(which allows using any build system, such as setuptools, flit or poetry).
These macros replace %py3_build and %py3_install,
which only work with setup.py.https://src.fedoraproject.org/rpms/pyproject-rpm-macrosMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e1ac07e6-74bd-4569-a098-87ba91162e6fpython-Authlibsrccddc3e02364303cbb9b0a44de5f27d6ec6471f78380da37ce27e0e7146ee7a9eThe ultimate Python library in building OAuth and OpenID Connect servers and clients.The ultimate Python library in building OAuth and OpenID Connect servers.
JWS, JWK, JWA, JWT are included.https://authlib.org/BSD 3-Clause LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c5a41d83-54dd-4344-aadc-e269cb329b77python-Authlib-helpnoarchbc3287238e7ee4975eb767fc8342c4c8a53d05a2101c641dddb445ae102d2700Development documents and examples for AuthlibThe ultimate Python library in building OAuth and OpenID Connect servers.
JWS, JWK, JWA, JWT are included.https://authlib.org/BSD 3-Clause LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c5a41d83-54dd-4344-aadc-e269cb329b77python-Authlib-1.2.0-1.src.rpmpython-CCColUtilssrccf0811572178db092a0cc183689dead16e10756fbbb486f3f315ab8bef57d7a0Kerberos5 Credential Cache Collection UtilitiesKerberos5 Credential Cache Collection Utilities.https://pagure.io/cccolutilsGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5b8e6dc8-f864-4cee-ac08-86006acc0181python-CCColUtilssrc55f6a30b3b1335715845b96694af90c01ebc7740ea462805cf9b30a5461548f0Kerberos5 Credential Cache Collection UtilitiesKerberos5 Credential Cache Collection Utilities.https://pagure.io/cccolutilsGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2ab5f99f-db9a-40a8-815d-fcef753b8678python-CCColUtils-debuginfox86_647d1ec73ec95472ed670a58e0761d1bdf91e959590616b8e0b35d35e5ad2685f7Debug information for package python-CCColUtilsThis package provides debug information for package python-CCColUtils.
Debug information is useful when developing applications that use this
package or when debugging this package.https://pagure.io/cccolutilsGPLv2+openEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-5b8e6dc8-f864-4cee-ac08-86006acc0181python-CCColUtils-1.5-2.src.rpmpython-CCColUtils-debuginfox86_64f58c9f1de2d5b7387a8d94540d9a501f026e92b6c3ae481a0913ced729a82d8cDebug information for package python-CCColUtilsThis package provides debug information for package python-CCColUtils.
Debug information is useful when developing applications that use this
package or when debugging this package.https://pagure.io/cccolutilsGPLv2+openEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-2ab5f99f-db9a-40a8-815d-fcef753b8678python-CCColUtils-1.5-2.src.rpmpython-CCColUtils-debugsourcex86_6469065773114d353cc5155c5c68175cc8ea57241ff3a93bf69a6ea06986018661Debug sources for package python-CCColUtilsThis package provides debug sources for package python-CCColUtils.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://pagure.io/cccolutilsGPLv2+openEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-5b8e6dc8-f864-4cee-ac08-86006acc0181python-CCColUtils-1.5-2.src.rpmpython-CCColUtils-debugsourcex86_646b607a335b0844a0d28f8fc900d5f2977fbe67249d8217f32266228558b9800cDebug sources for package python-CCColUtilsThis package provides debug sources for package python-CCColUtils.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://pagure.io/cccolutilsGPLv2+openEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-2ab5f99f-db9a-40a8-815d-fcef753b8678python-CCColUtils-1.5-2.src.rpmpython-Flask-Cachingsrc2da8c3a304805ea2ba3484e2815ff03a9e021ebfc6267d3ecee985e848f51fcfAdds caching support to Flask applications.A fork of the `Flask-cache`_ extension which adds easy cache support to Flask.https://github.com/pallets-eco/flask-cachingBSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-cc6881b1-b283-4aa7-8a55-facad512af8fpython-Flask-Caching-helpnoarch99b4b2baccee15d258d75477f38f4589deb96018f7530632d69482394e506a70Development documents and examples for Flask-CachingA fork of the `Flask-cache`_ extension which adds easy cache support to Flask.https://github.com/pallets-eco/flask-cachingBSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-cc6881b1-b283-4aa7-8a55-facad512af8fpython-Flask-Caching-2.0.2-1.src.rpmpython-Flask-OpenIDsrce7c3c45384f256e6bc2a6b8947bb55b505b6816748ef2a61f5ba1319f02f11e0OpenID support for FlaskFlask-OpenID adds openid support to flask applicationshttp://github.com/mitsuhiko/flask-openid/BSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1b7b3fab-7f39-40b7-a509-ab87de0c1fe6python-Flask-OpenID-helpnoarch72b4f2fb54c8ee59575c0ab34740a592039301663ab28b1d9b496090acbb32e6Development documents and examples for Flask-OpenIDFlask-OpenID adds openid support to flask applicationshttp://github.com/mitsuhiko/flask-openid/BSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1b7b3fab-7f39-40b7-a509-ab87de0c1fe6python-Flask-OpenID-1.3.0-2.src.rpmpython-Flask-WTFsrcdc99dcfa53f7b6f0ba2967d74873fdcb4ec765b79279d0317ec7f10e23334d61Form rendering, validation, and CSRF protection for Flask with WTForms.Simple integration of Flask and WTForms, including CSRF, file upload,
and reCAPTCHA.https://github.com/wtforms/flask-wtf/BSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d888d7d0-8024-4288-9cae-6374bc69eb39python-Flask-WTF-helpnoarcha008d7d9549bacbc1429cb16a578f4d650235380b71324b6721f433ad083745aDevelopment documents and examples for Flask-WTFSimple integration of Flask and WTForms, including CSRF, file upload,
and reCAPTCHA.https://github.com/wtforms/flask-wtf/BSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d888d7d0-8024-4288-9cae-6374bc69eb39python-Flask-WTF-1.1.1-1.src.rpmpython-WTFormssrcb4d46e0b1892a7ce0b5b4216ecbbbb762f8a102b6ad433dd8b788020fa1186e6Form validation and rendering for Python web development.WTForms is a flexible forms validation and rendering library for Python
web development. It can work with whatever web framework and template
engine you choose. It supports data validation, CSRF protection,
internationalization (I18N), and more. There are various community
libraries that provide closer integration with popular frameworks.https://wtforms.readthedocs.io/BSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-8b3164b1-305b-4942-989f-9d3ed1feb2afpython-WTFormssrcd846f57b88f502a462e116a1137f4e948176ffefaf29aa08ab360d5718859b7bForm validation and rendering for Python web development.WTForms is a flexible forms validation and rendering library for Python
web development. It can work with whatever web framework and template
engine you choose. It supports data validation, CSRF protection,
internationalization (I18N), and more. There are various community
libraries that provide closer integration with popular frameworks.https://wtforms.readthedocs.io/BSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2474d198-984e-4cb6-8bd6-6297fe53add0python-XStatic-Bootstrap-SCSSsrc8fea46ad2647ecae8b60d606f3de8b02bfb172f4770e0cdbc893f7be25a413afBootstrap-SCSS 3.4.1 (XStatic packaging standard)Bootstrap style library packaged for setuptools (easy_install) / pip.
This package is intended to be used by **any** project that needs these files.
It intentionally does **not** provide any extra code except some metadata
**nor** has any extra requirements. You MAY use some minimal support code from
the XStatic base package, if you like.
You can find more info about the xstatic packaging way in the package `XStatic`.https://github.com/twbs/bootstrap-sassMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bb57607f-37c1-40f8-9644-3f9bf6760dd2python-XStatic-Bootstrap-SCSS-helpnoarch9123bf6bd05249e587912943fcc9760c8820035228480d191a1062904ea70818Development documents and examples for XStatic-Bootstrap-SCSSBootstrap style library packaged for setuptools (easy_install) / pip.
This package is intended to be used by **any** project that needs these files.
It intentionally does **not** provide any extra code except some metadata
**nor** has any extra requirements. You MAY use some minimal support code from
the XStatic base package, if you like.
You can find more info about the xstatic packaging way in the package `XStatic`.https://github.com/twbs/bootstrap-sassMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bb57607f-37c1-40f8-9644-3f9bf6760dd2python-XStatic-Bootstrap-SCSS-3.4.1.0-1.src.rpmpython-XStatic-DataTablessrc752def479e1d56edca2d3fe7099b13ea99198eba3bbeede5a2379fa7f6cc4d61DataTables 1.10.15 (XStatic packaging standard)The DataTables plugin for jQuery packaged for setuptools (easy_install) / pip.
This package is intended to be used by **any** project that needs these files.
It intentionally does **not** provide any extra code except some metadata
**nor** has any extra requirements. You MAY use some minimal support code from
the XStatic base package, if you like.
You can find more info about the xstatic packaging way in the package `XStatic`.http://www.datatables.net(same as DataTables)openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2211ae11-4a47-4de0-985f-8572bd272b91python-XStatic-DataTables-helpnoarch6881c25d355af12ae985f4bce3363d58fd237c6341b2052e3d51c48641c58becDevelopment documents and examples for XStatic-DataTablesThe DataTables plugin for jQuery packaged for setuptools (easy_install) / pip.
This package is intended to be used by **any** project that needs these files.
It intentionally does **not** provide any extra code except some metadata
**nor** has any extra requirements. You MAY use some minimal support code from
the XStatic base package, if you like.
You can find more info about the xstatic packaging way in the package `XStatic`.http://www.datatables.net(same as DataTables)openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2211ae11-4a47-4de0-985f-8572bd272b91python-XStatic-DataTables-1.10.15.1-1.src.rpmpython-XStatic-Patternflysrca021c3ff004e7eb7519a802ac9a983ad6f8ba94fea646937f7e7800d4849cdb5Patternfly 3.21.0 (XStatic packaging standard)Patternfly style library packaged for setuptools (easy_install) / pip.
This package is intended to be used by **any** project that needs these files.
It intentionally does **not** provide any extra code except some metadata
**nor** has any extra requirements. You MAY use some minimal support code from
the XStatic base package, if you like.
You can find more info about the xstatic packaging way in the package `XStatic`.https://www.patternfly.org/Apache v2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0ffb227d-a611-49d0-aa31-de0cd5375e1fpython-XStatic-Patternfly-helpnoarch39f3bdb6af7bb5f23fdee7e761b29adae5764a72878cc890d84a1dd53de4d03aDevelopment documents and examples for XStatic-PatternflyPatternfly style library packaged for setuptools (easy_install) / pip.
This package is intended to be used by **any** project that needs these files.
It intentionally does **not** provide any extra code except some metadata
**nor** has any extra requirements. You MAY use some minimal support code from
the XStatic base package, if you like.
You can find more info about the xstatic packaging way in the package `XStatic`.https://www.patternfly.org/Apache v2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0ffb227d-a611-49d0-aa31-de0cd5375e1fpython-XStatic-Patternfly-3.21.0.1-1.src.rpmpython-argparse-manpagesrcf43d5334fb38199c798b5ce0a6ed95ba0438f685038bd6504c2de8dff1fe314fBuild manual page from python's ArgumentParser object.Automatically build manpage from argparsehttps://github.com/praiskup/argparse-manpageApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1a19585b-290d-4d93-920b-9c6a1f4fa8fapython-argparse-manpage-helpnoarch5a606e4dd5124caacd6af3e746287f128180c3775e0ce6462775a0959b5a5b3fDevelopment documents and examples for argparse-manpageAutomatically build manpage from argparsehttps://github.com/praiskup/argparse-manpageApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1a19585b-290d-4d93-920b-9c6a1f4fa8fapython-argparse-manpage-4.3-1.src.rpm/usr/share/doc/python-argparse-manpage/examples/argument_groups/bin/test/usr/share/doc/python-argparse-manpage/examples/raw-description/bin/dg/usr/share/doc/python-argparse-manpage/examples/resalloc/bin/resalloc/usr/share/doc/python-argparse-manpage/examples/resalloc/bin/resalloc-maintpython-asttokenssrcd6734bec404b7cd3216f8766122644cbedf0e3a2637953710de9386a7ded17bfModule to annotate Python abstract syntax trees with source code positionsThe asttokens module annotates Python abstract syntax trees (ASTs)
with the positions of tokens and text in the source code that
generated them. This makes it possible for tools that work with
logical AST nodes to find the particular text that resulted in those
nodes, for example for automated refactoring or highlighting.https://github.com/gristlabs/asttokensApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-190a7a62-f7fa-4620-978d-f70fb52fe6fcpython-backoffsrcb2cf18b7d01aca35a812e1c80a91500d03946a3c827d43a485fcc582425128aeFunction decoration for backoff and retryThis module provides function decorators which can be used to wrap a\
function such that it will be retried until some condition is met. It\
is meant to be of use when accessing unreliable resources with the\
potential for intermittent failures i.e. network resources and external\
APIs. Somewhat more generally, it may also be of use for dynamically\
polling resources for externally generated content.https://github.com/litl/backoffMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1089ddd3-e967-4d41-bb78-299c40669ec1python-backoff-helpnoarch5f686bd052bb4d5156956dd294ed74a248b74d5fa36fd3096e876384313b0f28Development documents and examples for backoffThis module provides function decorators which can be used to wrap a\
function such that it will be retried until some condition is met. It\
is meant to be of use when accessing unreliable resources with the\
potential for intermittent failures i.e. network resources and external\
APIs. Somewhat more generally, it may also be of use for dynamically\
polling resources for externally generated content.https://github.com/litl/backoffMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1089ddd3-e967-4d41-bb78-299c40669ec1python-backoff-2.2.1-1.src.rpmpython-blessedsrca451894bb09a1c099c07a438003ab8a95430d5d1e8bf823da19670041044755dEasy, practical library for making terminal apps, by providing an elegant, well-documented interface to Colors, Keyboard input, and screen Positioning capabilities.Blessed is an easy, practical library for making python terminal appshttps://github.com/jquast/blessedMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c34b2f0f-1c52-4ee3-941a-1dd5b742153epython-blessed-helpnoarch0fb996b26074b551e7d9a5e7fa042bdcd9a24da36838676709244d10ab7343f2Development documents and examples for blessedBlessed is an easy, practical library for making python terminal appshttps://github.com/jquast/blessedMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c34b2f0f-1c52-4ee3-941a-1dd5b742153epython-blessed-1.20.0-1.src.rpmpython-cachelibsrc29b71abe8ddede3ce1e72519f67966d23051a305e3ab2c769ae2ea81f9714f59A collection of cache libraries in the same API interface.A collection of cache libraries in the same API interface. Extracted from werkzeug.https://github.com/pallets-eco/cachelibBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-cba69d7f-b0df-442d-a912-c287598c80a6python-cachelib-helpnoarch463680f476649a4322a036b3c399c9f8a64e79d6be7214f7a8eb02ae9f3203e9Development documents and examples for cachelibDevelopment documents and examples for cachelibhttps://github.com/pallets-eco/cachelibBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-cba69d7f-b0df-442d-a912-c287598c80a6python-cachelib-0.9.0-1.src.rpmpython-coprsrc4085ef9324a526013b344e466cfe9087f865d7520abae96f9b98542b0b182b79Python interface for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python interface to access Copr service. Mostly useful
for developers only.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b9a2f1e3-3619-4fe6-8e14-028c385f8d31python-coprsrce8799fcb0a95d568c035ecac26387fe49ddbb7e238e54bc1ec3fedf312684f55Python interface for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python interface to access Copr service. Mostly useful
for developers only.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-dcaab325-04a8-49f7-8dfa-e9905c01131fpython-coprsrc5643b33aa635c813e39d47947f87cc0739bef4c7f3235b28bcb75b2124215ec2Python interface for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python interface to access Copr service. Mostly useful
for developers only.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c98356ca-9eb1-4b62-9358-718c961d5d43python-coprsrcaaf160f0cd3987f47142758ef91106ea710756015773da53e14c56ded610b6b6Python interface for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python interface to access Copr service. Mostly useful
for developers only.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-714aafb2-0ab8-4165-87c4-8ca87dbb7490python-coprsrcc2a87c0d332c6a801411e999cb55203dcce38d23666c10464e1b8ce07966d0e1Python interface for CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python interface to access Copr service. Mostly useful
for developers only.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-4cdf4c03-aab1-4771-ad07-312a880c4196python-copr-commonsrc5bf43514b37a399a72f5eeaef12324b5cf3a77230ce61a4c53361ab8f460f6e9Python code used by CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python code used by other Copr packages. Mostly
useful for developers only.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d9af21be-03f9-468a-bdc7-c951165162dapython-copr-commonsrc7ed0a032727d6ed36545069a511c8c55aeeecfc15a886fc86ff7d34c01226ad8Python code used by CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python code used by other Copr packages. Mostly
useful for developers only.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1451da4a-8d87-4974-99ec-c09fed88cee8python-crudinisrc0786f6bfefeb7aaa3d04704078e5a9422bb2b5563ffde197a7093f19722d102cA utility for manipulating ini filescrudini A utility for manipulating ini fileshttp://github.com/pixelb/crudiniGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-61b09c15-22be-47aa-8356-a904414e16f1python-crudini-helpnoarch467fdb9c11585cde05162e7f2da3f9df8643f8f3fd2d19b36dbadace9fdb9787A utility for manipulating ini filesUsage:
crudini --set [OPTION]... config_file section [param] [value]
or: crudini --get [OPTION]... config_file [section] [param]
or: crudini --del [OPTION]... config_file section [param] [list value]
or: crudini --merge [OPTION]... config_file [section]http://github.com/pixelb/crudiniGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-61b09c15-22be-47aa-8356-a904414e16f1python-crudini-0.9.3-2.src.rpmpython-debtcollectorsrc7b6048c8b5d4b911d91d72938239a7c8ee9daa77487ea0f3bccb249c5aa42dfcA collection of Python deprecation patterns and strategies that help you collect your technical debt in a non-destructive manner.A collection of Python deprecation patterns and strategies that help you collect your technical debt in a non-destructive manner.https://docs.openstack.org/debtcollector/latestApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-4d5d68d3-7dc5-4b0b-b618-fe636254f44epython-debtcollector-helpnoarche328512b226baa0be479d0c90601f639cccc9d7b55e71ab07bc129e910473cd8A collection of Python deprecation patterns and strategies that help you collect your technical debt in a non-destructive manner.A collection of Python deprecation patterns and strategies that help you collect your technical debt in a non-destructive manner.https://docs.openstack.org/debtcollector/latestApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-4d5d68d3-7dc5-4b0b-b618-fe636254f44epython-debtcollector-2.5.0-1.src.rpmpython-email-validatorsrc91f680f972e4c95c642b207d41ec28b4b0f2d282e2d032ba23ba8b5c68667f91A robust email address syntax and deliverability validation library.A robust email address syntax and deliverability validation library for
Python by [Joshua Tauberer](https://joshdata.me).
This library validates that a string is of the form `name@example.com`. This is
the sort of validation you would want for an email-based login form on
a website.
Key features:
* Checks that an email address has the correct syntax --- good for
login forms or other uses related to identifying users.
* Gives friendly error messages when validation fails (appropriate to show
to end users).
* (optionally) Checks deliverability: Does the domain name resolve? And you can override the default DNS resolver.
* Supports internationalized domain names and (optionally)
internationalized local parts, but blocks unsafe characters.
* Normalizes email addresses (super important for internationalized
addresses! see below).
The library is NOT for validation of the To: line in an email message
(e.g. `My Name <my@address.com>`), which
[flanker](https://github.com/mailgun/flanker) is more appropriate for.
And this library does NOT permit obsolete forms of email addresses, so
if you need strict validation against the email specs exactly, use
[pyIsEmail](https://github.com/michaelherold/pyIsEmail).
This library is tested with Python 3.6+ but should work in earlier versions:
[![Build Status](https://app.travis-ci.com/JoshData/python-email-validator.svg?branch=main)](https://app.travis-ci.com/JoshData/python-email-validator)https://github.com/JoshData/python-email-validatorCC0 (copyright waived)openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ade27af5-a995-4283-90c8-6e414d9ba245python-email-validator-helpnoarch4710d32009164f08dfafafc694e68666be7d7beb88b3440274e64c428a5b677aDevelopment documents and examples for email-validatorA robust email address syntax and deliverability validation library for
Python by [Joshua Tauberer](https://joshdata.me).
This library validates that a string is of the form `name@example.com`. This is
the sort of validation you would want for an email-based login form on
a website.
Key features:
* Checks that an email address has the correct syntax --- good for
login forms or other uses related to identifying users.
* Gives friendly error messages when validation fails (appropriate to show
to end users).
* (optionally) Checks deliverability: Does the domain name resolve? And you can override the default DNS resolver.
* Supports internationalized domain names and (optionally)
internationalized local parts, but blocks unsafe characters.
* Normalizes email addresses (super important for internationalized
addresses! see below).
The library is NOT for validation of the To: line in an email message
(e.g. `My Name <my@address.com>`), which
[flanker](https://github.com/mailgun/flanker) is more appropriate for.
And this library does NOT permit obsolete forms of email addresses, so
if you need strict validation against the email specs exactly, use
[pyIsEmail](https://github.com/michaelherold/pyIsEmail).
This library is tested with Python 3.6+ but should work in earlier versions:
[![Build Status](https://app.travis-ci.com/JoshData/python-email-validator.svg?branch=main)](https://app.travis-ci.com/JoshData/python-email-validator)https://github.com/JoshData/python-email-validatorCC0 (copyright waived)openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ade27af5-a995-4283-90c8-6e414d9ba245python-email-validator-1.3.1-1.src.rpmpython-executingsrcd3965460f236755ec7292782e73dbe3c8751c8e80d24542bab7c32705a4255eeGet the currently executing AST node of a frame, and other information
[![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)
This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.
* [Usage](#usage)
* [Getting the AST node](#getting-the-ast-node)
* [Getting the source code of the node](#getting-the-source-code-of-the-node)
* [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
* [The Source class](#the-source-class)
* [Installation](#installation)
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
* [Libraries that use this](#libraries-that-use-this)
```python
import executing
node = executing.Source.executing(frame).node
```
Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).
`node` will always be the same instance for multiple calls with frames at the same point of execution.
If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.
For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:
```python
executing.Source.executing(frame).source.asttokens()
```
or:
```python
executing.Source.for_frame(frame).asttokens()
```
or use one of the convenience methods:
```python
executing.Source.executing(frame).text()
executing.Source.executing(frame).text_range()
```
```python
executing.Source.executing(frame).code_qualname()
```
or:
```python
executing.Source.for_frame(frame).code_qualname(frame.f_code)
```
Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.
pip install executing
If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).
Suppose the frame is executing this line:
```python
self.foo(bar.x)
```
and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?
The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:
```python
(self.foo ** 'longuniqueconstant')(bar.x)
```
and compile it, and the bytecode will be almost the same but there will be two new instructions:
LOAD_CONST 'longuniqueconstant'
BINARY_POWER
and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.
Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:
1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere
In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.
Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.
Currently it works in almost all cases for the following `ast` nodes:
- `Call`, e.g. `self.foo(bar)`
- `Attribute`, e.g. `point.x`
- `Subscript`, e.g. `lst[1]`
- `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
- `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
- `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)
The plan is to extend to more operations in the future.
- **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
- **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
- **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
- **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
- **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.
- **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
- **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
- **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
- **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
- **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
- **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.https://github.com/alexmojaki/executingMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-7b327bb2-5ea6-4634-8121-b04075d1af97python-executingsrc6ce1353110cd9ca899de5302080e30bb0182937cad9ea5e08e9df1fef2e20862Get the currently executing AST node of a frame, and other information
[![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)
This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.
* [Usage](#usage)
* [Getting the AST node](#getting-the-ast-node)
* [Getting the source code of the node](#getting-the-source-code-of-the-node)
* [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
* [The Source class](#the-source-class)
* [Installation](#installation)
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
* [Libraries that use this](#libraries-that-use-this)
```python
import executing
node = executing.Source.executing(frame).node
```
Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).
`node` will always be the same instance for multiple calls with frames at the same point of execution.
If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.
For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:
```python
executing.Source.executing(frame).source.asttokens()
```
or:
```python
executing.Source.for_frame(frame).asttokens()
```
or use one of the convenience methods:
```python
executing.Source.executing(frame).text()
executing.Source.executing(frame).text_range()
```
```python
executing.Source.executing(frame).code_qualname()
```
or:
```python
executing.Source.for_frame(frame).code_qualname(frame.f_code)
```
Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.
pip install executing
If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).
Suppose the frame is executing this line:
```python
self.foo(bar.x)
```
and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?
The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:
```python
(self.foo ** 'longuniqueconstant')(bar.x)
```
and compile it, and the bytecode will be almost the same but there will be two new instructions:
LOAD_CONST 'longuniqueconstant'
BINARY_POWER
and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.
Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:
1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere
In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.
Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.
Currently it works in almost all cases for the following `ast` nodes:
- `Call`, e.g. `self.foo(bar)`
- `Attribute`, e.g. `point.x`
- `Subscript`, e.g. `lst[1]`
- `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
- `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
- `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)
The plan is to extend to more operations in the future.
- **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
- **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
- **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
- **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
- **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.
- **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
- **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
- **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
- **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
- **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
- **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.https://github.com/alexmojaki/executingMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-60bc1c7a-4894-43fe-9b60-9f04d074a251python-executingsrc0ef5b6b619b056850ee49fcd22ee23c8f8ef3e0418ae278d42d3615491dd84adGet the currently executing AST node of a frame, and other information
[![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)
This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.
* [Usage](#usage)
* [Getting the AST node](#getting-the-ast-node)
* [Getting the source code of the node](#getting-the-source-code-of-the-node)
* [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
* [The Source class](#the-source-class)
* [Installation](#installation)
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
* [Libraries that use this](#libraries-that-use-this)
```python
import executing
node = executing.Source.executing(frame).node
```
Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).
`node` will always be the same instance for multiple calls with frames at the same point of execution.
If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.
For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:
```python
executing.Source.executing(frame).source.asttokens()
```
or:
```python
executing.Source.for_frame(frame).asttokens()
```
or use one of the convenience methods:
```python
executing.Source.executing(frame).text()
executing.Source.executing(frame).text_range()
```
```python
executing.Source.executing(frame).code_qualname()
```
or:
```python
executing.Source.for_frame(frame).code_qualname(frame.f_code)
```
Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.
pip install executing
If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).
Suppose the frame is executing this line:
```python
self.foo(bar.x)
```
and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?
The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:
```python
(self.foo ** 'longuniqueconstant')(bar.x)
```
and compile it, and the bytecode will be almost the same but there will be two new instructions:
LOAD_CONST 'longuniqueconstant'
BINARY_POWER
and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.
Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:
1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere
In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.
Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.
Currently it works in almost all cases for the following `ast` nodes:
- `Call`, e.g. `self.foo(bar)`
- `Attribute`, e.g. `point.x`
- `Subscript`, e.g. `lst[1]`
- `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
- `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
- `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)
The plan is to extend to more operations in the future.
- **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
- **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
- **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
- **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
- **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.
- **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
- **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
- **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
- **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
- **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
- **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.https://github.com/alexmojaki/executingMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-751d7e10-5b0f-49e3-9853-f74315600071python-executingsrc22f1201d5055bee53d57e97f22cc24ea7cbddc7520862ede50d8bbea913fbbbaGet the currently executing AST node of a frame, and other information
[![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)
This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.
* [Usage](#usage)
* [Getting the AST node](#getting-the-ast-node)
* [Getting the source code of the node](#getting-the-source-code-of-the-node)
* [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
* [The Source class](#the-source-class)
* [Installation](#installation)
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
* [Libraries that use this](#libraries-that-use-this)
```python
import executing
node = executing.Source.executing(frame).node
```
Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).
`node` will always be the same instance for multiple calls with frames at the same point of execution.
If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.
For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:
```python
executing.Source.executing(frame).source.asttokens()
```
or:
```python
executing.Source.for_frame(frame).asttokens()
```
or use one of the convenience methods:
```python
executing.Source.executing(frame).text()
executing.Source.executing(frame).text_range()
```
```python
executing.Source.executing(frame).code_qualname()
```
or:
```python
executing.Source.for_frame(frame).code_qualname(frame.f_code)
```
Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.
pip install executing
If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).
Suppose the frame is executing this line:
```python
self.foo(bar.x)
```
and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?
The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:
```python
(self.foo ** 'longuniqueconstant')(bar.x)
```
and compile it, and the bytecode will be almost the same but there will be two new instructions:
LOAD_CONST 'longuniqueconstant'
BINARY_POWER
and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.
Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:
1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere
In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.
Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.
Currently it works in almost all cases for the following `ast` nodes:
- `Call`, e.g. `self.foo(bar)`
- `Attribute`, e.g. `point.x`
- `Subscript`, e.g. `lst[1]`
- `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
- `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
- `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)
The plan is to extend to more operations in the future.
- **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
- **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
- **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
- **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
- **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.
- **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
- **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
- **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
- **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
- **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
- **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.https://github.com/alexmojaki/executingMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-50347f2f-5850-4e84-8da0-542753079d32python-executingsrcc15026040cd10fa80becb6019cbdd1c6a058716113b87627aa4f85c9e5b9c49fGet the currently executing AST node of a frame, and other information
[![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)
This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.
* [Usage](#usage)
* [Getting the AST node](#getting-the-ast-node)
* [Getting the source code of the node](#getting-the-source-code-of-the-node)
* [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
* [The Source class](#the-source-class)
* [Installation](#installation)
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
* [Libraries that use this](#libraries-that-use-this)
```python
import executing
node = executing.Source.executing(frame).node
```
Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).
`node` will always be the same instance for multiple calls with frames at the same point of execution.
If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.
For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:
```python
executing.Source.executing(frame).source.asttokens()
```
or:
```python
executing.Source.for_frame(frame).asttokens()
```
or use one of the convenience methods:
```python
executing.Source.executing(frame).text()
executing.Source.executing(frame).text_range()
```
```python
executing.Source.executing(frame).code_qualname()
```
or:
```python
executing.Source.for_frame(frame).code_qualname(frame.f_code)
```
Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.
pip install executing
If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).
Suppose the frame is executing this line:
```python
self.foo(bar.x)
```
and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?
The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:
```python
(self.foo ** 'longuniqueconstant')(bar.x)
```
and compile it, and the bytecode will be almost the same but there will be two new instructions:
LOAD_CONST 'longuniqueconstant'
BINARY_POWER
and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.
Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:
1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere
In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.
Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.
Currently it works in almost all cases for the following `ast` nodes:
- `Call`, e.g. `self.foo(bar)`
- `Attribute`, e.g. `point.x`
- `Subscript`, e.g. `lst[1]`
- `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
- `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
- `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)
The plan is to extend to more operations in the future.
- **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
- **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
- **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
- **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
- **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.
- **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
- **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
- **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
- **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
- **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
- **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.https://github.com/alexmojaki/executingMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ade4eb6d-0a73-4a96-a819-cabb0769a54epython-executingsrc8a31da73890ce7dba6c2bd0476556617402014b2fd2621cb817d95dd6e4620aeGet the currently executing AST node of a frame, and other information
[![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)
This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.
* [Usage](#usage)
* [Getting the AST node](#getting-the-ast-node)
* [Getting the source code of the node](#getting-the-source-code-of-the-node)
* [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
* [The Source class](#the-source-class)
* [Installation](#installation)
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
* [Libraries that use this](#libraries-that-use-this)
```python
import executing
node = executing.Source.executing(frame).node
```
Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).
`node` will always be the same instance for multiple calls with frames at the same point of execution.
If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.
For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:
```python
executing.Source.executing(frame).source.asttokens()
```
or:
```python
executing.Source.for_frame(frame).asttokens()
```
or use one of the convenience methods:
```python
executing.Source.executing(frame).text()
executing.Source.executing(frame).text_range()
```
```python
executing.Source.executing(frame).code_qualname()
```
or:
```python
executing.Source.for_frame(frame).code_qualname(frame.f_code)
```
Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.
pip install executing
If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).
Suppose the frame is executing this line:
```python
self.foo(bar.x)
```
and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?
The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:
```python
(self.foo ** 'longuniqueconstant')(bar.x)
```
and compile it, and the bytecode will be almost the same but there will be two new instructions:
LOAD_CONST 'longuniqueconstant'
BINARY_POWER
and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.
Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:
1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere
In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.
Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.
Currently it works in almost all cases for the following `ast` nodes:
- `Call`, e.g. `self.foo(bar)`
- `Attribute`, e.g. `point.x`
- `Subscript`, e.g. `lst[1]`
- `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
- `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
- `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)
The plan is to extend to more operations in the future.
- **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
- **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
- **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
- **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
- **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.
- **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
- **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
- **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
- **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
- **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
- **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.https://github.com/alexmojaki/executingMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5be11934-1be7-4b03-920f-a310a3fca71fpython-executing-helpnoarchab7baa49dbf14e109ad4d6903a97cae541413bbe0d6ab25847194ffb191c9276Development documents and examples for executing
[![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)
This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.
* [Usage](#usage)
* [Getting the AST node](#getting-the-ast-node)
* [Getting the source code of the node](#getting-the-source-code-of-the-node)
* [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
* [The Source class](#the-source-class)
* [Installation](#installation)
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
* [Libraries that use this](#libraries-that-use-this)
```python
import executing
node = executing.Source.executing(frame).node
```
Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).
`node` will always be the same instance for multiple calls with frames at the same point of execution.
If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.
For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:
```python
executing.Source.executing(frame).source.asttokens()
```
or:
```python
executing.Source.for_frame(frame).asttokens()
```
or use one of the convenience methods:
```python
executing.Source.executing(frame).text()
executing.Source.executing(frame).text_range()
```
```python
executing.Source.executing(frame).code_qualname()
```
or:
```python
executing.Source.for_frame(frame).code_qualname(frame.f_code)
```
Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.
pip install executing
If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).
Suppose the frame is executing this line:
```python
self.foo(bar.x)
```
and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?
The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:
```python
(self.foo ** 'longuniqueconstant')(bar.x)
```
and compile it, and the bytecode will be almost the same but there will be two new instructions:
LOAD_CONST 'longuniqueconstant'
BINARY_POWER
and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.
Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:
1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere
In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.
Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.
Currently it works in almost all cases for the following `ast` nodes:
- `Call`, e.g. `self.foo(bar)`
- `Attribute`, e.g. `point.x`
- `Subscript`, e.g. `lst[1]`
- `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
- `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
- `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)
The plan is to extend to more operations in the future.
- **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
- **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
- **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
- **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
- **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.
- **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
- **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
- **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
- **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
- **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
- **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.https://github.com/alexmojaki/executingMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-7b327bb2-5ea6-4634-8121-b04075d1af97python-executing-1.2.0-1.src.rpmpython-executing-helpnoarch4c20b633b8c48fec3d9e634d5edffb6fa7393da819c289c02643a0b4150c17cbDevelopment documents and examples for executing
[![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)
This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.
* [Usage](#usage)
* [Getting the AST node](#getting-the-ast-node)
* [Getting the source code of the node](#getting-the-source-code-of-the-node)
* [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
* [The Source class](#the-source-class)
* [Installation](#installation)
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
* [Libraries that use this](#libraries-that-use-this)
```python
import executing
node = executing.Source.executing(frame).node
```
Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).
`node` will always be the same instance for multiple calls with frames at the same point of execution.
If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.
For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:
```python
executing.Source.executing(frame).source.asttokens()
```
or:
```python
executing.Source.for_frame(frame).asttokens()
```
or use one of the convenience methods:
```python
executing.Source.executing(frame).text()
executing.Source.executing(frame).text_range()
```
```python
executing.Source.executing(frame).code_qualname()
```
or:
```python
executing.Source.for_frame(frame).code_qualname(frame.f_code)
```
Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.
pip install executing
If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).
Suppose the frame is executing this line:
```python
self.foo(bar.x)
```
and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?
The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:
```python
(self.foo ** 'longuniqueconstant')(bar.x)
```
and compile it, and the bytecode will be almost the same but there will be two new instructions:
LOAD_CONST 'longuniqueconstant'
BINARY_POWER
and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.
Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:
1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere
In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.
Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.
Currently it works in almost all cases for the following `ast` nodes:
- `Call`, e.g. `self.foo(bar)`
- `Attribute`, e.g. `point.x`
- `Subscript`, e.g. `lst[1]`
- `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
- `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
- `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)
The plan is to extend to more operations in the future.
- **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
- **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
- **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
- **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
- **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.
- **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
- **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
- **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
- **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
- **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
- **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.https://github.com/alexmojaki/executingMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5be11934-1be7-4b03-920f-a310a3fca71fpython-executing-1.2.0-1.src.rpmpython-flask-whoosheesrc58d4d9c5dccaf9b3d6e0832bfd1da7d48c64829f1fba1333906a98715b673523Flask-SQLAlchemy - Whoosh IntegrationCustomizable Flask - SQLAlchemy - Whoosh integrationhttps://github.com/bkabrda/flask-whoosheeBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-18ad380e-e44e-4345-937f-780491a9623dpython-flask-whooshee-helpnoarch58ac6e3ccb17fb7969663bf1a7bf1503e96d362525a320ac7f127352e6cdd7e3Development documents and examples for flask-whoosheeCustomizable Flask - SQLAlchemy - Whoosh integrationhttps://github.com/bkabrda/flask-whoosheeBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-18ad380e-e44e-4345-937f-780491a9623dpython-flask-whooshee-0.8.2-1.src.rpmpython-html2textsrc5e9eedb48993592ee18ecaa51844b55b354864029bea63388b9527bb79b7850dTurn HTML into equivalent Markdown-structured text.Convert HTML to Markdown-formatted text.https://github.com/Alir3z4/html2text/GPL-3.0-onlyopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-97f67640-1dfa-4034-8755-117a7ee6ce59python-html2text-helpnoarch013d49a29cc7db258010863ea5323057272ad0deb216b24eea08fcdda437b69cDevelopment documents and examples for html2textConvert HTML to Markdown-formatted text.https://github.com/Alir3z4/html2text/GPL-3.0-onlyopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-97f67640-1dfa-4034-8755-117a7ee6ce59python-html2text-2020.1.16-2.src.rpmpython-html5-parsersrc61f8753c81b3d0636b90050e7ce664bdfac60a4408e58bafa7a37e62286cf7faA fast, standards compliant, C based, HTML 5 parser for pythonA fast, standards compliant, C based, HTML 5 parser for pythonhttps://pypi.python.org/pypi/html5-parserASL 2.0 and MITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-17a66066-ef55-4a6e-9c9b-7fdb334c4d86python-html5-parsersrc791821227959ea935dd114ff63e41b40a1e4963cf4afc1fcf0b7fb7e5f46c015A fast, standards compliant, C based, HTML 5 parser for pythonA fast, standards compliant, C based, HTML 5 parser for pythonhttps://pypi.python.org/pypi/html5-parserASL 2.0 and MITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e2ade63d-115f-4a23-bb61-702ae17aa694python-html5-parsersrc3892b2b6dbd7514591ff09c52a6db3e0e8d49c021684199466e35376807b1c69Fast C based HTML 5 parsing for pythonhttps://html5-parser.readthedocs.ioApache 2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-81e8daf0-6012-4b35-87a9-96641cc33b5epython-html5-parser-debuginfox86_64537a582b095537a78ebd5cb6c91ed2b0da0535293e0e1b1551f669a1fe034558Debug information for package python-html5-parserThis package provides debug information for package python-html5-parser.
Debug information is useful when developing applications that use this
package or when debugging this package.https://pypi.python.org/pypi/html5-parserASL 2.0 and MITopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-17a66066-ef55-4a6e-9c9b-7fdb334c4d86python-html5-parser-0.4.10-1.src.rpmpython-html5-parser-debuginfox86_64c5382794f0e0ad7e9265fd40fe0c58d52a919c2e34994ee931d5c7366781b4f6Debug information for package python-html5-parserThis package provides debug information for package python-html5-parser.
Debug information is useful when developing applications that use this
package or when debugging this package.https://pypi.python.org/pypi/html5-parserASL 2.0 and MITopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-e2ade63d-115f-4a23-bb61-702ae17aa694python-html5-parser-0.4.10-1.src.rpmpython-html5-parser-debugsourcex86_64b44008a3edb39a57dbd6c741721382906c89da0bec1edc472b80eaa4f429cc9dDebug sources for package python-html5-parserThis package provides debug sources for package python-html5-parser.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://pypi.python.org/pypi/html5-parserASL 2.0 and MITopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-17a66066-ef55-4a6e-9c9b-7fdb334c4d86python-html5-parser-0.4.10-1.src.rpmpython-html5-parser-debugsourcex86_6400d473ee301b4858e12bcb3ffa506c86943142f8092e418cb4f41a3fc9f4c5ecDebug sources for package python-html5-parserThis package provides debug sources for package python-html5-parser.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://pypi.python.org/pypi/html5-parserASL 2.0 and MITopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-e2ade63d-115f-4a23-bb61-702ae17aa694python-html5-parser-0.4.10-1.src.rpmpython-ipdbsrca158eb83a8615598c0874dd6077917c4feca0083c335494b2ff5dcd0de5a263eIPython-enabled pdbhttps://github.com/gotcha/ipdbBSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ae4ac1f8-4f54-4306-bd3d-5a7117bc0f25python-ipdb-helpnoarch03ecea276098b31f39e47c698421937617a420b93f722c6804e773d5d415e7b7Development documents and examples for ipdbhttps://github.com/gotcha/ipdbBSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ae4ac1f8-4f54-4306-bd3d-5a7117bc0f25python-ipdb-0.13.13-1.src.rpmpython-ipythonsrc2c5fd6edf386c64c5883a8156b03b1cfacb3b9e0480d1f197e3f9d033d43dd30IPython: Productive Interactive ComputingIPython provides a rich toolkit to help you make the most out of using Python
interactively. Its main components are:
* A powerful interactive Python shell
* A `Jupyter <https://jupyter.org/>`_ kernel to work with Python code in Jupyter
notebooks and other interactive frontends.
The enhanced interactive Python shells have the following main features:
* Comprehensive object introspection.
* Input history, persistent across sessions.
* Caching of output results during a session with automatically generated
references.
* Extensible tab completion, with support by default for completion of python
variables and keywords, filenames and function keywords.
* Extensible system of 'magic' commands for controlling the environment and
performing many tasks related either to IPython or the operating system.
* A rich configuration system with easy switching between different setups
(simpler than changing $PYTHONSTARTUP environment variables every time).
* Session logging and reloading.
* Extensible syntax processing for special purpose situations.
* Access to the system shell with user-extensible alias system.
* Easily embeddable in other Python programs and GUIs.
* Integrated access to the pdb debugger and the Python profiler.
The latest development version is always available from IPython's `GitHub
site <http://github.com/ipython>`_.https://ipython.orgBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-8a6d9528-c43b-40d0-8e33-220e5ce7b3c4python-ipythonsrca8a662b04e8c4ee103cc4ccf6422b0d759451168dff761ea60cb1ab1c962939aIPython: Productive Interactive ComputingIPython provides a rich toolkit to help you make the most out of using Python
interactively. Its main components are:
* A powerful interactive Python shell
* A `Jupyter <https://jupyter.org/>`_ kernel to work with Python code in Jupyter
notebooks and other interactive frontends.
The enhanced interactive Python shells have the following main features:
* Comprehensive object introspection.
* Input history, persistent across sessions.
* Caching of output results during a session with automatically generated
references.
* Extensible tab completion, with support by default for completion of python
variables and keywords, filenames and function keywords.
* Extensible system of 'magic' commands for controlling the environment and
performing many tasks related either to IPython or the operating system.
* A rich configuration system with easy switching between different setups
(simpler than changing $PYTHONSTARTUP environment variables every time).
* Session logging and reloading.
* Extensible syntax processing for special purpose situations.
* Access to the system shell with user-extensible alias system.
* Easily embeddable in other Python programs and GUIs.
* Integrated access to the pdb debugger and the Python profiler.
The latest development version is always available from IPython's `GitHub
site <http://github.com/ipython>`_.https://ipython.orgBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3b850d66-9d75-461a-9d6a-08feeef205aepython-ipython-helpnoarchdcf625d9f009095002ed5768831f71e169c6adf36815d77a1d5a692325b4e8b1Development documents and examples for ipythonIPython provides a rich toolkit to help you make the most out of using Python
interactively. Its main components are:
* A powerful interactive Python shell
* A `Jupyter <https://jupyter.org/>`_ kernel to work with Python code in Jupyter
notebooks and other interactive frontends.
The enhanced interactive Python shells have the following main features:
* Comprehensive object introspection.
* Input history, persistent across sessions.
* Caching of output results during a session with automatically generated
references.
* Extensible tab completion, with support by default for completion of python
variables and keywords, filenames and function keywords.
* Extensible system of 'magic' commands for controlling the environment and
performing many tasks related either to IPython or the operating system.
* A rich configuration system with easy switching between different setups
(simpler than changing $PYTHONSTARTUP environment variables every time).
* Session logging and reloading.
* Extensible syntax processing for special purpose situations.
* Access to the system shell with user-extensible alias system.
* Easily embeddable in other Python programs and GUIs.
* Integrated access to the pdb debugger and the Python profiler.
The latest development version is always available from IPython's `GitHub
site <http://github.com/ipython>`_.https://ipython.orgBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-8a6d9528-c43b-40d0-8e33-220e5ce7b3c4python-ipython-8.14.0-1.src.rpmpython-ipython-helpnoarche7024e7697fee7c65a3a5642b8fdd7611ab4a5062069d52515190fb4d5487e36Development documents and examples for ipythonIPython provides a rich toolkit to help you make the most out of using Python
interactively. Its main components are:
* A powerful interactive Python shell
* A `Jupyter <https://jupyter.org/>`_ kernel to work with Python code in Jupyter
notebooks and other interactive frontends.
The enhanced interactive Python shells have the following main features:
* Comprehensive object introspection.
* Input history, persistent across sessions.
* Caching of output results during a session with automatically generated
references.
* Extensible tab completion, with support by default for completion of python
variables and keywords, filenames and function keywords.
* Extensible system of 'magic' commands for controlling the environment and
performing many tasks related either to IPython or the operating system.
* A rich configuration system with easy switching between different setups
(simpler than changing $PYTHONSTARTUP environment variables every time).
* Session logging and reloading.
* Extensible syntax processing for special purpose situations.
* Access to the system shell with user-extensible alias system.
* Easily embeddable in other Python programs and GUIs.
* Integrated access to the pdb debugger and the Python profiler.
The latest development version is always available from IPython's `GitHub
site <http://github.com/ipython>`_.https://ipython.orgBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3b850d66-9d75-461a-9d6a-08feeef205aepython-ipython-8.14.0-1.src.rpmpython-jedisrc2f6897421fffb4038418c016dc69d367adb82060679604d9f9122f79026de87fA static analysis tool for Python that is typically used in IDEs/editors pluginsJedi is a static analysis tool for Python that is typically used in IDEs/editors plugins.
It has a focus on autocompletion and goto functionality.
Other features include refactoring, code search and finding references.https://github.com/davidhalter/jediMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2b0db9b7-2274-4598-b032-8651c56348acpython-jedisrccd4b8b484fd195b7c093b65973626654ac15ee44da98b4b82138d0418b120485A static analysis tool for Python that is typically used in IDEs/editors pluginsJedi is a static analysis tool for Python that is typically used in IDEs/editors plugins.
It has a focus on autocompletion and goto functionality.
Other features include refactoring, code search and finding references.https://github.com/davidhalter/jediMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b3cdd0a3-db90-4694-b06d-a76e2096b9c0python-jedi-helpnoarch38c2c071ad41eccd6d2f032ce492f8745b8a8a11d32f8418a2b4bffb38885bdbDevelopment documents and examples for jediJedi is a static analysis tool for Python that is typically used in IDEs/editors plugins.
It has a focus on autocompletion and goto functionality.
Other features include refactoring, code search and finding references.https://github.com/davidhalter/jediMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2b0db9b7-2274-4598-b032-8651c56348acpython-jedi-0.18.1-1.src.rpmpython-jedi-helpnoarchd7bf0b469dd6f3c6a0240eb6f02c2828c2d5a871f3f2977d03e9d85e64449d5bDevelopment documents and examples for jediJedi is a static analysis tool for Python that is typically used in IDEs/editors plugins.
It has a focus on autocompletion and goto functionality.
Other features include refactoring, code search and finding references.https://github.com/davidhalter/jediMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b3cdd0a3-db90-4694-b06d-a76e2096b9c0python-jedi-0.18.1-1.src.rpmpython-keystoneauth1src9a822c1d225fb83b513b4c4c76847ae3c46433a2aa47fb942ab51875b916dc82Authentication Library for OpenStack IdentityKeystoneauth provides a standard way to do authentication and service requests \
within the OpenStack ecosystem. It is designed for use in conjunction with \
the existing OpenStack clients and for simplifying the process of writing \
new clients.https://docs.openstack.org/keystoneauth/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-dacb1bad-011f-4e7c-9671-862014732eabpython-littleutilssrc3ab5911fb362f04c3587f674f9dd3c30de82d95ebe41ff6979ccafb1a204caf8Small collection of Python utilitiesSmall collection of Python utilities.https://pypi.org/pypi/littleutilsMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e0b48d8b-3670-46af-ae10-af1a3550bbadpython-littleutilssrc81e833a886279ff585f749834a0716bf9a5db1c5e7cb7a85ec51b18c456ce503Small collection of Python utilitiesSmall collection of Python utilities.https://pypi.org/pypi/littleutilsMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-995a0d73-034c-40fd-a588-8dbe7476c7a7python-matplotlib-inlinesrc2088149f1c70d24f72019b0fbc99b59199fbf3a1c81f81a308522339195ff86bInline Matplotlib backend for Jupyter
This package provides support for matplotlib to display figures directly inline in the Jupyter notebook and related clients, as shown below.
With conda:
```bash
conda install -c conda-forge matplotlib-inline
```
With pip:
```bash
pip install matplotlib-inline
```
Note that in current versions of JupyterLab and Jupyter Notebook, the explicit use of the `%matplotlib inline` directive is not needed anymore, though other third-party clients may still require it.
This will produce a figure immediately below:
```python
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp');
```
Licensed under the terms of the BSD 3-Clause License, by the IPython Development Team (see `LICENSE` file).
BSD 3-Clause License
Copyright (c) 2019-2022, IPython Development Team.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.https://github.com/ipython/matplotlib-inlineBSD 3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f722e95e-5f19-4b49-b3aa-75043886250fpython-matplotlib-inline-helpnoarchf22c6f49d3e1c4709c4f5d543fdb8adae0e02b4ea55885a63117de52f92e961aDevelopment documents and examples for matplotlib-inline
This package provides support for matplotlib to display figures directly inline in the Jupyter notebook and related clients, as shown below.
With conda:
```bash
conda install -c conda-forge matplotlib-inline
```
With pip:
```bash
pip install matplotlib-inline
```
Note that in current versions of JupyterLab and Jupyter Notebook, the explicit use of the `%matplotlib inline` directive is not needed anymore, though other third-party clients may still require it.
This will produce a figure immediately below:
```python
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp');
```
Licensed under the terms of the BSD 3-Clause License, by the IPython Development Team (see `LICENSE` file).
BSD 3-Clause License
Copyright (c) 2019-2022, IPython Development Team.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.https://github.com/ipython/matplotlib-inlineBSD 3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f722e95e-5f19-4b49-b3aa-75043886250fpython-matplotlib-inline-0.1.6-1.src.rpmpython-novaclientsrc327a4c89df986edf2c20f4c673878d4e8b2e274dc928b9f5017bceb340ff455fClient library for OpenStack Compute APIThis is a client for the OpenStack Nova API. There's a Python API (the
novaclient module), and a command-line script (nova). Each implements 100% of
the OpenStack Nova API.https://docs.openstack.org/python-novaclient/latestApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d3d653b9-73cc-46ca-a605-4fa619838b93python-openid-teamssrc690f4bb004a718167621e7508add9049b3e6da4784f134acad2e791d095c5532This is an implementation of the OpenID teams extension for python-openidUNKNOWNhttp://www.github.com/puiterwijk/python-openid-teams/BSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-61dbe87a-e7a7-43b4-ba46-63040509c770python-openid-teamssrc23f9b5bffb0e0119b244b5573f591723a1bfc4b8cec158411ef9619954ce68dfThis is an implementation of the OpenID teams extension for python-openidUNKNOWNhttp://www.github.com/puiterwijk/python-openid-teams/BSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9e090f89-0247-4d1a-8d75-c2278b715dd3python-openid-teams-helpnoarch6a0debf3260f26bd58a80e65bb7e985bb600553e8bcc812de58200998d3a25baDevelopment documents and examples for python-openid-teamsUNKNOWNhttp://www.github.com/puiterwijk/python-openid-teams/BSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-61dbe87a-e7a7-43b4-ba46-63040509c770python-openid-teams-1.1-2.src.rpmpython-openid-teams-helpnoarchb2c809314de11ba4df17daf49f15ae13bcea7816923868e94e4fae78bd614aa1Development documents and examples for python-openid-teamsUNKNOWNhttp://www.github.com/puiterwijk/python-openid-teams/BSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9e090f89-0247-4d1a-8d75-c2278b715dd3python-openid-teams-1.1-2.src.rpmpython-openidc-clientsrcf5349f9300f044afb805c831fdbebda259547a282b08eabd9b9e72f3f6f5a07ePython OpenID Connect client with token caching and managementPython OpenID Connect client with token caching and management.MITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f3f390ee-6fe4-426e-a181-b4409f719372python-openidc-clientsrc485d9fb4099b9a2c21caafbb042b1612f9b0e3117cb702be14db6cebb99cd7b8Python OpenID Connect client with token caching and managementPython OpenID Connect client with token caching and management.MITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-417c2a80-ef5f-4edd-863b-d3040f7a4575python-os-service-typessrcf22bb6ff109d9622bcb33c4478a00397afed3f19ee9d325ca468d8b296baea8bPython library for consuming OpenStack sevice-types-authority dataPython library for consuming OpenStack sevice-types-authority datahttps://pypi.org/project/os-service-types/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a5f6aa8d-7696-4065-bcc3-8f92d36579e8python-os-service-types-helpnoarch637114f5c2189d55a0e5b540e88a5670fa4316daf5b357d077d87b47e3d27537Development documents and examples for os-service-typeshttps://pypi.org/project/os-service-types/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a5f6aa8d-7696-4065-bcc3-8f92d36579e8python-os-service-types-1.7.0-2.src.rpmpython-oslo-concurrencysrc958c2b3503eabbbf7d0d59c5663dc9edeaa43c398e9244a1ee92a234cc630cadOslo Concurrency libraryOpenStack library for all concurrency-related codehttps://docs.openstack.org/oslo.concurrency/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-6d6e1390-3217-4e8b-82cb-0c57f99f5564python-oslo-concurrencysrcc9bbed874c75d108ad5dead002789ea48e1a604690d137b33741b96354c75763Oslo Concurrency libraryOpenStack library for all concurrency-related codehttps://docs.openstack.org/oslo.concurrency/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-4e8fb96d-0e83-412f-b90b-1c1e93b106a6python-oslo-concurrency-helpnoarch743ea3e13f7d314ed157f5f6f490339f17348e1e6ed516a8ac9324ddb8f42560Oslo Concurrency libraryOpenStack library for all concurrency-related codehttps://docs.openstack.org/oslo.concurrency/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-6d6e1390-3217-4e8b-82cb-0c57f99f5564python-oslo-concurrency-4.5.0-1.src.rpmpython-oslo-configsrca48f01d6bbcce9c9c7e285a132fe34ce109915ba79ea1888ef98c409c0d97b44Oslo Configuration APIThe Oslo configuration API supports parsing command line arguments and .ini style configuration files.https://docs.openstack.org/oslo.config/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b40fadf4-4576-4235-b5e9-fbf3af4a8ae6python-oslo-configsrc8037fcb48a2f2ec1637ad8174f7836da96df627ffaa7c880491989fd4bdcef81Oslo Configuration APIThe Oslo configuration API supports parsing command line arguments and .ini style configuration files.https://docs.openstack.org/oslo.config/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-cf67d65b-0d6a-4cfe-beb3-c003d20bc721python-oslo-config-helpnoarch57e2c096a0805c7e5a4a93a1174fb731794a275f085eba32d39b325695751564Oslo Configuration APIThe Oslo configuration API supports parsing command line arguments and .ini style configuration files.https://docs.openstack.org/oslo.config/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b40fadf4-4576-4235-b5e9-fbf3af4a8ae6python-oslo-config-9.0.0-1.src.rpmpython-oslo-config-helpnoarch26c227379bcbab84c061f03f1a5a9293c27a5a91e898505c50101f1aa22d8568Oslo Configuration APIThe Oslo configuration API supports parsing command line arguments and .ini style configuration files.https://docs.openstack.org/oslo.config/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-cf67d65b-0d6a-4cfe-beb3-c003d20bc721python-oslo-config-9.1.0-1.src.rpmpython-oslo-i18nsrca540b4e71f9baf0fcb292df16bf33b4ccb469df634c5c96b10734ce640b3cab4Oslo i18n libraryInternationalization and translation libraryhttps://docs.openstack.org/oslo.i18n/latestApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3a215e0b-61e9-409b-af79-c4304827e921python-oslo-i18nsrc9966e48cef6543d9c5696f3df629e01475b4c2c29e98a43d9e23f83aea0f20d1Oslo i18n libraryInternationalization and translation libraryhttps://docs.openstack.org/oslo.i18n/latestApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-85a9621a-c7f4-4d70-8b45-66691feb532fpython-oslo-i18n-helpnoarch88aa387405085cc9d063fe788cfa9bfb621c86e165f26ecd218f42f1ce1c15e2Oslo i18n libraryInternationalization and translation libraryhttps://docs.openstack.org/oslo.i18n/latestApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3a215e0b-61e9-409b-af79-c4304827e921python-oslo-i18n-5.1.0-1.src.rpmpython-oslo-i18n-helpnoarchcc37e2f36e96d54dfe6dcf79c39d0cacad086e4e20d4324b85150549f6bd365dOslo i18n libraryInternationalization and translation libraryhttps://docs.openstack.org/oslo.i18n/latestApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-85a9621a-c7f4-4d70-8b45-66691feb532fpython-oslo-i18n-5.1.0-1.src.rpmpython-oslo-serializationsrcac44f2cf79ccf0d5daf0334964d2df071c0441fb4fb4aad4bd559463c31ba3ddOslo Serialization libraryThe oslo.serialization library provides support for representing objects in
transmittable and storable formats, such as Base64, JSON and MessagePack.https://docs.openstack.org/oslo.serialization/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d8cbaca8-13e6-4fe0-8de4-38338d7ac8f5python-oslo-serializationsrc44dc7fdb185b376bcc8ed78514afa88e24242d9bb7cc9780350cfa3e54f60e0eOslo Serialization libraryThe oslo.serialization library provides support for representing objects in
transmittable and storable formats, such as Base64, JSON and MessagePack.https://docs.openstack.org/oslo.serialization/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2d9c7c66-efee-411c-8fe5-34f9b831511apython-oslo-serialization-helpnoarche566852910c9e60fe719449e2bf2935c3bf9ee052eca1f68adc7fc6f9049f9faOslo Serialization libraryThe oslo.serialization library provides support for representing objects in
transmittable and storable formats, such as Base64, JSON and MessagePack.https://docs.openstack.org/oslo.serialization/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d8cbaca8-13e6-4fe0-8de4-38338d7ac8f5python-oslo-serialization-4.3.0-1.src.rpmpython-oslo-utilssrc44e4a05b8082da84ddf3eb65e01d0b5a91db957b3474b7925b170190ed07b52dOslo Utility libraryThe oslo.utils library provides support for common utility type functions,
such as encoding, exception handling, string manipulation, and time handling.https://docs.openstack.org/oslo.utils/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-751aca01-6356-40ea-a504-17cb9ad5cec4python-oslo-utilssrc2bca6e1942a321aef8d7903232f23652eaab93a10aac7fd7a8f87d8d9a4b638aOslo Utility libraryThe oslo.utils library provides support for common utility type functions,
such as encoding, exception handling, string manipulation, and time handling.https://docs.openstack.org/oslo.utils/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-644b051f-ac99-4b66-a5d5-0b91767de35apython-oslo-utils-helpnoarch81dc00dee93d66e2669da1c69818c27559e3d2361baa1232d1eb3ba1fb755fc7Oslo Utility libraryThe oslo.utils library provides support for common utility type functions,
such as encoding, exception handling, string manipulation, and time handling.https://docs.openstack.org/oslo.utils/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-644b051f-ac99-4b66-a5d5-0b91767de35apython-oslo-utils-4.12.3-1.src.rpmpython-parsosrc60c8b3061658b53c6f23ef4fb2f9e5a11733b2068154163e020f7c324b99007cA Python ParserParso is a Python parser that supports error recovery and round-trip parsing
for different Python versions. Parso consists of a small API to parse Python
and analyse the syntax tree.https://github.com/davidhalter/parsoMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bd897c51-3491-463f-a3ce-75942e9df15bpython-parsosrcdaf2e92dc803509a3462035d465831a365af32b76f3118942b0dfc0fdebe68a1A Python ParserParso is a Python parser that supports error recovery and round-trip parsing
for different Python versions. Parso consists of a small API to parse Python
and analyse the syntax tree.https://github.com/davidhalter/parsoMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9cc05245-60c9-4336-8732-08e0f59d08e0python-parso-helpnoarch4ea9f27e89c16111f47659a03bbf43f755082aeb2d3ea3f79f1032b55e5c7595Development documents and examples for parsoParso is a Python parser that supports error recovery and round-trip parsing
for different Python versions. Parso consists of a small API to parse Python
and analyse the syntax tree.https://github.com/davidhalter/parsoMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bd897c51-3491-463f-a3ce-75942e9df15bpython-parso-0.8.3-1.src.rpmpython-parso-helpnoarchf199aca1910d0ef29592ec2abc5a8cac9d7395bdd1535f5464b9ec52abfecc4bDevelopment documents and examples for parsoParso is a Python parser that supports error recovery and round-trip parsing
for different Python versions. Parso consists of a small API to parse Python
and analyse the syntax tree.https://github.com/davidhalter/parsoMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9cc05245-60c9-4336-8732-08e0f59d08e0python-parso-0.8.3-1.src.rpmpython-picklesharesrce7ccaa15a3b92fddf0f55ff4040b6d52794be5a117400fd830bf394fa87fa6c8Tiny 'shelve'-like database with concurrency supportPickleShare - a small 'shelve' like datastore with concurrency support
Like shelve, a PickleShareDB object acts like a normal dictionary. Unlike shelve,
many processes can access the database simultaneously. Changing a value in
database is immediately visible to other processes accessing the same database.
Concurrency is possible because the values are stored in separate files. Hence
the "database" is a directory where *all* files are governed by PickleShare.
Example usage::
from pickleshare import *
db = PickleShareDB('~/testpickleshare')
db.clear()
print("Should be empty:",db.items())
db['hello'] = 15
db['aku ankka'] = [1,2,313]
db['paths/are/ok/key'] = [1,(5,46)]
print(db.keys())
This module is certainly not ZODB, but can be used for low-load
(non-mission-critical) situations where tiny code size trumps the
advanced features of a "real" object database.
Installation guide: pip install picklesharehttps://github.com/pickleshare/pickleshareMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5e7cc4dd-b259-447b-85c8-0fd821d139a3python-pickleshare-helpnoarch0d4c3218dbc552e5bf5192d7204a11baddfdd75abbd0a13a462a958e39800a67Development documents and examples for picklesharePickleShare - a small 'shelve' like datastore with concurrency support
Like shelve, a PickleShareDB object acts like a normal dictionary. Unlike shelve,
many processes can access the database simultaneously. Changing a value in
database is immediately visible to other processes accessing the same database.
Concurrency is possible because the values are stored in separate files. Hence
the "database" is a directory where *all* files are governed by PickleShare.
Example usage::
from pickleshare import *
db = PickleShareDB('~/testpickleshare')
db.clear()
print("Should be empty:",db.items())
db['hello'] = 15
db['aku ankka'] = [1,2,313]
db['paths/are/ok/key'] = [1,(5,46)]
print(db.keys())
This module is certainly not ZODB, but can be used for low-load
(non-mission-critical) situations where tiny code size trumps the
advanced features of a "real" object database.
Installation guide: pip install picklesharehttps://github.com/pickleshare/pickleshareMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5e7cc4dd-b259-447b-85c8-0fd821d139a3python-pickleshare-0.7.5-1.src.rpmpython-prompt-toolkitsrc18a40eaf56d8df2b3de7b0de8f5a375fafedeaaeb2427cd5cd9668cf0848aeb7Library for building powerful interactive command lines in Pythonprompt_toolkit is a library for building powerful interactive command lines and
terminal applications in Python.https://github.com/prompt-toolkit/python-prompt-toolkitBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-01b50073-cc6a-4c0f-9b13-4e72d09d5469python-prompt-toolkitsrc53bdc2bb410b4e39e9049ac0245ae34baf48d0ec206a3eefa3dadb546a1f6645Library for building powerful interactive command lines in Pythonprompt_toolkit is a library for building powerful interactive command lines and
terminal applications in Python.https://github.com/prompt-toolkit/python-prompt-toolkitBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-af81c92f-00f3-4261-be34-f6c29ea6ad5dpython-prompt-toolkit-helpnoarchdf99750ad1ee1bd4e79db64d030bea93fbe8931c0acebffbe82352b8c9c0e5edDevelopment documents and examples for prompt-toolkitprompt_toolkit is a library for building powerful interactive command lines and
terminal applications in Python.https://github.com/prompt-toolkit/python-prompt-toolkitBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-01b50073-cc6a-4c0f-9b13-4e72d09d5469python-prompt-toolkit-3.0.38-1.src.rpmpython-prompt-toolkit-helpnoarch77378523ba43009ecd509490794d57c4b5ba6713012d0eebb0f1c2e0c3e2bbf3Development documents and examples for prompt-toolkitprompt_toolkit is a library for building powerful interactive command lines and
terminal applications in Python.https://github.com/prompt-toolkit/python-prompt-toolkitBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-af81c92f-00f3-4261-be34-f6c29ea6ad5dpython-prompt-toolkit-3.0.38-1.src.rpmpython-pure-evalsrc9ac965337746b36433b31ca910de51330d3d74892c519ab9dd17eec0014ce344Safely evaluate AST nodes without side effects
[![Build Status](https://travis-ci.org/alexmojaki/pure_eval.svg?branch=master)](https://travis-ci.org/alexmojaki/pure_eval) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/pure_eval/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/pure_eval?branch=master) [![Supports Python versions 3.5+](https://img.shields.io/pypi/pyversions/pure_eval.svg)](https://pypi.python.org/pypi/pure_eval)
This is a Python package that lets you safely evaluate certain AST nodes without triggering arbitrary code that may have unwanted side effects.
It can be installed from PyPI:
pip install pure_eval
To demonstrate usage, suppose we have an object defined as follows:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
print("Calculating area...")
return self.width * self.height
rect = Rectangle(3, 5)
```
Given the `rect` object, we want to evaluate whatever expressions we can in this source code:
```python
source = "(rect.width, rect.height, rect.area)"
```
This library works with the AST, so let's parse the source code and peek inside:
```python
import ast
tree = ast.parse(source)
the_tuple = tree.body[0].value
for node in the_tuple.elts:
print(ast.dump(node))
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='area', ctx=Load())
```
Now to actually use the library. First construct an Evaluator:
```python
from pure_eval import Evaluator
evaluator = Evaluator({"rect": rect})
```
The argument to `Evaluator` should be a mapping from variable names to their values. Or if you have access to the stack frame where `rect` is defined, you can instead use:
```python
evaluator = Evaluator.from_frame(frame)
```
Now to evaluate some nodes, using `evaluator[node]`:
```python
print("rect.width:", evaluator[the_tuple.elts[0]])
print("rect:", evaluator[the_tuple.elts[0].value])
```
Output:
```
rect.width: 3
rect: <__main__.Rectangle object at 0x105b0dd30>
```
OK, but you could have done the same thing with `eval`. The useful part is that it will refuse to evaluate the property `rect.area` because that would trigger unknown code. If we try, it'll raise a `CannotEval` exception.
```python
from pure_eval import CannotEval
try:
print("rect.area:", evaluator[the_tuple.elts[2]]) # fails
except CannotEval as e:
print(e) # prints CannotEval
```
To find all the expressions that can be evaluated in a tree:
```python
for node, value in evaluator.find_expressions(tree):
print(ast.dump(node), value)
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load()) 3
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load()) 5
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
```
Note that this includes `rect` three times, once for each appearance in the source code. Since all these nodes are equivalent, we can group them together:
```python
from pure_eval import group_expressions
for nodes, values in group_expressions(evaluator.find_expressions(tree)):
print(len(nodes), "nodes with value:", values)
```
Output:
```
1 nodes with value: 3
1 nodes with value: 5
3 nodes with value: <__main__.Rectangle object at 0x10d374d30>
```
If we want to list all the expressions in a tree, we may want to filter out certain expressions whose values are obvious. For example, suppose we have a function `foo`:
```python
def foo():
pass
```
If we refer to `foo` by its name as usual, then that's not interesting:
```python
from pure_eval import is_expression_interesting
node = ast.parse('foo').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='foo', ctx=Load())
False
```
But if we refer to it by a different name, then it's interesting:
```python
node = ast.parse('bar').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='bar', ctx=Load())
True
```
In general `is_expression_interesting` returns False for the following values:
- Literals (e.g. `123`, `'abc'`, `[1, 2, 3]`, `{'a': (), 'b': ([1, 2], [3])}`)
- Variables or attributes whose name is equal to the value's `__name__`, such as `foo` above or `self.foo` if it was a method.
- Builtins (e.g. `len`) referred to by their usual name.
To make things easier, you can combine finding expressions, grouping them, and filtering out the obvious ones with:
```python
evaluator.interesting_expressions_grouped(root)
```
To get the source code of an AST node, I recommend [asttokens](https://github.com/gristlabs/asttokens).
Here's a complete example that brings it all together:
```python
from asttokens import ASTTokens
from pure_eval import Evaluator
source = """
x = 1
d = {x: 2}
y = d[x]
"""
names = {}
exec(source, names)
atok = ASTTokens(source, parse=True)
for nodes, value in Evaluator(names).interesting_expressions_grouped(atok.tree):
print(atok.get_text(nodes[0]), "=", value)
```
Output:
```python
x = 1
d = {1: 2}
y = 2
d[x] = 2
```http://github.com/alexmojaki/pure_evalMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-04450e90-e2e4-4e63-97fc-de5c531ebd5dpython-pure-evalsrc5dd3f8236684d65a883381a739af9fb4d7a3eaaa07d3dac27d4ae0a01eb7846fSafely evaluate AST nodes without side effects
[![Build Status](https://travis-ci.org/alexmojaki/pure_eval.svg?branch=master)](https://travis-ci.org/alexmojaki/pure_eval) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/pure_eval/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/pure_eval?branch=master) [![Supports Python versions 3.5+](https://img.shields.io/pypi/pyversions/pure_eval.svg)](https://pypi.python.org/pypi/pure_eval)
This is a Python package that lets you safely evaluate certain AST nodes without triggering arbitrary code that may have unwanted side effects.
It can be installed from PyPI:
pip install pure_eval
To demonstrate usage, suppose we have an object defined as follows:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
print("Calculating area...")
return self.width * self.height
rect = Rectangle(3, 5)
```
Given the `rect` object, we want to evaluate whatever expressions we can in this source code:
```python
source = "(rect.width, rect.height, rect.area)"
```
This library works with the AST, so let's parse the source code and peek inside:
```python
import ast
tree = ast.parse(source)
the_tuple = tree.body[0].value
for node in the_tuple.elts:
print(ast.dump(node))
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='area', ctx=Load())
```
Now to actually use the library. First construct an Evaluator:
```python
from pure_eval import Evaluator
evaluator = Evaluator({"rect": rect})
```
The argument to `Evaluator` should be a mapping from variable names to their values. Or if you have access to the stack frame where `rect` is defined, you can instead use:
```python
evaluator = Evaluator.from_frame(frame)
```
Now to evaluate some nodes, using `evaluator[node]`:
```python
print("rect.width:", evaluator[the_tuple.elts[0]])
print("rect:", evaluator[the_tuple.elts[0].value])
```
Output:
```
rect.width: 3
rect: <__main__.Rectangle object at 0x105b0dd30>
```
OK, but you could have done the same thing with `eval`. The useful part is that it will refuse to evaluate the property `rect.area` because that would trigger unknown code. If we try, it'll raise a `CannotEval` exception.
```python
from pure_eval import CannotEval
try:
print("rect.area:", evaluator[the_tuple.elts[2]]) # fails
except CannotEval as e:
print(e) # prints CannotEval
```
To find all the expressions that can be evaluated in a tree:
```python
for node, value in evaluator.find_expressions(tree):
print(ast.dump(node), value)
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load()) 3
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load()) 5
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
```
Note that this includes `rect` three times, once for each appearance in the source code. Since all these nodes are equivalent, we can group them together:
```python
from pure_eval import group_expressions
for nodes, values in group_expressions(evaluator.find_expressions(tree)):
print(len(nodes), "nodes with value:", values)
```
Output:
```
1 nodes with value: 3
1 nodes with value: 5
3 nodes with value: <__main__.Rectangle object at 0x10d374d30>
```
If we want to list all the expressions in a tree, we may want to filter out certain expressions whose values are obvious. For example, suppose we have a function `foo`:
```python
def foo():
pass
```
If we refer to `foo` by its name as usual, then that's not interesting:
```python
from pure_eval import is_expression_interesting
node = ast.parse('foo').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='foo', ctx=Load())
False
```
But if we refer to it by a different name, then it's interesting:
```python
node = ast.parse('bar').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='bar', ctx=Load())
True
```
In general `is_expression_interesting` returns False for the following values:
- Literals (e.g. `123`, `'abc'`, `[1, 2, 3]`, `{'a': (), 'b': ([1, 2], [3])}`)
- Variables or attributes whose name is equal to the value's `__name__`, such as `foo` above or `self.foo` if it was a method.
- Builtins (e.g. `len`) referred to by their usual name.
To make things easier, you can combine finding expressions, grouping them, and filtering out the obvious ones with:
```python
evaluator.interesting_expressions_grouped(root)
```
To get the source code of an AST node, I recommend [asttokens](https://github.com/gristlabs/asttokens).
Here's a complete example that brings it all together:
```python
from asttokens import ASTTokens
from pure_eval import Evaluator
source = """
x = 1
d = {x: 2}
y = d[x]
"""
names = {}
exec(source, names)
atok = ASTTokens(source, parse=True)
for nodes, value in Evaluator(names).interesting_expressions_grouped(atok.tree):
print(atok.get_text(nodes[0]), "=", value)
```
Output:
```python
x = 1
d = {1: 2}
y = 2
d[x] = 2
```http://github.com/alexmojaki/pure_evalMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d6169a16-f26e-4aff-8ad9-07585da931d8python-pure-evalsrceddc84fd3db173b8065bfb462d8d148d7894f8d1a38db9732eefedcf9b3640c9Safely evaluate AST nodes without side effects
[![Build Status](https://travis-ci.org/alexmojaki/pure_eval.svg?branch=master)](https://travis-ci.org/alexmojaki/pure_eval) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/pure_eval/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/pure_eval?branch=master) [![Supports Python versions 3.5+](https://img.shields.io/pypi/pyversions/pure_eval.svg)](https://pypi.python.org/pypi/pure_eval)
This is a Python package that lets you safely evaluate certain AST nodes without triggering arbitrary code that may have unwanted side effects.
It can be installed from PyPI:
pip install pure_eval
To demonstrate usage, suppose we have an object defined as follows:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
print("Calculating area...")
return self.width * self.height
rect = Rectangle(3, 5)
```
Given the `rect` object, we want to evaluate whatever expressions we can in this source code:
```python
source = "(rect.width, rect.height, rect.area)"
```
This library works with the AST, so let's parse the source code and peek inside:
```python
import ast
tree = ast.parse(source)
the_tuple = tree.body[0].value
for node in the_tuple.elts:
print(ast.dump(node))
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='area', ctx=Load())
```
Now to actually use the library. First construct an Evaluator:
```python
from pure_eval import Evaluator
evaluator = Evaluator({"rect": rect})
```
The argument to `Evaluator` should be a mapping from variable names to their values. Or if you have access to the stack frame where `rect` is defined, you can instead use:
```python
evaluator = Evaluator.from_frame(frame)
```
Now to evaluate some nodes, using `evaluator[node]`:
```python
print("rect.width:", evaluator[the_tuple.elts[0]])
print("rect:", evaluator[the_tuple.elts[0].value])
```
Output:
```
rect.width: 3
rect: <__main__.Rectangle object at 0x105b0dd30>
```
OK, but you could have done the same thing with `eval`. The useful part is that it will refuse to evaluate the property `rect.area` because that would trigger unknown code. If we try, it'll raise a `CannotEval` exception.
```python
from pure_eval import CannotEval
try:
print("rect.area:", evaluator[the_tuple.elts[2]]) # fails
except CannotEval as e:
print(e) # prints CannotEval
```
To find all the expressions that can be evaluated in a tree:
```python
for node, value in evaluator.find_expressions(tree):
print(ast.dump(node), value)
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load()) 3
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load()) 5
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
```
Note that this includes `rect` three times, once for each appearance in the source code. Since all these nodes are equivalent, we can group them together:
```python
from pure_eval import group_expressions
for nodes, values in group_expressions(evaluator.find_expressions(tree)):
print(len(nodes), "nodes with value:", values)
```
Output:
```
1 nodes with value: 3
1 nodes with value: 5
3 nodes with value: <__main__.Rectangle object at 0x10d374d30>
```
If we want to list all the expressions in a tree, we may want to filter out certain expressions whose values are obvious. For example, suppose we have a function `foo`:
```python
def foo():
pass
```
If we refer to `foo` by its name as usual, then that's not interesting:
```python
from pure_eval import is_expression_interesting
node = ast.parse('foo').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='foo', ctx=Load())
False
```
But if we refer to it by a different name, then it's interesting:
```python
node = ast.parse('bar').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='bar', ctx=Load())
True
```
In general `is_expression_interesting` returns False for the following values:
- Literals (e.g. `123`, `'abc'`, `[1, 2, 3]`, `{'a': (), 'b': ([1, 2], [3])}`)
- Variables or attributes whose name is equal to the value's `__name__`, such as `foo` above or `self.foo` if it was a method.
- Builtins (e.g. `len`) referred to by their usual name.
To make things easier, you can combine finding expressions, grouping them, and filtering out the obvious ones with:
```python
evaluator.interesting_expressions_grouped(root)
```
To get the source code of an AST node, I recommend [asttokens](https://github.com/gristlabs/asttokens).
Here's a complete example that brings it all together:
```python
from asttokens import ASTTokens
from pure_eval import Evaluator
source = """
x = 1
d = {x: 2}
y = d[x]
"""
names = {}
exec(source, names)
atok = ASTTokens(source, parse=True)
for nodes, value in Evaluator(names).interesting_expressions_grouped(atok.tree):
print(atok.get_text(nodes[0]), "=", value)
```
Output:
```python
x = 1
d = {1: 2}
y = 2
d[x] = 2
```http://github.com/alexmojaki/pure_evalMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bfd2efdb-39f3-4891-bdcb-a97c96937753python-pure-evalsrca52f41afd716d5b2fb562bb7bc5daa155284e57c83a8b9f959734716fba7e2d8Safely evaluate AST nodes without side effects
[![Build Status](https://travis-ci.org/alexmojaki/pure_eval.svg?branch=master)](https://travis-ci.org/alexmojaki/pure_eval) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/pure_eval/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/pure_eval?branch=master) [![Supports Python versions 3.5+](https://img.shields.io/pypi/pyversions/pure_eval.svg)](https://pypi.python.org/pypi/pure_eval)
This is a Python package that lets you safely evaluate certain AST nodes without triggering arbitrary code that may have unwanted side effects.
It can be installed from PyPI:
pip install pure_eval
To demonstrate usage, suppose we have an object defined as follows:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
print("Calculating area...")
return self.width * self.height
rect = Rectangle(3, 5)
```
Given the `rect` object, we want to evaluate whatever expressions we can in this source code:
```python
source = "(rect.width, rect.height, rect.area)"
```
This library works with the AST, so let's parse the source code and peek inside:
```python
import ast
tree = ast.parse(source)
the_tuple = tree.body[0].value
for node in the_tuple.elts:
print(ast.dump(node))
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='area', ctx=Load())
```
Now to actually use the library. First construct an Evaluator:
```python
from pure_eval import Evaluator
evaluator = Evaluator({"rect": rect})
```
The argument to `Evaluator` should be a mapping from variable names to their values. Or if you have access to the stack frame where `rect` is defined, you can instead use:
```python
evaluator = Evaluator.from_frame(frame)
```
Now to evaluate some nodes, using `evaluator[node]`:
```python
print("rect.width:", evaluator[the_tuple.elts[0]])
print("rect:", evaluator[the_tuple.elts[0].value])
```
Output:
```
rect.width: 3
rect: <__main__.Rectangle object at 0x105b0dd30>
```
OK, but you could have done the same thing with `eval`. The useful part is that it will refuse to evaluate the property `rect.area` because that would trigger unknown code. If we try, it'll raise a `CannotEval` exception.
```python
from pure_eval import CannotEval
try:
print("rect.area:", evaluator[the_tuple.elts[2]]) # fails
except CannotEval as e:
print(e) # prints CannotEval
```
To find all the expressions that can be evaluated in a tree:
```python
for node, value in evaluator.find_expressions(tree):
print(ast.dump(node), value)
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load()) 3
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load()) 5
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
```
Note that this includes `rect` three times, once for each appearance in the source code. Since all these nodes are equivalent, we can group them together:
```python
from pure_eval import group_expressions
for nodes, values in group_expressions(evaluator.find_expressions(tree)):
print(len(nodes), "nodes with value:", values)
```
Output:
```
1 nodes with value: 3
1 nodes with value: 5
3 nodes with value: <__main__.Rectangle object at 0x10d374d30>
```
If we want to list all the expressions in a tree, we may want to filter out certain expressions whose values are obvious. For example, suppose we have a function `foo`:
```python
def foo():
pass
```
If we refer to `foo` by its name as usual, then that's not interesting:
```python
from pure_eval import is_expression_interesting
node = ast.parse('foo').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='foo', ctx=Load())
False
```
But if we refer to it by a different name, then it's interesting:
```python
node = ast.parse('bar').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='bar', ctx=Load())
True
```
In general `is_expression_interesting` returns False for the following values:
- Literals (e.g. `123`, `'abc'`, `[1, 2, 3]`, `{'a': (), 'b': ([1, 2], [3])}`)
- Variables or attributes whose name is equal to the value's `__name__`, such as `foo` above or `self.foo` if it was a method.
- Builtins (e.g. `len`) referred to by their usual name.
To make things easier, you can combine finding expressions, grouping them, and filtering out the obvious ones with:
```python
evaluator.interesting_expressions_grouped(root)
```
To get the source code of an AST node, I recommend [asttokens](https://github.com/gristlabs/asttokens).
Here's a complete example that brings it all together:
```python
from asttokens import ASTTokens
from pure_eval import Evaluator
source = """
x = 1
d = {x: 2}
y = d[x]
"""
names = {}
exec(source, names)
atok = ASTTokens(source, parse=True)
for nodes, value in Evaluator(names).interesting_expressions_grouped(atok.tree):
print(atok.get_text(nodes[0]), "=", value)
```
Output:
```python
x = 1
d = {1: 2}
y = 2
d[x] = 2
```http://github.com/alexmojaki/pure_evalMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-28901d3c-6848-4905-aeee-d565a7a9b5fepython-pure-eval-helpnoarch394d5f925247996bd2d3159e5eb5eef99fa63e80d877ffd9055ff9f65121a1bcDevelopment documents and examples for pure-eval
[![Build Status](https://travis-ci.org/alexmojaki/pure_eval.svg?branch=master)](https://travis-ci.org/alexmojaki/pure_eval) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/pure_eval/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/pure_eval?branch=master) [![Supports Python versions 3.5+](https://img.shields.io/pypi/pyversions/pure_eval.svg)](https://pypi.python.org/pypi/pure_eval)
This is a Python package that lets you safely evaluate certain AST nodes without triggering arbitrary code that may have unwanted side effects.
It can be installed from PyPI:
pip install pure_eval
To demonstrate usage, suppose we have an object defined as follows:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
print("Calculating area...")
return self.width * self.height
rect = Rectangle(3, 5)
```
Given the `rect` object, we want to evaluate whatever expressions we can in this source code:
```python
source = "(rect.width, rect.height, rect.area)"
```
This library works with the AST, so let's parse the source code and peek inside:
```python
import ast
tree = ast.parse(source)
the_tuple = tree.body[0].value
for node in the_tuple.elts:
print(ast.dump(node))
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='area', ctx=Load())
```
Now to actually use the library. First construct an Evaluator:
```python
from pure_eval import Evaluator
evaluator = Evaluator({"rect": rect})
```
The argument to `Evaluator` should be a mapping from variable names to their values. Or if you have access to the stack frame where `rect` is defined, you can instead use:
```python
evaluator = Evaluator.from_frame(frame)
```
Now to evaluate some nodes, using `evaluator[node]`:
```python
print("rect.width:", evaluator[the_tuple.elts[0]])
print("rect:", evaluator[the_tuple.elts[0].value])
```
Output:
```
rect.width: 3
rect: <__main__.Rectangle object at 0x105b0dd30>
```
OK, but you could have done the same thing with `eval`. The useful part is that it will refuse to evaluate the property `rect.area` because that would trigger unknown code. If we try, it'll raise a `CannotEval` exception.
```python
from pure_eval import CannotEval
try:
print("rect.area:", evaluator[the_tuple.elts[2]]) # fails
except CannotEval as e:
print(e) # prints CannotEval
```
To find all the expressions that can be evaluated in a tree:
```python
for node, value in evaluator.find_expressions(tree):
print(ast.dump(node), value)
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load()) 3
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load()) 5
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
```
Note that this includes `rect` three times, once for each appearance in the source code. Since all these nodes are equivalent, we can group them together:
```python
from pure_eval import group_expressions
for nodes, values in group_expressions(evaluator.find_expressions(tree)):
print(len(nodes), "nodes with value:", values)
```
Output:
```
1 nodes with value: 3
1 nodes with value: 5
3 nodes with value: <__main__.Rectangle object at 0x10d374d30>
```
If we want to list all the expressions in a tree, we may want to filter out certain expressions whose values are obvious. For example, suppose we have a function `foo`:
```python
def foo():
pass
```
If we refer to `foo` by its name as usual, then that's not interesting:
```python
from pure_eval import is_expression_interesting
node = ast.parse('foo').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='foo', ctx=Load())
False
```
But if we refer to it by a different name, then it's interesting:
```python
node = ast.parse('bar').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='bar', ctx=Load())
True
```
In general `is_expression_interesting` returns False for the following values:
- Literals (e.g. `123`, `'abc'`, `[1, 2, 3]`, `{'a': (), 'b': ([1, 2], [3])}`)
- Variables or attributes whose name is equal to the value's `__name__`, such as `foo` above or `self.foo` if it was a method.
- Builtins (e.g. `len`) referred to by their usual name.
To make things easier, you can combine finding expressions, grouping them, and filtering out the obvious ones with:
```python
evaluator.interesting_expressions_grouped(root)
```
To get the source code of an AST node, I recommend [asttokens](https://github.com/gristlabs/asttokens).
Here's a complete example that brings it all together:
```python
from asttokens import ASTTokens
from pure_eval import Evaluator
source = """
x = 1
d = {x: 2}
y = d[x]
"""
names = {}
exec(source, names)
atok = ASTTokens(source, parse=True)
for nodes, value in Evaluator(names).interesting_expressions_grouped(atok.tree):
print(atok.get_text(nodes[0]), "=", value)
```
Output:
```python
x = 1
d = {1: 2}
y = 2
d[x] = 2
```http://github.com/alexmojaki/pure_evalMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d6169a16-f26e-4aff-8ad9-07585da931d8python-pure-eval-0.2.2-1.src.rpmpython-pure-eval-helpnoarch667f290c18d9598d98f57286d004bf72148ba9af6110dd0438e39ee788aa6fc4Development documents and examples for pure-eval
[![Build Status](https://travis-ci.org/alexmojaki/pure_eval.svg?branch=master)](https://travis-ci.org/alexmojaki/pure_eval) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/pure_eval/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/pure_eval?branch=master) [![Supports Python versions 3.5+](https://img.shields.io/pypi/pyversions/pure_eval.svg)](https://pypi.python.org/pypi/pure_eval)
This is a Python package that lets you safely evaluate certain AST nodes without triggering arbitrary code that may have unwanted side effects.
It can be installed from PyPI:
pip install pure_eval
To demonstrate usage, suppose we have an object defined as follows:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
print("Calculating area...")
return self.width * self.height
rect = Rectangle(3, 5)
```
Given the `rect` object, we want to evaluate whatever expressions we can in this source code:
```python
source = "(rect.width, rect.height, rect.area)"
```
This library works with the AST, so let's parse the source code and peek inside:
```python
import ast
tree = ast.parse(source)
the_tuple = tree.body[0].value
for node in the_tuple.elts:
print(ast.dump(node))
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='area', ctx=Load())
```
Now to actually use the library. First construct an Evaluator:
```python
from pure_eval import Evaluator
evaluator = Evaluator({"rect": rect})
```
The argument to `Evaluator` should be a mapping from variable names to their values. Or if you have access to the stack frame where `rect` is defined, you can instead use:
```python
evaluator = Evaluator.from_frame(frame)
```
Now to evaluate some nodes, using `evaluator[node]`:
```python
print("rect.width:", evaluator[the_tuple.elts[0]])
print("rect:", evaluator[the_tuple.elts[0].value])
```
Output:
```
rect.width: 3
rect: <__main__.Rectangle object at 0x105b0dd30>
```
OK, but you could have done the same thing with `eval`. The useful part is that it will refuse to evaluate the property `rect.area` because that would trigger unknown code. If we try, it'll raise a `CannotEval` exception.
```python
from pure_eval import CannotEval
try:
print("rect.area:", evaluator[the_tuple.elts[2]]) # fails
except CannotEval as e:
print(e) # prints CannotEval
```
To find all the expressions that can be evaluated in a tree:
```python
for node, value in evaluator.find_expressions(tree):
print(ast.dump(node), value)
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load()) 3
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load()) 5
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
```
Note that this includes `rect` three times, once for each appearance in the source code. Since all these nodes are equivalent, we can group them together:
```python
from pure_eval import group_expressions
for nodes, values in group_expressions(evaluator.find_expressions(tree)):
print(len(nodes), "nodes with value:", values)
```
Output:
```
1 nodes with value: 3
1 nodes with value: 5
3 nodes with value: <__main__.Rectangle object at 0x10d374d30>
```
If we want to list all the expressions in a tree, we may want to filter out certain expressions whose values are obvious. For example, suppose we have a function `foo`:
```python
def foo():
pass
```
If we refer to `foo` by its name as usual, then that's not interesting:
```python
from pure_eval import is_expression_interesting
node = ast.parse('foo').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='foo', ctx=Load())
False
```
But if we refer to it by a different name, then it's interesting:
```python
node = ast.parse('bar').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='bar', ctx=Load())
True
```
In general `is_expression_interesting` returns False for the following values:
- Literals (e.g. `123`, `'abc'`, `[1, 2, 3]`, `{'a': (), 'b': ([1, 2], [3])}`)
- Variables or attributes whose name is equal to the value's `__name__`, such as `foo` above or `self.foo` if it was a method.
- Builtins (e.g. `len`) referred to by their usual name.
To make things easier, you can combine finding expressions, grouping them, and filtering out the obvious ones with:
```python
evaluator.interesting_expressions_grouped(root)
```
To get the source code of an AST node, I recommend [asttokens](https://github.com/gristlabs/asttokens).
Here's a complete example that brings it all together:
```python
from asttokens import ASTTokens
from pure_eval import Evaluator
source = """
x = 1
d = {x: 2}
y = d[x]
"""
names = {}
exec(source, names)
atok = ASTTokens(source, parse=True)
for nodes, value in Evaluator(names).interesting_expressions_grouped(atok.tree):
print(atok.get_text(nodes[0]), "=", value)
```
Output:
```python
x = 1
d = {1: 2}
y = 2
d[x] = 2
```http://github.com/alexmojaki/pure_evalMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bfd2efdb-39f3-4891-bdcb-a97c96937753python-pure-eval-0.2.2-1.src.rpmpython-pure-eval-helpnoarch0403fc48ff9c4496b8aa96a094d6ee60afc24998b63610cdff296fb316cf7534Development documents and examples for pure-eval
[![Build Status](https://travis-ci.org/alexmojaki/pure_eval.svg?branch=master)](https://travis-ci.org/alexmojaki/pure_eval) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/pure_eval/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/pure_eval?branch=master) [![Supports Python versions 3.5+](https://img.shields.io/pypi/pyversions/pure_eval.svg)](https://pypi.python.org/pypi/pure_eval)
This is a Python package that lets you safely evaluate certain AST nodes without triggering arbitrary code that may have unwanted side effects.
It can be installed from PyPI:
pip install pure_eval
To demonstrate usage, suppose we have an object defined as follows:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
print("Calculating area...")
return self.width * self.height
rect = Rectangle(3, 5)
```
Given the `rect` object, we want to evaluate whatever expressions we can in this source code:
```python
source = "(rect.width, rect.height, rect.area)"
```
This library works with the AST, so let's parse the source code and peek inside:
```python
import ast
tree = ast.parse(source)
the_tuple = tree.body[0].value
for node in the_tuple.elts:
print(ast.dump(node))
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='area', ctx=Load())
```
Now to actually use the library. First construct an Evaluator:
```python
from pure_eval import Evaluator
evaluator = Evaluator({"rect": rect})
```
The argument to `Evaluator` should be a mapping from variable names to their values. Or if you have access to the stack frame where `rect` is defined, you can instead use:
```python
evaluator = Evaluator.from_frame(frame)
```
Now to evaluate some nodes, using `evaluator[node]`:
```python
print("rect.width:", evaluator[the_tuple.elts[0]])
print("rect:", evaluator[the_tuple.elts[0].value])
```
Output:
```
rect.width: 3
rect: <__main__.Rectangle object at 0x105b0dd30>
```
OK, but you could have done the same thing with `eval`. The useful part is that it will refuse to evaluate the property `rect.area` because that would trigger unknown code. If we try, it'll raise a `CannotEval` exception.
```python
from pure_eval import CannotEval
try:
print("rect.area:", evaluator[the_tuple.elts[2]]) # fails
except CannotEval as e:
print(e) # prints CannotEval
```
To find all the expressions that can be evaluated in a tree:
```python
for node, value in evaluator.find_expressions(tree):
print(ast.dump(node), value)
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load()) 3
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load()) 5
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
```
Note that this includes `rect` three times, once for each appearance in the source code. Since all these nodes are equivalent, we can group them together:
```python
from pure_eval import group_expressions
for nodes, values in group_expressions(evaluator.find_expressions(tree)):
print(len(nodes), "nodes with value:", values)
```
Output:
```
1 nodes with value: 3
1 nodes with value: 5
3 nodes with value: <__main__.Rectangle object at 0x10d374d30>
```
If we want to list all the expressions in a tree, we may want to filter out certain expressions whose values are obvious. For example, suppose we have a function `foo`:
```python
def foo():
pass
```
If we refer to `foo` by its name as usual, then that's not interesting:
```python
from pure_eval import is_expression_interesting
node = ast.parse('foo').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='foo', ctx=Load())
False
```
But if we refer to it by a different name, then it's interesting:
```python
node = ast.parse('bar').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='bar', ctx=Load())
True
```
In general `is_expression_interesting` returns False for the following values:
- Literals (e.g. `123`, `'abc'`, `[1, 2, 3]`, `{'a': (), 'b': ([1, 2], [3])}`)
- Variables or attributes whose name is equal to the value's `__name__`, such as `foo` above or `self.foo` if it was a method.
- Builtins (e.g. `len`) referred to by their usual name.
To make things easier, you can combine finding expressions, grouping them, and filtering out the obvious ones with:
```python
evaluator.interesting_expressions_grouped(root)
```
To get the source code of an AST node, I recommend [asttokens](https://github.com/gristlabs/asttokens).
Here's a complete example that brings it all together:
```python
from asttokens import ASTTokens
from pure_eval import Evaluator
source = """
x = 1
d = {x: 2}
y = d[x]
"""
names = {}
exec(source, names)
atok = ASTTokens(source, parse=True)
for nodes, value in Evaluator(names).interesting_expressions_grouped(atok.tree):
print(atok.get_text(nodes[0]), "=", value)
```
Output:
```python
x = 1
d = {1: 2}
y = 2
d[x] = 2
```http://github.com/alexmojaki/pure_evalMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-28901d3c-6848-4905-aeee-d565a7a9b5fepython-pure-eval-0.2.2-1.src.rpmpython-py3dnssrc4902ad7585598ea9a06798858a31e2688b9b43b227f80f9600e36d21d80e5a82Python 3 DNS libraryPython 3 DNS library:https://launchpad.net/py3dnsPython LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f77559c1-b12e-4852-a0dc-e078212b95ffpython-py3dnssrc71af8898b859284b6c45d395930a602a956b7737130370bf34355db6b4540bf6Python 3 DNS libraryPython 3 DNS library:https://launchpad.net/py3dnsPython LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9c02a247-0147-4ca0-919c-78dc30b480eepython-py3dns-helpnoarch0d7f5154ccb7ca15033767a8c765f1e56c21f1900474bd7d53a47382ff1e5b7dDevelopment documents and examples for py3dnsPython 3 DNS library:https://launchpad.net/py3dnsPython LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f77559c1-b12e-4852-a0dc-e078212b95ffpython-py3dns-3.2.1-1.src.rpmpython-py3dns-helpnoarchfaa924f5cb6e3ddbc2e0344277011ed3acef11cfdaec4420046e79e39c74faafDevelopment documents and examples for py3dnsPython 3 DNS library:https://launchpad.net/py3dnsPython LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9c02a247-0147-4ca0-919c-78dc30b480eepython-py3dns-3.2.1-1.src.rpmpython-pyLibravatarsrcea3c0add9b5b525ba01464a94b51b686d925d2b7265d927c609015fb2f7dab6cPython module for LibravatarPyLibravatar is an easy way to make use of the federated Libravatar_ avatar
hosting service from within your Python applications.https://launchpad.net/pylibravatarMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-00bc5c01-9806-42b7-a1b2-fff4e2cf988epython-pyLibravatarsrce072c7b6d39cc1fa82831b9b56476455ebff8016750c41e48f97ecc03c880befPython module for LibravatarPyLibravatar is an easy way to make use of the federated Libravatar_ avatar
hosting service from within your Python applications.https://launchpad.net/pylibravatarMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5e08ea01-46cf-4044-aae1-042c308fbdeepython-pyLibravatarsrcd1ab3d779b112e661b841259c6ddcdcf355012855d1f999f4bc634e60ceee713Python module for LibravatarPyLibravatar is an easy way to make use of the federated Libravatar_ avatar
hosting service from within your Python applications.https://launchpad.net/pylibravatarMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d3e51e38-580b-42c2-ad42-81a7d29fe97apython-pyLibravatarsrcc81c04d2265affd3192e3494a5427bc63253337b8bfa843556f1295aeef34f6aPython module for LibravatarPyLibravatar is an easy way to make use of the federated Libravatar_ avatar
hosting service from within your Python applications.https://launchpad.net/pylibravatarMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-87f0e2db-01d9-4996-a551-13de6dc2e200python-pygalsrc52f4972c1c60cc65a97599bb2f3a09633a95eb7d817e811dee39c30523f9f54eA Python svg graph plotting libraryA Python svg graph plotting library.https://www.pygal.org/LGPL-3.0+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0800d4a9-d6af-4770-96e7-9ee55cf1965cpython-pygalsrc82aec150548b5183816645dbcf2d2a9ae7794acf1bd5f26df73e077c426da59dA Python svg graph plotting libraryA Python svg graph plotting library.https://www.pygal.org/LGPL-3.0+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a73bcb1a-fbd3-44ba-8caa-c7e028a1ea8bpython-pygal-helpnoarche5a591182dc25c083d58db8116fcb43fbbfe33ce06d6bce44ee1d30328b33552Development documents and examples for pygalhttps://www.pygal.org/LGPL-3.0+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0800d4a9-d6af-4770-96e7-9ee55cf1965cpython-pygal-3.0.0-1.src.rpmpython-pygal-helpnoarch9d78b67bb8d2b4562900240984e93436d11240a2477ba28a2c578bbd2ca680d4Development documents and examples for pygalhttps://www.pygal.org/LGPL-3.0+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a73bcb1a-fbd3-44ba-8caa-c7e028a1ea8bpython-pygal-3.0.0-1.src.rpmpython-pygit2src43d6ffc8753f7ae0bc0276ab7c7325548d1d18c067f805a50906743975325d51Python bindings for libgit2.- Documentation - http://www.pygit2.org/
- Install - http://www.pygit2.org/install.html
- Download - https://pypi.python.org/pypi/pygit2
- Source code and issue tracker - https://github.com/libgit2/pygit2
- Changelog - https://github.com/libgit2/pygit2/blob/master/CHANGELOG.rst
- Authors - https://github.com/libgit2/pygit2/blob/master/AUTHORS.rsthttps://github.com/libgit2/pygit2GPLv2 with linking exceptionopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-4acce24f-a362-464e-8420-7a87eca38abfpython-pygit2src845a55ddf4ca7420d322a5fb288a776b10a737036a951b40d23dfdafb51841edPython bindings for libgit2.- Documentation - http://www.pygit2.org/
- Install - http://www.pygit2.org/install.html
- Download - https://pypi.python.org/pypi/pygit2
- Source code and issue tracker - https://github.com/libgit2/pygit2
- Changelog - https://github.com/libgit2/pygit2/blob/master/CHANGELOG.rst
- Authors - https://github.com/libgit2/pygit2/blob/master/AUTHORS.rsthttps://github.com/libgit2/pygit2GPLv2 with linking exceptionopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b1276125-1890-411d-880b-d8af2f7f5ed9python-pygit2-debuginfox86_64ef7ae37756fc44a15ef711303d37a66f7554ede4d4818e43e19fc5954e7f996fDebug information for package python-pygit2This package provides debug information for package python-pygit2.
Debug information is useful when developing applications that use this
package or when debugging this package.https://github.com/libgit2/pygit2GPLv2 with linking exceptionopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-4acce24f-a362-464e-8420-7a87eca38abfpython-pygit2-1.7.1-1.src.rpmpython-pygit2-debuginfox86_64bd9afef4f763ea1a906676aa8dcd86d862ca7e32ddfb4d18742e704f95436eedDebug information for package python-pygit2This package provides debug information for package python-pygit2.
Debug information is useful when developing applications that use this
package or when debugging this package.https://github.com/libgit2/pygit2GPLv2 with linking exceptionopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-b1276125-1890-411d-880b-d8af2f7f5ed9python-pygit2-1.7.1-1.src.rpmpython-pygit2-debugsourcex86_64a66c8cd04ac0247708127ecb4bc31f552ab750a283489cdbb231541b6ec82b06Debug sources for package python-pygit2This package provides debug sources for package python-pygit2.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://github.com/libgit2/pygit2GPLv2 with linking exceptionopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-4acce24f-a362-464e-8420-7a87eca38abfpython-pygit2-1.7.1-1.src.rpmpython-pygit2-debugsourcex86_64327efb9e62e424f7cc8f8b06b3e56c36d60cf6958638abfae52e6795d0a00b03Debug sources for package python-pygit2This package provides debug sources for package python-pygit2.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://github.com/libgit2/pygit2GPLv2 with linking exceptionopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-b1276125-1890-411d-880b-d8af2f7f5ed9python-pygit2-1.7.1-1.src.rpmpython-pygit2-helpx86_64e06681f0d7f5e869bc4c8075e737092a110049d887be4553679a9b8df530d020Development documents and examples for pygit2- Documentation - http://www.pygit2.org/
- Install - http://www.pygit2.org/install.html
- Download - https://pypi.python.org/pypi/pygit2
- Source code and issue tracker - https://github.com/libgit2/pygit2
- Changelog - https://github.com/libgit2/pygit2/blob/master/CHANGELOG.rst
- Authors - https://github.com/libgit2/pygit2/blob/master/AUTHORS.rsthttps://github.com/libgit2/pygit2GPLv2 with linking exceptionopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-4acce24f-a362-464e-8420-7a87eca38abfpython-pygit2-1.7.1-1.src.rpmpython-pygit2-helpx86_64067be5b075a163ac9686a5635b83b590e7cabdf15f7dbbc98b0868488c937baaDevelopment documents and examples for pygit2- Documentation - http://www.pygit2.org/
- Install - http://www.pygit2.org/install.html
- Download - https://pypi.python.org/pypi/pygit2
- Source code and issue tracker - https://github.com/libgit2/pygit2
- Changelog - https://github.com/libgit2/pygit2/blob/master/CHANGELOG.rst
- Authors - https://github.com/libgit2/pygit2/blob/master/AUTHORS.rsthttps://github.com/libgit2/pygit2GPLv2 with linking exceptionopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b1276125-1890-411d-880b-d8af2f7f5ed9python-pygit2-1.7.1-1.src.rpmpython-pytest-xdistsrcd73c771b3d5521bb7cd3d6701aad6d8e75fe6f80d2ab7b6e03dda77b67ef7083pytest xdist plugin for distributed testing and loop-on-failing modespytest xdist plugin for distributed testing and loop-on-failing modes.https://github.com/pytest-dev/pytest-xdistMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2d779b62-55d6-403f-b98d-cf7e210c1f62python-responsessrc20baba39db8764e319506f7aa3c9db1dcfbbe8b115cc8cbd21112ba01be4e098A utility library for mocking out the `requests` Python library.A utility library for mocking out the requests Python library.https://github.com/getsentry/responsesApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-6ae81ef6-8052-4f25-882b-07766d63f014python-responses-helpnoarch31a689f3969594e9427d8e6e22683fcecba3468faabeb78bb585f7bb75c2498eA utility library for mocking out the `requests` Python library.A utility library for mocking out the requests Python library.https://github.com/getsentry/responsesApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-6ae81ef6-8052-4f25-882b-07766d63f014python-responses-0.18.0-1.src.rpmpython-retasksrc49797aa44fdfe178cf1465d903eef167d80e50a2522cc4e02bd16bc81aa5a5f1Python module to create and manage distributed task queuesPython module to create and manage distributed task queues using redis.http://retask.readthedocs.org/en/latest/index.htmlMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-100e6971-a6f4-4810-979b-d8cf3f13bc08python-richsrcb0769a541c3e705ce5e66509e451850b54d87e938f74da26de06fd41b5c32c21Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminalRich is a Python library for rich text and beautiful formatting in the terminalhttps://github.com/willmcgugan/richMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-fe180c04-616f-49e9-88bd-508b3843fbe3python-richsrcda0b09109fa6544a9342eb4cac62fd655cf61d538e2f646e61af118989c17b59Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminalRich is a Python library for rich text and beautiful formatting in the terminalhttps://github.com/willmcgugan/richMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a2376eb7-ee08-44ac-a4a4-1d442fcd750cpython-rich-helpnoarcha66d7521849e8da41a2bddad5755566c5bc77104146ffc34a745d99a107e693dDevelopment documents and examples for richRich is a Python library for rich text and beautiful formatting in the terminalhttps://github.com/willmcgugan/richMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-fe180c04-616f-49e9-88bd-508b3843fbe3python-rich-12.6.0-1.src.rpmpython-rich-helpnoarch93f3690853ea2f8592dbde6d06ab313902570a33b9f7397d470863ffb035e815Development documents and examples for richRich is a Python library for rich text and beautiful formatting in the terminalhttps://github.com/willmcgugan/richMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a2376eb7-ee08-44ac-a4a4-1d442fcd750cpython-rich-12.6.0-1.src.rpmpython-rpmautospecsrcb0c76f96f842dc8ca02eb90cb88136b7ee90337115480d7d46241070a98dd3cfPackage and CLI tool to generate release fields and changelogsA package and CLI tool to generate RPM release fields and changelogs.https://pagure.io/fedora-infra/rpmautospecMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c193af30-d8cf-41b3-964b-b57181e178a6python-rpmautospecsrc46fca90500a2369ddb35bc550fdee57945d21a096c79336891d54ec269ae11d1Package and CLI tool to generate release fields and changelogsA package and CLI tool to generate RPM release fields and changelogs.https://pagure.io/fedora-infra/rpmautospecMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f4072875-c26a-4cd8-abb4-0b60ae8fd4e9python-stack-datasrc04607f2855bbcae1dd9b5a99f240e4901f54be273d2f39e1f86dce955da27969Extract data from python stack frames and tracebacks for informative displays 6 | for i in range(5):
7 | row = []
8 | result.append(row)
--> 9 | print_stack()
10 | for j in range(5):
```
The code for `print_stack()` is fairly self-explanatory. If you want to learn more details about a particular class or method I suggest looking through some docstrings. `FrameInfo` is a class that accepts either a frame or a traceback object and provides a bunch of nice attributes and properties (which are cached so you don't need to worry about performance). In particular `frame_info.lines` is a list of `Line` objects. `line.render()` returns the source code of that line suitable for display. Without any arguments it simply strips any common leading indentation. Later on we'll see a more powerful use for it.
You can see that `frame_info.lines` includes some lines of surrounding context. By default it includes 3 pieces of context before the main line and 1 piece after. We can configure the amount of context by passing options:
```python
options = stack_data.Options(before=1, after=0)
frame_info = stack_data.FrameInfo(frame, options)
```
Then the output looks like:
```http://github.com/alexmojaki/stack_dataMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-6068844b-5720-4efc-8517-fc1f11eadcb6python-stack-datasrc7ad4f1763dab8127c33c592a286586f1bad8bf889e7669726fdd28ae61e31cd7Extract data from python stack frames and tracebacks for informative displays 6 | for i in range(5):
7 | row = []
8 | result.append(row)
--> 9 | print_stack()
10 | for j in range(5):
```
The code for `print_stack()` is fairly self-explanatory. If you want to learn more details about a particular class or method I suggest looking through some docstrings. `FrameInfo` is a class that accepts either a frame or a traceback object and provides a bunch of nice attributes and properties (which are cached so you don't need to worry about performance). In particular `frame_info.lines` is a list of `Line` objects. `line.render()` returns the source code of that line suitable for display. Without any arguments it simply strips any common leading indentation. Later on we'll see a more powerful use for it.
You can see that `frame_info.lines` includes some lines of surrounding context. By default it includes 3 pieces of context before the main line and 1 piece after. We can configure the amount of context by passing options:
```python
options = stack_data.Options(before=1, after=0)
frame_info = stack_data.FrameInfo(frame, options)
```
Then the output looks like:
```http://github.com/alexmojaki/stack_dataMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-44fa049c-439e-4037-af41-f0f230cb78a2python-stack-datasrcde4e8e7aff9567d32ca7fdfdb6d0e90a6a1f1d026ad06ab3e8e4260cb1c5d26eExtract data from python stack frames and tracebacks for informative displays 6 | for i in range(5):
7 | row = []
8 | result.append(row)
--> 9 | print_stack()
10 | for j in range(5):
```
The code for `print_stack()` is fairly self-explanatory. If you want to learn more details about a particular class or method I suggest looking through some docstrings. `FrameInfo` is a class that accepts either a frame or a traceback object and provides a bunch of nice attributes and properties (which are cached so you don't need to worry about performance). In particular `frame_info.lines` is a list of `Line` objects. `line.render()` returns the source code of that line suitable for display. Without any arguments it simply strips any common leading indentation. Later on we'll see a more powerful use for it.
You can see that `frame_info.lines` includes some lines of surrounding context. By default it includes 3 pieces of context before the main line and 1 piece after. We can configure the amount of context by passing options:
```python
options = stack_data.Options(before=1, after=0)
frame_info = stack_data.FrameInfo(frame, options)
```
Then the output looks like:
```http://github.com/alexmojaki/stack_dataMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-62785097-dbd7-4d64-b4f4-7feaf3f3efb7python-stack-datasrc85c9fc23ce1ada10b4c2c86be69fad645d47ce21f4af1535e4408c9903f3d29fExtract data from python stack frames and tracebacks for informative displays 6 | for i in range(5):
7 | row = []
8 | result.append(row)
--> 9 | print_stack()
10 | for j in range(5):
```
The code for `print_stack()` is fairly self-explanatory. If you want to learn more details about a particular class or method I suggest looking through some docstrings. `FrameInfo` is a class that accepts either a frame or a traceback object and provides a bunch of nice attributes and properties (which are cached so you don't need to worry about performance). In particular `frame_info.lines` is a list of `Line` objects. `line.render()` returns the source code of that line suitable for display. Without any arguments it simply strips any common leading indentation. Later on we'll see a more powerful use for it.
You can see that `frame_info.lines` includes some lines of surrounding context. By default it includes 3 pieces of context before the main line and 1 piece after. We can configure the amount of context by passing options:
```python
options = stack_data.Options(before=1, after=0)
frame_info = stack_data.FrameInfo(frame, options)
```
Then the output looks like:
```http://github.com/alexmojaki/stack_dataMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ae8d7b52-e865-43b2-b6ef-ba1ad248b58dpython-stack-data-helpnoarch3e973005b6fa0eb69e1aae02f67ced4073c45757fad1273566f4adfa5273ac07Development documents and examples for stack-data 6 | for i in range(5):
7 | row = []
8 | result.append(row)
--> 9 | print_stack()
10 | for j in range(5):
```
The code for `print_stack()` is fairly self-explanatory. If you want to learn more details about a particular class or method I suggest looking through some docstrings. `FrameInfo` is a class that accepts either a frame or a traceback object and provides a bunch of nice attributes and properties (which are cached so you don't need to worry about performance). In particular `frame_info.lines` is a list of `Line` objects. `line.render()` returns the source code of that line suitable for display. Without any arguments it simply strips any common leading indentation. Later on we'll see a more powerful use for it.
You can see that `frame_info.lines` includes some lines of surrounding context. By default it includes 3 pieces of context before the main line and 1 piece after. We can configure the amount of context by passing options:
```python
options = stack_data.Options(before=1, after=0)
frame_info = stack_data.FrameInfo(frame, options)
```
Then the output looks like:
```http://github.com/alexmojaki/stack_dataMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-44fa049c-439e-4037-af41-f0f230cb78a2python-stack-data-0.6.2-1.src.rpmpython-stack-data-helpnoarchce2798e3878eb2a751474d60511f8243b1c33d6d8add24100812ee4d2a23a1d3Development documents and examples for stack-data 6 | for i in range(5):
7 | row = []
8 | result.append(row)
--> 9 | print_stack()
10 | for j in range(5):
```
The code for `print_stack()` is fairly self-explanatory. If you want to learn more details about a particular class or method I suggest looking through some docstrings. `FrameInfo` is a class that accepts either a frame or a traceback object and provides a bunch of nice attributes and properties (which are cached so you don't need to worry about performance). In particular `frame_info.lines` is a list of `Line` objects. `line.render()` returns the source code of that line suitable for display. Without any arguments it simply strips any common leading indentation. Later on we'll see a more powerful use for it.
You can see that `frame_info.lines` includes some lines of surrounding context. By default it includes 3 pieces of context before the main line and 1 piece after. We can configure the amount of context by passing options:
```python
options = stack_data.Options(before=1, after=0)
frame_info = stack_data.FrameInfo(frame, options)
```
Then the output looks like:
```http://github.com/alexmojaki/stack_dataMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-62785097-dbd7-4d64-b4f4-7feaf3f3efb7python-stack-data-0.6.2-1.src.rpmpython-stack-data-helpnoarch789ef3d755935fa11db5a1a91d599159951b4f658c86df8e5c521e8ebdb72be3Development documents and examples for stack-data 6 | for i in range(5):
7 | row = []
8 | result.append(row)
--> 9 | print_stack()
10 | for j in range(5):
```
The code for `print_stack()` is fairly self-explanatory. If you want to learn more details about a particular class or method I suggest looking through some docstrings. `FrameInfo` is a class that accepts either a frame or a traceback object and provides a bunch of nice attributes and properties (which are cached so you don't need to worry about performance). In particular `frame_info.lines` is a list of `Line` objects. `line.render()` returns the source code of that line suitable for display. Without any arguments it simply strips any common leading indentation. Later on we'll see a more powerful use for it.
You can see that `frame_info.lines` includes some lines of surrounding context. By default it includes 3 pieces of context before the main line and 1 piece after. We can configure the amount of context by passing options:
```python
options = stack_data.Options(before=1, after=0)
frame_info = stack_data.FrameInfo(frame, options)
```
Then the output looks like:
```http://github.com/alexmojaki/stack_dataMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ae8d7b52-e865-43b2-b6ef-ba1ad248b58dpython-stack-data-0.6.2-1.src.rpmpython-templated-dictionarysrc3ee9534061a0a4c8eb042134c91bc73997847ff717dc310ae42d04f04ed0e99dDictionary with Jinja2 expansionDictionary where __getitem__() is run through Jinja2 template.https://github.com/xsuchy/templated-dictionaryGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-491e1250-c171-4c4a-952b-8f6f33eca728python-templated-dictionary-helpnoarche836e98d54d1267f3c9d9927ae1b852c00cc5bb093d44ceb20323567a8c81b5dDevelopment documents and examples for templated-dictionaryDictionary where __getitem__() is run through Jinja2 template.https://github.com/xsuchy/templated-dictionaryGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-491e1250-c171-4c4a-952b-8f6f33eca728python-templated-dictionary-1.2-1.src.rpmpython3-Authlibnoarch0a341b3eee01cc369ed7b9e5e92db25beb6e5312cea75bddd1a790ad04f7c126The ultimate Python library in building OAuth and OpenID Connect servers and clients.The ultimate Python library in building OAuth and OpenID Connect servers.
JWS, JWK, JWA, JWT are included.https://authlib.org/BSD 3-Clause LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c5a41d83-54dd-4344-aadc-e269cb329b77python-Authlib-1.2.0-1.src.rpmpython3-CCColUtilsx86_641897d04fff079f515045a2ef1977746cf287e72b25316b4718074e8edaf194a8Kerberos5 Credential Cache Collection UtilitiesKerberos5 Credential Cache Collection Utilities.https://pagure.io/cccolutilsGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5b8e6dc8-f864-4cee-ac08-86006acc0181python-CCColUtils-1.5-2.src.rpmpython3-CCColUtilsx86_64d564851f8498b38d9da551f0c2e6869eb2254e1fa40b8acb223e10194ca2cfaeKerberos5 Credential Cache Collection UtilitiesKerberos5 Credential Cache Collection Utilities.https://pagure.io/cccolutilsGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2ab5f99f-db9a-40a8-815d-fcef753b8678python-CCColUtils-1.5-2.src.rpmpython3-Flask-Cachingnoarch8d962cbaa6ca9d91955ddbe28be70da9b147b4db9b529020ad49d22a9f3d8324Adds caching support to Flask applications.A fork of the `Flask-cache`_ extension which adds easy cache support to Flask.https://github.com/pallets-eco/flask-cachingBSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-cc6881b1-b283-4aa7-8a55-facad512af8fpython-Flask-Caching-2.0.2-1.src.rpmpython3-Flask-OpenIDnoarch2e3ec9eb9814c37626dc2592de4bf44727cf86bdef0891096dc8ba37361f66b3OpenID support for FlaskFlask-OpenID adds openid support to flask applicationshttp://github.com/mitsuhiko/flask-openid/BSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1b7b3fab-7f39-40b7-a509-ab87de0c1fe6python-Flask-OpenID-1.3.0-2.src.rpmpython3-Flask-WTFnoarch2e3245db1cef9e61675de50fabcf1a4b480aedf6ee09aa66e96fa1079723ed1bForm rendering, validation, and CSRF protection for Flask with WTForms.Simple integration of Flask and WTForms, including CSRF, file upload,
and reCAPTCHA.https://github.com/wtforms/flask-wtf/BSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d888d7d0-8024-4288-9cae-6374bc69eb39python-Flask-WTF-1.1.1-1.src.rpmpython3-XStatic-Bootstrap-SCSSnoarchd664fa5d53b54d92e8fa4e8fb4848b32cc341c2dc89ec707224df89c53c53c73Bootstrap-SCSS 3.4.1 (XStatic packaging standard)Bootstrap style library packaged for setuptools (easy_install) / pip.
This package is intended to be used by **any** project that needs these files.
It intentionally does **not** provide any extra code except some metadata
**nor** has any extra requirements. You MAY use some minimal support code from
the XStatic base package, if you like.
You can find more info about the xstatic packaging way in the package `XStatic`.https://github.com/twbs/bootstrap-sassMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bb57607f-37c1-40f8-9644-3f9bf6760dd2python-XStatic-Bootstrap-SCSS-3.4.1.0-1.src.rpmpython3-XStatic-DataTablesnoarch88691749428f1e8a6619ca9493a4dd3ab8712631e9201398c44468f3f49abf08DataTables 1.10.15 (XStatic packaging standard)The DataTables plugin for jQuery packaged for setuptools (easy_install) / pip.
This package is intended to be used by **any** project that needs these files.
It intentionally does **not** provide any extra code except some metadata
**nor** has any extra requirements. You MAY use some minimal support code from
the XStatic base package, if you like.
You can find more info about the xstatic packaging way in the package `XStatic`.http://www.datatables.net(same as DataTables)openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2211ae11-4a47-4de0-985f-8572bd272b91python-XStatic-DataTables-1.10.15.1-1.src.rpmpython3-XStatic-Patternflynoarchde75199f71ee4abe3b31db038c7843865c863b900729c4505acf47a74bcf917fPatternfly 3.21.0 (XStatic packaging standard)Patternfly style library packaged for setuptools (easy_install) / pip.
This package is intended to be used by **any** project that needs these files.
It intentionally does **not** provide any extra code except some metadata
**nor** has any extra requirements. You MAY use some minimal support code from
the XStatic base package, if you like.
You can find more info about the xstatic packaging way in the package `XStatic`.https://www.patternfly.org/Apache v2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0ffb227d-a611-49d0-aa31-de0cd5375e1fpython-XStatic-Patternfly-3.21.0.1-1.src.rpmpython3-argparse-manpagenoarcha856a4ea862bf12daee85b1f6a2e55e500eb68ed1ce4bdbc66535ed8a534fe7dBuild manual page from python's ArgumentParser object.Automatically build manpage from argparsehttps://github.com/praiskup/argparse-manpageApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1a19585b-290d-4d93-920b-9c6a1f4fa8fapython-argparse-manpage-4.3-1.src.rpm/usr/bin/argparse-manpagepython3-asttokensnoarchfc6908cd6149fca28fde69f00a9b10138a7efcb0b93d8eec9c3598d7e57a9a21Module to annotate Python abstract syntax trees with source code positionsThe asttokens module annotates Python abstract syntax trees (ASTs)
with the positions of tokens and text in the source code that
generated them. This makes it possible for tools that work with
logical AST nodes to find the particular text that resulted in those
nodes, for example for automated refactoring or highlighting.https://github.com/gristlabs/asttokensApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-190a7a62-f7fa-4620-978d-f70fb52fe6fcpython-asttokens-2.2.1-1.src.rpmpython3-backoffnoarch44debf53144710915e33411f5cd475a6c596dd24a22e3f55348f4f772a4b5a1cFunction decoration for backoff and retryThis module provides function decorators which can be used to wrap a\
function such that it will be retried until some condition is met. It\
is meant to be of use when accessing unreliable resources with the\
potential for intermittent failures i.e. network resources and external\
APIs. Somewhat more generally, it may also be of use for dynamically\
polling resources for externally generated content.https://github.com/litl/backoffMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1089ddd3-e967-4d41-bb78-299c40669ec1python-backoff-2.2.1-1.src.rpmpython3-blessednoarch1c60050f5d907e644ac8fd4ee72eddb992bec76f68356df40a93eab08b29268cEasy, practical library for making terminal apps, by providing an elegant, well-documented interface to Colors, Keyboard input, and screen Positioning capabilities.Blessed is an easy, practical library for making python terminal appshttps://github.com/jquast/blessedMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c34b2f0f-1c52-4ee3-941a-1dd5b742153epython-blessed-1.20.0-1.src.rpmpython3-cachelibnoarch6faba08c24b953d78d6efabd37c3fec2595e10752cadc9c18e528b1d8c8b369bA collection of cache libraries in the same API interface.A collection of cache libraries in the same API interface. Extracted from werkzeug.https://github.com/pallets-eco/cachelibBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-cba69d7f-b0df-442d-a912-c287598c80a6python-cachelib-0.9.0-1.src.rpmpython3-copr-commonnoarch438aa8804fd276c1e332049386ccbc929249b0f133d35e62635b95d364b08b42Python code used by CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python code used by other Copr packages. Mostly
useful for developers only.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d9af21be-03f9-468a-bdc7-c951165162dapython-copr-common-0.19-1.src.rpmpython3-copr-commonnoarcha14a98180989f5985ed0dd7913f5cf122957a7b09ccbe391135b54478a7d7e40Python code used by CoprCOPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python code used by other Copr packages. Mostly
useful for developers only.https://github.com/fedora-copr/coprGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1451da4a-8d87-4974-99ec-c09fed88cee8python-copr-common-0.19-1.src.rpmpython3-crudininoarch45d0afbc4ff0f1b7df5dd7ad77e239f0398293ffb56294f295a56c12fed173bbA utility for manipulating ini filescrudini A utility for manipulating ini fileshttp://github.com/pixelb/crudiniGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-61b09c15-22be-47aa-8356-a904414e16f1python-crudini-0.9.3-2.src.rpm/usr/bin/crudinipython3-debtcollectornoarch2212a08871de21364e9a7adff3ba5805e6721e0c9507cbe21a5e3c217905fec2A collection of Python deprecation patterns and strategies that help you collect your technical debt in a non-destructive manner.A collection of Python deprecation patterns and strategies that help you collect your technical debt in a non-destructive manner.https://docs.openstack.org/debtcollector/latestApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-4d5d68d3-7dc5-4b0b-b618-fe636254f44epython-debtcollector-2.5.0-1.src.rpmpython3-email-validatornoarch9a5a6413d570d446aadb7b3acda755d4268beb474f506756a2e23ceb5df08f17A robust email address syntax and deliverability validation library.A robust email address syntax and deliverability validation library for
Python by [Joshua Tauberer](https://joshdata.me).
This library validates that a string is of the form `name@example.com`. This is
the sort of validation you would want for an email-based login form on
a website.
Key features:
* Checks that an email address has the correct syntax --- good for
login forms or other uses related to identifying users.
* Gives friendly error messages when validation fails (appropriate to show
to end users).
* (optionally) Checks deliverability: Does the domain name resolve? And you can override the default DNS resolver.
* Supports internationalized domain names and (optionally)
internationalized local parts, but blocks unsafe characters.
* Normalizes email addresses (super important for internationalized
addresses! see below).
The library is NOT for validation of the To: line in an email message
(e.g. `My Name <my@address.com>`), which
[flanker](https://github.com/mailgun/flanker) is more appropriate for.
And this library does NOT permit obsolete forms of email addresses, so
if you need strict validation against the email specs exactly, use
[pyIsEmail](https://github.com/michaelherold/pyIsEmail).
This library is tested with Python 3.6+ but should work in earlier versions:
[![Build Status](https://app.travis-ci.com/JoshData/python-email-validator.svg?branch=main)](https://app.travis-ci.com/JoshData/python-email-validator)https://github.com/JoshData/python-email-validatorCC0 (copyright waived)openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ade27af5-a995-4283-90c8-6e414d9ba245python-email-validator-1.3.1-1.src.rpm/usr/bin/email_validatorpython3-executingnoarchf805ed08e59a9c5d8cbfb575195adf19995d43139c401197736987f68365cef3Get the currently executing AST node of a frame, and other information
[![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)
This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.
* [Usage](#usage)
* [Getting the AST node](#getting-the-ast-node)
* [Getting the source code of the node](#getting-the-source-code-of-the-node)
* [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
* [The Source class](#the-source-class)
* [Installation](#installation)
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
* [Libraries that use this](#libraries-that-use-this)
```python
import executing
node = executing.Source.executing(frame).node
```
Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).
`node` will always be the same instance for multiple calls with frames at the same point of execution.
If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.
For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:
```python
executing.Source.executing(frame).source.asttokens()
```
or:
```python
executing.Source.for_frame(frame).asttokens()
```
or use one of the convenience methods:
```python
executing.Source.executing(frame).text()
executing.Source.executing(frame).text_range()
```
```python
executing.Source.executing(frame).code_qualname()
```
or:
```python
executing.Source.for_frame(frame).code_qualname(frame.f_code)
```
Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.
pip install executing
If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).
Suppose the frame is executing this line:
```python
self.foo(bar.x)
```
and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?
The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:
```python
(self.foo ** 'longuniqueconstant')(bar.x)
```
and compile it, and the bytecode will be almost the same but there will be two new instructions:
LOAD_CONST 'longuniqueconstant'
BINARY_POWER
and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.
Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:
1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere
In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.
Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.
Currently it works in almost all cases for the following `ast` nodes:
- `Call`, e.g. `self.foo(bar)`
- `Attribute`, e.g. `point.x`
- `Subscript`, e.g. `lst[1]`
- `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
- `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
- `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)
The plan is to extend to more operations in the future.
- **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
- **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
- **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
- **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
- **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.
- **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
- **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
- **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
- **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
- **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
- **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.https://github.com/alexmojaki/executingMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-7b327bb2-5ea6-4634-8121-b04075d1af97python-executing-1.2.0-1.src.rpmpython3-executingnoarch943fd2a66b77307c908a3108b173c578754f332d319a8c0bf12e4f1120ba91c9Get the currently executing AST node of a frame, and other information
[![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)
This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.
* [Usage](#usage)
* [Getting the AST node](#getting-the-ast-node)
* [Getting the source code of the node](#getting-the-source-code-of-the-node)
* [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
* [The Source class](#the-source-class)
* [Installation](#installation)
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
* [Libraries that use this](#libraries-that-use-this)
```python
import executing
node = executing.Source.executing(frame).node
```
Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).
`node` will always be the same instance for multiple calls with frames at the same point of execution.
If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.
For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:
```python
executing.Source.executing(frame).source.asttokens()
```
or:
```python
executing.Source.for_frame(frame).asttokens()
```
or use one of the convenience methods:
```python
executing.Source.executing(frame).text()
executing.Source.executing(frame).text_range()
```
```python
executing.Source.executing(frame).code_qualname()
```
or:
```python
executing.Source.for_frame(frame).code_qualname(frame.f_code)
```
Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.
pip install executing
If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).
Suppose the frame is executing this line:
```python
self.foo(bar.x)
```
and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?
The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:
```python
(self.foo ** 'longuniqueconstant')(bar.x)
```
and compile it, and the bytecode will be almost the same but there will be two new instructions:
LOAD_CONST 'longuniqueconstant'
BINARY_POWER
and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.
Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:
1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere
In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.
Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.
Currently it works in almost all cases for the following `ast` nodes:
- `Call`, e.g. `self.foo(bar)`
- `Attribute`, e.g. `point.x`
- `Subscript`, e.g. `lst[1]`
- `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
- `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
- `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)
The plan is to extend to more operations in the future.
- **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
- **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
- **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
- **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
- **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.
- **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
- **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
- **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
- **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
- **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
- **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.https://github.com/alexmojaki/executingMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5be11934-1be7-4b03-920f-a310a3fca71fpython-executing-1.2.0-1.src.rpmpython3-flask-whoosheenoarch26f8c8161f9278f28562a6a0872c845178842aac6a924c94aa2713d85a0d48e5Flask-SQLAlchemy - Whoosh IntegrationCustomizable Flask - SQLAlchemy - Whoosh integrationhttps://github.com/bkabrda/flask-whoosheeBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-18ad380e-e44e-4345-937f-780491a9623dpython-flask-whooshee-0.8.2-1.src.rpmpython3-html2textnoarch6838046f81089504d1ce44768c1df86483f02bcc6f789f3d6760b28655548106Turn HTML into equivalent Markdown-structured text.Convert HTML to Markdown-formatted text.https://github.com/Alir3z4/html2text/GPL-3.0-onlyopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-97f67640-1dfa-4034-8755-117a7ee6ce59python-html2text-2020.1.16-2.src.rpm/usr/bin/html2textpython3-html5-parserx86_64ae5a95d66553f55077ff7c84be349fca44bc51dcf626660f5daa01593511b999A fast, standards compliant, C based, HTML 5 parser for pythonA fast, standards compliant, C based, HTML 5 parser for pythonhttps://pypi.python.org/pypi/html5-parserASL 2.0 and MITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-17a66066-ef55-4a6e-9c9b-7fdb334c4d86python-html5-parser-0.4.10-1.src.rpmpython3-html5-parserx86_642eb0d8430202abd710e710ee5aa9c987b5ad6d007f9fdab61a35b9fd9539cb61A fast, standards compliant, C based, HTML 5 parser for pythonA fast, standards compliant, C based, HTML 5 parser for pythonhttps://pypi.python.org/pypi/html5-parserASL 2.0 and MITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e2ade63d-115f-4a23-bb61-702ae17aa694python-html5-parser-0.4.10-1.src.rpmpython3-ipdbnoarch8b878644e8af3d81f83f83daf89eb4d47e048b09cb98d0bb0befaf8a8f5ea20dIPython-enabled pdbhttps://github.com/gotcha/ipdbBSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ae4ac1f8-4f54-4306-bd3d-5a7117bc0f25python-ipdb-0.13.13-1.src.rpm/usr/bin/ipdb3python3-ipythonnoarchaa7656ddc6f6c7e8846423fd98b96ce4e22eabdfc2c46313283f9d194fccf028IPython: Productive Interactive ComputingIPython provides a rich toolkit to help you make the most out of using Python
interactively. Its main components are:
* A powerful interactive Python shell
* A `Jupyter <https://jupyter.org/>`_ kernel to work with Python code in Jupyter
notebooks and other interactive frontends.
The enhanced interactive Python shells have the following main features:
* Comprehensive object introspection.
* Input history, persistent across sessions.
* Caching of output results during a session with automatically generated
references.
* Extensible tab completion, with support by default for completion of python
variables and keywords, filenames and function keywords.
* Extensible system of 'magic' commands for controlling the environment and
performing many tasks related either to IPython or the operating system.
* A rich configuration system with easy switching between different setups
(simpler than changing $PYTHONSTARTUP environment variables every time).
* Session logging and reloading.
* Extensible syntax processing for special purpose situations.
* Access to the system shell with user-extensible alias system.
* Easily embeddable in other Python programs and GUIs.
* Integrated access to the pdb debugger and the Python profiler.
The latest development version is always available from IPython's `GitHub
site <http://github.com/ipython>`_.https://ipython.orgBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-8a6d9528-c43b-40d0-8e33-220e5ce7b3c4python-ipython-8.14.0-1.src.rpm/usr/bin/ipython/usr/bin/ipython3python3-ipythonnoarch0f18012848fcc0f612be8ac132373f23cb52b8161ec80a52222d351c25cd24f6IPython: Productive Interactive ComputingIPython provides a rich toolkit to help you make the most out of using Python
interactively. Its main components are:
* A powerful interactive Python shell
* A `Jupyter <https://jupyter.org/>`_ kernel to work with Python code in Jupyter
notebooks and other interactive frontends.
The enhanced interactive Python shells have the following main features:
* Comprehensive object introspection.
* Input history, persistent across sessions.
* Caching of output results during a session with automatically generated
references.
* Extensible tab completion, with support by default for completion of python
variables and keywords, filenames and function keywords.
* Extensible system of 'magic' commands for controlling the environment and
performing many tasks related either to IPython or the operating system.
* A rich configuration system with easy switching between different setups
(simpler than changing $PYTHONSTARTUP environment variables every time).
* Session logging and reloading.
* Extensible syntax processing for special purpose situations.
* Access to the system shell with user-extensible alias system.
* Easily embeddable in other Python programs and GUIs.
* Integrated access to the pdb debugger and the Python profiler.
The latest development version is always available from IPython's `GitHub
site <http://github.com/ipython>`_.https://ipython.orgBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3b850d66-9d75-461a-9d6a-08feeef205aepython-ipython-8.14.0-1.src.rpm/usr/bin/ipython/usr/bin/ipython3python3-jedinoarchf71a3ee55132b9412110a72212411a7dfbb917dd4b2152456e09eb493502469aA static analysis tool for Python that is typically used in IDEs/editors pluginsJedi is a static analysis tool for Python that is typically used in IDEs/editors plugins.
It has a focus on autocompletion and goto functionality.
Other features include refactoring, code search and finding references.https://github.com/davidhalter/jediMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2b0db9b7-2274-4598-b032-8651c56348acpython-jedi-0.18.1-1.src.rpmpython3-jedinoarch4b1cd9e2bcafd9d1b82787f07caededdc0237878fa510f9f7edf010af8cbe5a3A static analysis tool for Python that is typically used in IDEs/editors pluginsJedi is a static analysis tool for Python that is typically used in IDEs/editors plugins.
It has a focus on autocompletion and goto functionality.
Other features include refactoring, code search and finding references.https://github.com/davidhalter/jediMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b3cdd0a3-db90-4694-b06d-a76e2096b9c0python-jedi-0.18.1-1.src.rpmpython3-kojinoarchcacf94cf383833960acc71c955ab5ad944e0b474620fafd3bbc22bdea2ba36f7Build system tools python libraryKoji is a system for building and tracking RPMS.
This subpackage provides python functions and libraries.https://pagure.io/koji/LGPLv2 and GPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-43d5e2df-66df-4fb1-b7e7-be8330c989c5koji-1.32.0-1.src.rpmpython3-kojinoarch8a177d2b6b82509521bf508964e81f03966abb06e118a0da20b5e3adbac76a68Build system tools python libraryKoji is a system for building and tracking RPMS.
This subpackage provides python functions and libraries.https://pagure.io/koji/LGPLv2 and GPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-fb1e5b17-d116-44dd-88dd-e321152ce5e5koji-1.32.0-1.src.rpmpython3-littleutilsnoarch8b667a5a780afc66a5dc25c896b1c731e107a1d0c41f54ecc91bdca3b75b8b46Small collection of Python utilitiesSmall collection of Python utilities.https://pypi.org/pypi/littleutilsMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e0b48d8b-3670-46af-ae10-af1a3550bbadpython-littleutils-0.2.2-1.src.rpmpython3-littleutilsnoarch7f79a32b6e33ec6c05709ccfda375ae8e7a1eaae9a879ab698761eb7aade57ddSmall collection of Python utilitiesSmall collection of Python utilities.https://pypi.org/pypi/littleutilsMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-995a0d73-034c-40fd-a588-8dbe7476c7a7python-littleutils-0.2.2-1.src.rpmpython3-matplotlib-inlinenoarch9ad1b6b29e73f506664886c7fe38499fbe16228954357dadf5383f367dc3b7b5Inline Matplotlib backend for Jupyter
This package provides support for matplotlib to display figures directly inline in the Jupyter notebook and related clients, as shown below.
With conda:
```bash
conda install -c conda-forge matplotlib-inline
```
With pip:
```bash
pip install matplotlib-inline
```
Note that in current versions of JupyterLab and Jupyter Notebook, the explicit use of the `%matplotlib inline` directive is not needed anymore, though other third-party clients may still require it.
This will produce a figure immediately below:
```python
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp');
```
Licensed under the terms of the BSD 3-Clause License, by the IPython Development Team (see `LICENSE` file).
BSD 3-Clause License
Copyright (c) 2019-2022, IPython Development Team.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.https://github.com/ipython/matplotlib-inlineBSD 3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f722e95e-5f19-4b49-b3aa-75043886250fpython-matplotlib-inline-0.1.6-1.src.rpmpython3-openidnoarch099cd03ab5faf19edbfce68ddfe3fd7d2c752426ae95971ca9045747a2b3e62dOpenID support for modern servers and consumers.This is a set of Python packages to support use of
the OpenID decentralized identity system in your application, update to Python
3. Want to enable single sign-on for your web site? Use the openid.consumer
package. Want to run your own OpenID server? Check out openid.server.
Includes example code and support for a variety of storage back-ends.http://github.com/necaris/python3-openidApache Software LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0b6ed2b8-cc4e-4b20-b9c9-cf90c0463502python3-openid-3.2.0-1.src.rpmpython3-openidnoarche63a22729ddb39911523cc9b60969045f498f1b7d89c14dd242d0bdae265facbOpenID support for modern servers and consumers.This is a set of Python packages to support use of
the OpenID decentralized identity system in your application, update to Python
3. Want to enable single sign-on for your web site? Use the openid.consumer
package. Want to run your own OpenID server? Check out openid.server.
Includes example code and support for a variety of storage back-ends.http://github.com/necaris/python3-openidApache Software LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-7942470d-bb58-4e0d-9074-e9740096ce13python3-openid-3.2.0-1.src.rpmpython3-openidsrcc3fdb50258d10fb72c96992d6731e7a1de9e13c93c5e927ba08198324eacd1daOpenID support for modern servers and consumers.This is a set of Python packages to support use of
the OpenID decentralized identity system in your application, update to Python
3. Want to enable single sign-on for your web site? Use the openid.consumer
package. Want to run your own OpenID server? Check out openid.server.
Includes example code and support for a variety of storage back-ends.http://github.com/necaris/python3-openidApache Software LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0b6ed2b8-cc4e-4b20-b9c9-cf90c0463502python3-openidsrc74f1e658c83a64534aa7f74ead78669725c0d928d260fbe557d8f3af054e4368OpenID support for modern servers and consumers.This is a set of Python packages to support use of
the OpenID decentralized identity system in your application, update to Python
3. Want to enable single sign-on for your web site? Use the openid.consumer
package. Want to run your own OpenID server? Check out openid.server.
Includes example code and support for a variety of storage back-ends.http://github.com/necaris/python3-openidApache Software LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-7942470d-bb58-4e0d-9074-e9740096ce13python3-openid-helpnoarch451011ef5f2c02ea3afa0d6476f173250be08fe355ceaeec99a0c7519f11d7b8Development documents and examples for python3-openidThis is a set of Python packages to support use of
the OpenID decentralized identity system in your application, update to Python
3. Want to enable single sign-on for your web site? Use the openid.consumer
package. Want to run your own OpenID server? Check out openid.server.
Includes example code and support for a variety of storage back-ends.http://github.com/necaris/python3-openidApache Software LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0b6ed2b8-cc4e-4b20-b9c9-cf90c0463502python3-openid-3.2.0-1.src.rpmpython3-openid-helpnoarch82957f547a4697a402a6913331bce1611afe434782be86cf47bbf856615a5fe1Development documents and examples for python3-openidThis is a set of Python packages to support use of
the OpenID decentralized identity system in your application, update to Python
3. Want to enable single sign-on for your web site? Use the openid.consumer
package. Want to run your own OpenID server? Check out openid.server.
Includes example code and support for a variety of storage back-ends.http://github.com/necaris/python3-openidApache Software LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-7942470d-bb58-4e0d-9074-e9740096ce13python3-openid-3.2.0-1.src.rpmpython3-openid-teamsnoarchafe3db79d6d4d253a03b0d0f2aabad61d14a08b1fcdf63cbfac9f5b04f19e53aThis is an implementation of the OpenID teams extension for python-openidUNKNOWNhttp://www.github.com/puiterwijk/python-openid-teams/BSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-61dbe87a-e7a7-43b4-ba46-63040509c770python-openid-teams-1.1-2.src.rpmpython3-openid-teamsnoarch8b031c08dbe60e217071fff70bc4225f1fd9d3d5da2e7a9a2f1a681c817ff4d7This is an implementation of the OpenID teams extension for python-openidUNKNOWNhttp://www.github.com/puiterwijk/python-openid-teams/BSDopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9e090f89-0247-4d1a-8d75-c2278b715dd3python-openid-teams-1.1-2.src.rpmpython3-openidc-clientnoarch8d7dcbd77bbe3705dec1df4388e7f4979e4f4cce7c825e11f593f7a78f108dbfPython OpenID Connect client with token caching and managementPython OpenID Connect client with token caching and management.MITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f3f390ee-6fe4-426e-a181-b4409f719372python-openidc-client-0.6.0-1.src.rpmpython3-openidc-clientnoarch31160f70f79d880acb04542689590a39dad317dd9dbc1b03d6d4855f2a170259Python OpenID Connect client with token caching and managementPython OpenID Connect client with token caching and management.MITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-417c2a80-ef5f-4edd-863b-d3040f7a4575python-openidc-client-0.6.0-1.src.rpmpython3-os-service-typesnoarch3d66bfb42f654dc7358a0c55d3c6d6555f84e1d59224a0f2d4a609f05e162b3ePython library for consuming OpenStack sevice-types-authority datahttps://pypi.org/project/os-service-types/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a5f6aa8d-7696-4065-bcc3-8f92d36579e8python-os-service-types-1.7.0-2.src.rpmpython3-oslo-concurrencynoarchcddaf6e010eff181a329512a0f6053e9ce27db1a3514dd6f0468a7d7e653335cOslo Concurrency libraryOpenStack library for all concurrency-related codehttps://docs.openstack.org/oslo.concurrency/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-6d6e1390-3217-4e8b-82cb-0c57f99f5564python-oslo-concurrency-4.5.0-1.src.rpm/usr/bin/lockutils-wrapperpython3-oslo-confignoarch2262fc3097ca390421ff6ea9ae47e4a7eb9c8078ab9b64a127589efe8730d55aOslo Configuration APIThe Oslo configuration API supports parsing command line arguments and .ini style configuration files.https://docs.openstack.org/oslo.config/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b40fadf4-4576-4235-b5e9-fbf3af4a8ae6python-oslo-config-9.0.0-1.src.rpm/usr/bin/oslo-config-generator/usr/bin/oslo-config-validatorpython3-oslo-confignoarch53c1b53eba5918bf1d6e4313081ff01b75b74ff29e72e30eb8ebb6ade1e6dafbOslo Configuration APIThe Oslo configuration API supports parsing command line arguments and .ini style configuration files.https://docs.openstack.org/oslo.config/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-cf67d65b-0d6a-4cfe-beb3-c003d20bc721python-oslo-config-9.1.0-1.src.rpm/usr/bin/oslo-config-generator/usr/bin/oslo-config-validatorpython3-oslo-i18nnoarch96f869e7d7b78d295e5c3e98aa9f52bff05bdbc037009d760f9f4119c0036e30Oslo i18n libraryInternationalization and translation libraryhttps://docs.openstack.org/oslo.i18n/latestApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3a215e0b-61e9-409b-af79-c4304827e921python-oslo-i18n-5.1.0-1.src.rpmpython3-oslo-i18nnoarch71fef49b756ea86acaefaacb6460f10e56288f25a814481d1d1672f77976c0e2Oslo i18n libraryInternationalization and translation libraryhttps://docs.openstack.org/oslo.i18n/latestApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-85a9621a-c7f4-4d70-8b45-66691feb532fpython-oslo-i18n-5.1.0-1.src.rpmpython3-oslo-serializationnoarchc16cadaf3c9e8ca38bf38e5433220ff3c89df158c53899dc611e91bf46d67a52Oslo Serialization libraryThe oslo.serialization library provides support for representing objects in
transmittable and storable formats, such as Base64, JSON and MessagePack.https://docs.openstack.org/oslo.serialization/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d8cbaca8-13e6-4fe0-8de4-38338d7ac8f5python-oslo-serialization-4.3.0-1.src.rpmpython3-oslo-utilsnoarch05c83a649a9621ae96849f8971ca7ae7dba8402e8d175588c0102a26e597b216Oslo Utility libraryThe oslo.utils library provides support for common utility type functions,
such as encoding, exception handling, string manipulation, and time handling.https://docs.openstack.org/oslo.utils/latest/Apache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-644b051f-ac99-4b66-a5d5-0b91767de35apython-oslo-utils-4.12.3-1.src.rpmpython3-parsonoarch7a2ef8d7232c7f0d920b8a6810f0aad3d9153c0f09c90ce4671d747d49c559a3A Python ParserParso is a Python parser that supports error recovery and round-trip parsing
for different Python versions. Parso consists of a small API to parse Python
and analyse the syntax tree.https://github.com/davidhalter/parsoMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bd897c51-3491-463f-a3ce-75942e9df15bpython-parso-0.8.3-1.src.rpmpython3-parsonoarch9e45ff78ff166f7efad8b095667d335737e61b87a217e4ea9763f82c1198b3f3A Python ParserParso is a Python parser that supports error recovery and round-trip parsing
for different Python versions. Parso consists of a small API to parse Python
and analyse the syntax tree.https://github.com/davidhalter/parsoMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9cc05245-60c9-4336-8732-08e0f59d08e0python-parso-0.8.3-1.src.rpmpython3-picklesharenoarch44c0c65bee304915329d47afe41a8474d7d79d12dd69687e6e1f4ee78c0a3e88Tiny 'shelve'-like database with concurrency supportPickleShare - a small 'shelve' like datastore with concurrency support
Like shelve, a PickleShareDB object acts like a normal dictionary. Unlike shelve,
many processes can access the database simultaneously. Changing a value in
database is immediately visible to other processes accessing the same database.
Concurrency is possible because the values are stored in separate files. Hence
the "database" is a directory where *all* files are governed by PickleShare.
Example usage::
from pickleshare import *
db = PickleShareDB('~/testpickleshare')
db.clear()
print("Should be empty:",db.items())
db['hello'] = 15
db['aku ankka'] = [1,2,313]
db['paths/are/ok/key'] = [1,(5,46)]
print(db.keys())
This module is certainly not ZODB, but can be used for low-load
(non-mission-critical) situations where tiny code size trumps the
advanced features of a "real" object database.
Installation guide: pip install picklesharehttps://github.com/pickleshare/pickleshareMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5e7cc4dd-b259-447b-85c8-0fd821d139a3python-pickleshare-0.7.5-1.src.rpmpython3-prompt-toolkitnoarch9d48fb3509fe2c3a456e4db654bb2b6a7a16312970c1971e30ab913023994b62Library for building powerful interactive command lines in Pythonprompt_toolkit is a library for building powerful interactive command lines and
terminal applications in Python.https://github.com/prompt-toolkit/python-prompt-toolkitBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-01b50073-cc6a-4c0f-9b13-4e72d09d5469python-prompt-toolkit-3.0.38-1.src.rpmpython3-prompt-toolkitnoarcha5445478637de73230183ca32436aa35c5bc2f1b28770fdcd3b88dcd1d94cf55Library for building powerful interactive command lines in Pythonprompt_toolkit is a library for building powerful interactive command lines and
terminal applications in Python.https://github.com/prompt-toolkit/python-prompt-toolkitBSD-3-ClauseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-af81c92f-00f3-4261-be34-f6c29ea6ad5dpython-prompt-toolkit-3.0.38-1.src.rpmpython3-pure-evalnoarche795b997b46a2b47a1cf459fcce67ed7e05655f37b44e36d8908e5e8e827bc48Safely evaluate AST nodes without side effects
[![Build Status](https://travis-ci.org/alexmojaki/pure_eval.svg?branch=master)](https://travis-ci.org/alexmojaki/pure_eval) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/pure_eval/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/pure_eval?branch=master) [![Supports Python versions 3.5+](https://img.shields.io/pypi/pyversions/pure_eval.svg)](https://pypi.python.org/pypi/pure_eval)
This is a Python package that lets you safely evaluate certain AST nodes without triggering arbitrary code that may have unwanted side effects.
It can be installed from PyPI:
pip install pure_eval
To demonstrate usage, suppose we have an object defined as follows:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
print("Calculating area...")
return self.width * self.height
rect = Rectangle(3, 5)
```
Given the `rect` object, we want to evaluate whatever expressions we can in this source code:
```python
source = "(rect.width, rect.height, rect.area)"
```
This library works with the AST, so let's parse the source code and peek inside:
```python
import ast
tree = ast.parse(source)
the_tuple = tree.body[0].value
for node in the_tuple.elts:
print(ast.dump(node))
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='area', ctx=Load())
```
Now to actually use the library. First construct an Evaluator:
```python
from pure_eval import Evaluator
evaluator = Evaluator({"rect": rect})
```
The argument to `Evaluator` should be a mapping from variable names to their values. Or if you have access to the stack frame where `rect` is defined, you can instead use:
```python
evaluator = Evaluator.from_frame(frame)
```
Now to evaluate some nodes, using `evaluator[node]`:
```python
print("rect.width:", evaluator[the_tuple.elts[0]])
print("rect:", evaluator[the_tuple.elts[0].value])
```
Output:
```
rect.width: 3
rect: <__main__.Rectangle object at 0x105b0dd30>
```
OK, but you could have done the same thing with `eval`. The useful part is that it will refuse to evaluate the property `rect.area` because that would trigger unknown code. If we try, it'll raise a `CannotEval` exception.
```python
from pure_eval import CannotEval
try:
print("rect.area:", evaluator[the_tuple.elts[2]]) # fails
except CannotEval as e:
print(e) # prints CannotEval
```
To find all the expressions that can be evaluated in a tree:
```python
for node, value in evaluator.find_expressions(tree):
print(ast.dump(node), value)
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load()) 3
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load()) 5
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
```
Note that this includes `rect` three times, once for each appearance in the source code. Since all these nodes are equivalent, we can group them together:
```python
from pure_eval import group_expressions
for nodes, values in group_expressions(evaluator.find_expressions(tree)):
print(len(nodes), "nodes with value:", values)
```
Output:
```
1 nodes with value: 3
1 nodes with value: 5
3 nodes with value: <__main__.Rectangle object at 0x10d374d30>
```
If we want to list all the expressions in a tree, we may want to filter out certain expressions whose values are obvious. For example, suppose we have a function `foo`:
```python
def foo():
pass
```
If we refer to `foo` by its name as usual, then that's not interesting:
```python
from pure_eval import is_expression_interesting
node = ast.parse('foo').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='foo', ctx=Load())
False
```
But if we refer to it by a different name, then it's interesting:
```python
node = ast.parse('bar').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='bar', ctx=Load())
True
```
In general `is_expression_interesting` returns False for the following values:
- Literals (e.g. `123`, `'abc'`, `[1, 2, 3]`, `{'a': (), 'b': ([1, 2], [3])}`)
- Variables or attributes whose name is equal to the value's `__name__`, such as `foo` above or `self.foo` if it was a method.
- Builtins (e.g. `len`) referred to by their usual name.
To make things easier, you can combine finding expressions, grouping them, and filtering out the obvious ones with:
```python
evaluator.interesting_expressions_grouped(root)
```
To get the source code of an AST node, I recommend [asttokens](https://github.com/gristlabs/asttokens).
Here's a complete example that brings it all together:
```python
from asttokens import ASTTokens
from pure_eval import Evaluator
source = """
x = 1
d = {x: 2}
y = d[x]
"""
names = {}
exec(source, names)
atok = ASTTokens(source, parse=True)
for nodes, value in Evaluator(names).interesting_expressions_grouped(atok.tree):
print(atok.get_text(nodes[0]), "=", value)
```
Output:
```python
x = 1
d = {1: 2}
y = 2
d[x] = 2
```http://github.com/alexmojaki/pure_evalMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d6169a16-f26e-4aff-8ad9-07585da931d8python-pure-eval-0.2.2-1.src.rpmpython3-pure-evalnoarch29e4c786410bca6ea2e06be1552860cd260fe352751045f49fa8ddfd04cb94e6Safely evaluate AST nodes without side effects
[![Build Status](https://travis-ci.org/alexmojaki/pure_eval.svg?branch=master)](https://travis-ci.org/alexmojaki/pure_eval) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/pure_eval/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/pure_eval?branch=master) [![Supports Python versions 3.5+](https://img.shields.io/pypi/pyversions/pure_eval.svg)](https://pypi.python.org/pypi/pure_eval)
This is a Python package that lets you safely evaluate certain AST nodes without triggering arbitrary code that may have unwanted side effects.
It can be installed from PyPI:
pip install pure_eval
To demonstrate usage, suppose we have an object defined as follows:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
print("Calculating area...")
return self.width * self.height
rect = Rectangle(3, 5)
```
Given the `rect` object, we want to evaluate whatever expressions we can in this source code:
```python
source = "(rect.width, rect.height, rect.area)"
```
This library works with the AST, so let's parse the source code and peek inside:
```python
import ast
tree = ast.parse(source)
the_tuple = tree.body[0].value
for node in the_tuple.elts:
print(ast.dump(node))
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='area', ctx=Load())
```
Now to actually use the library. First construct an Evaluator:
```python
from pure_eval import Evaluator
evaluator = Evaluator({"rect": rect})
```
The argument to `Evaluator` should be a mapping from variable names to their values. Or if you have access to the stack frame where `rect` is defined, you can instead use:
```python
evaluator = Evaluator.from_frame(frame)
```
Now to evaluate some nodes, using `evaluator[node]`:
```python
print("rect.width:", evaluator[the_tuple.elts[0]])
print("rect:", evaluator[the_tuple.elts[0].value])
```
Output:
```
rect.width: 3
rect: <__main__.Rectangle object at 0x105b0dd30>
```
OK, but you could have done the same thing with `eval`. The useful part is that it will refuse to evaluate the property `rect.area` because that would trigger unknown code. If we try, it'll raise a `CannotEval` exception.
```python
from pure_eval import CannotEval
try:
print("rect.area:", evaluator[the_tuple.elts[2]]) # fails
except CannotEval as e:
print(e) # prints CannotEval
```
To find all the expressions that can be evaluated in a tree:
```python
for node, value in evaluator.find_expressions(tree):
print(ast.dump(node), value)
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load()) 3
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load()) 5
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
```
Note that this includes `rect` three times, once for each appearance in the source code. Since all these nodes are equivalent, we can group them together:
```python
from pure_eval import group_expressions
for nodes, values in group_expressions(evaluator.find_expressions(tree)):
print(len(nodes), "nodes with value:", values)
```
Output:
```
1 nodes with value: 3
1 nodes with value: 5
3 nodes with value: <__main__.Rectangle object at 0x10d374d30>
```
If we want to list all the expressions in a tree, we may want to filter out certain expressions whose values are obvious. For example, suppose we have a function `foo`:
```python
def foo():
pass
```
If we refer to `foo` by its name as usual, then that's not interesting:
```python
from pure_eval import is_expression_interesting
node = ast.parse('foo').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='foo', ctx=Load())
False
```
But if we refer to it by a different name, then it's interesting:
```python
node = ast.parse('bar').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='bar', ctx=Load())
True
```
In general `is_expression_interesting` returns False for the following values:
- Literals (e.g. `123`, `'abc'`, `[1, 2, 3]`, `{'a': (), 'b': ([1, 2], [3])}`)
- Variables or attributes whose name is equal to the value's `__name__`, such as `foo` above or `self.foo` if it was a method.
- Builtins (e.g. `len`) referred to by their usual name.
To make things easier, you can combine finding expressions, grouping them, and filtering out the obvious ones with:
```python
evaluator.interesting_expressions_grouped(root)
```
To get the source code of an AST node, I recommend [asttokens](https://github.com/gristlabs/asttokens).
Here's a complete example that brings it all together:
```python
from asttokens import ASTTokens
from pure_eval import Evaluator
source = """
x = 1
d = {x: 2}
y = d[x]
"""
names = {}
exec(source, names)
atok = ASTTokens(source, parse=True)
for nodes, value in Evaluator(names).interesting_expressions_grouped(atok.tree):
print(atok.get_text(nodes[0]), "=", value)
```
Output:
```python
x = 1
d = {1: 2}
y = 2
d[x] = 2
```http://github.com/alexmojaki/pure_evalMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-bfd2efdb-39f3-4891-bdcb-a97c96937753python-pure-eval-0.2.2-1.src.rpmpython3-pure-evalnoarchc5604b3e74afca381f84056c2c62ef89739de639b9c006f24b29601291da473eSafely evaluate AST nodes without side effects
[![Build Status](https://travis-ci.org/alexmojaki/pure_eval.svg?branch=master)](https://travis-ci.org/alexmojaki/pure_eval) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/pure_eval/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/pure_eval?branch=master) [![Supports Python versions 3.5+](https://img.shields.io/pypi/pyversions/pure_eval.svg)](https://pypi.python.org/pypi/pure_eval)
This is a Python package that lets you safely evaluate certain AST nodes without triggering arbitrary code that may have unwanted side effects.
It can be installed from PyPI:
pip install pure_eval
To demonstrate usage, suppose we have an object defined as follows:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
print("Calculating area...")
return self.width * self.height
rect = Rectangle(3, 5)
```
Given the `rect` object, we want to evaluate whatever expressions we can in this source code:
```python
source = "(rect.width, rect.height, rect.area)"
```
This library works with the AST, so let's parse the source code and peek inside:
```python
import ast
tree = ast.parse(source)
the_tuple = tree.body[0].value
for node in the_tuple.elts:
print(ast.dump(node))
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load())
Attribute(value=Name(id='rect', ctx=Load()), attr='area', ctx=Load())
```
Now to actually use the library. First construct an Evaluator:
```python
from pure_eval import Evaluator
evaluator = Evaluator({"rect": rect})
```
The argument to `Evaluator` should be a mapping from variable names to their values. Or if you have access to the stack frame where `rect` is defined, you can instead use:
```python
evaluator = Evaluator.from_frame(frame)
```
Now to evaluate some nodes, using `evaluator[node]`:
```python
print("rect.width:", evaluator[the_tuple.elts[0]])
print("rect:", evaluator[the_tuple.elts[0].value])
```
Output:
```
rect.width: 3
rect: <__main__.Rectangle object at 0x105b0dd30>
```
OK, but you could have done the same thing with `eval`. The useful part is that it will refuse to evaluate the property `rect.area` because that would trigger unknown code. If we try, it'll raise a `CannotEval` exception.
```python
from pure_eval import CannotEval
try:
print("rect.area:", evaluator[the_tuple.elts[2]]) # fails
except CannotEval as e:
print(e) # prints CannotEval
```
To find all the expressions that can be evaluated in a tree:
```python
for node, value in evaluator.find_expressions(tree):
print(ast.dump(node), value)
```
Output:
```python
Attribute(value=Name(id='rect', ctx=Load()), attr='width', ctx=Load()) 3
Attribute(value=Name(id='rect', ctx=Load()), attr='height', ctx=Load()) 5
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
Name(id='rect', ctx=Load()) <__main__.Rectangle object at 0x105568d30>
```
Note that this includes `rect` three times, once for each appearance in the source code. Since all these nodes are equivalent, we can group them together:
```python
from pure_eval import group_expressions
for nodes, values in group_expressions(evaluator.find_expressions(tree)):
print(len(nodes), "nodes with value:", values)
```
Output:
```
1 nodes with value: 3
1 nodes with value: 5
3 nodes with value: <__main__.Rectangle object at 0x10d374d30>
```
If we want to list all the expressions in a tree, we may want to filter out certain expressions whose values are obvious. For example, suppose we have a function `foo`:
```python
def foo():
pass
```
If we refer to `foo` by its name as usual, then that's not interesting:
```python
from pure_eval import is_expression_interesting
node = ast.parse('foo').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='foo', ctx=Load())
False
```
But if we refer to it by a different name, then it's interesting:
```python
node = ast.parse('bar').body[0].value
print(ast.dump(node))
print(is_expression_interesting(node, foo))
```
Output:
```python
Name(id='bar', ctx=Load())
True
```
In general `is_expression_interesting` returns False for the following values:
- Literals (e.g. `123`, `'abc'`, `[1, 2, 3]`, `{'a': (), 'b': ([1, 2], [3])}`)
- Variables or attributes whose name is equal to the value's `__name__`, such as `foo` above or `self.foo` if it was a method.
- Builtins (e.g. `len`) referred to by their usual name.
To make things easier, you can combine finding expressions, grouping them, and filtering out the obvious ones with:
```python
evaluator.interesting_expressions_grouped(root)
```
To get the source code of an AST node, I recommend [asttokens](https://github.com/gristlabs/asttokens).
Here's a complete example that brings it all together:
```python
from asttokens import ASTTokens
from pure_eval import Evaluator
source = """
x = 1
d = {x: 2}
y = d[x]
"""
names = {}
exec(source, names)
atok = ASTTokens(source, parse=True)
for nodes, value in Evaluator(names).interesting_expressions_grouped(atok.tree):
print(atok.get_text(nodes[0]), "=", value)
```
Output:
```python
x = 1
d = {1: 2}
y = 2
d[x] = 2
```http://github.com/alexmojaki/pure_evalMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-28901d3c-6848-4905-aeee-d565a7a9b5fepython-pure-eval-0.2.2-1.src.rpmpython3-py3dnsnoarch4d6e9efcb049ab460121e1ccc37ea3919cc6076372570b1dae8600f4ac3b1411Python 3 DNS libraryPython 3 DNS library:https://launchpad.net/py3dnsPython LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f77559c1-b12e-4852-a0dc-e078212b95ffpython-py3dns-3.2.1-1.src.rpmpython3-py3dnsnoarch8c43ab733b68cbb7f777fc2d2093f2dc0e33a8ae189d3f4d74c7b9d4aab0d97cPython 3 DNS libraryPython 3 DNS library:https://launchpad.net/py3dnsPython LicenseopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9c02a247-0147-4ca0-919c-78dc30b480eepython-py3dns-3.2.1-1.src.rpmpython3-pyLibravatarnoarch47923cb1f8530ef742ddfa01719bc092a9bf2d775730648194c0b88067d6d24cPython module for LibravatarPyLibravatar is an easy way to make use of the federated Libravatar_ avatar
hosting service from within your Python applications.https://launchpad.net/pylibravatarMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-00bc5c01-9806-42b7-a1b2-fff4e2cf988epython-pyLibravatar-1.7-1.src.rpmpython3-pyLibravatarnoarch2281629529ef7529e674f4a3603b1269ad324ecdc41df0cdde41670613b3659aPython module for LibravatarPyLibravatar is an easy way to make use of the federated Libravatar_ avatar
hosting service from within your Python applications.https://launchpad.net/pylibravatarMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5e08ea01-46cf-4044-aae1-042c308fbdeepython-pyLibravatar-1.7-2.src.rpmpython3-pyLibravatarnoarch5cfa5b62fd0169a399c7c36ce19e0d29ba41704406b336dd2908fefb6ff2a25ePython module for LibravatarPyLibravatar is an easy way to make use of the federated Libravatar_ avatar
hosting service from within your Python applications.https://launchpad.net/pylibravatarMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-d3e51e38-580b-42c2-ad42-81a7d29fe97apython-pyLibravatar-1.7-2.src.rpmpython3-pyLibravatarnoarchcbd50214ccffca4bf99ddbc35cdbbe67d701740d9f2678b8dafc28747667777aPython module for LibravatarPyLibravatar is an easy way to make use of the federated Libravatar_ avatar
hosting service from within your Python applications.https://launchpad.net/pylibravatarMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-87f0e2db-01d9-4996-a551-13de6dc2e200python-pyLibravatar-1.7-2.src.rpmpython3-pygalnoarcha934effd1adad4d36a9523ddb8e5e8817e49ec9f6eaa709274007bdbac21940eA Python svg graph plotting libraryhttps://www.pygal.org/LGPL-3.0+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0800d4a9-d6af-4770-96e7-9ee55cf1965cpython-pygal-3.0.0-1.src.rpm/usr/bin/pygal_gen.pypython3-pygalnoarch57addf34560a77abceaf38918050542a6bd078e5e4c1ee46abc6480bbcd4750cA Python svg graph plotting libraryhttps://www.pygal.org/LGPL-3.0+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a73bcb1a-fbd3-44ba-8caa-c7e028a1ea8bpython-pygal-3.0.0-1.src.rpm/usr/bin/pygal_gen.pypython3-pygit2x86_64fd86f09abda44ab37752686fff3f4736797bbd43c5b855cbd4aff0983291fd97Python bindings for libgit2.- Documentation - http://www.pygit2.org/
- Install - http://www.pygit2.org/install.html
- Download - https://pypi.python.org/pypi/pygit2
- Source code and issue tracker - https://github.com/libgit2/pygit2
- Changelog - https://github.com/libgit2/pygit2/blob/master/CHANGELOG.rst
- Authors - https://github.com/libgit2/pygit2/blob/master/AUTHORS.rsthttps://github.com/libgit2/pygit2GPLv2 with linking exceptionopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-4acce24f-a362-464e-8420-7a87eca38abfpython-pygit2-1.7.1-1.src.rpmpython3-pygit2x86_64c661cb69206e7608da6ce6d25df467a2b286cf3b7803d31368c2c42826ec8a42Python bindings for libgit2.- Documentation - http://www.pygit2.org/
- Install - http://www.pygit2.org/install.html
- Download - https://pypi.python.org/pypi/pygit2
- Source code and issue tracker - https://github.com/libgit2/pygit2
- Changelog - https://github.com/libgit2/pygit2/blob/master/CHANGELOG.rst
- Authors - https://github.com/libgit2/pygit2/blob/master/AUTHORS.rsthttps://github.com/libgit2/pygit2GPLv2 with linking exceptionopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-b1276125-1890-411d-880b-d8af2f7f5ed9python-pygit2-1.7.1-1.src.rpmpython3-resallocnoarch39e7a9adc1953763a04e3106ce2fc4c5154c9893b05f833b9506047363bf02a8Resource allocator for expensive resources - Python 3 client library
The resalloc project aims to help with taking care of dynamically
allocated resources, for example ephemeral virtual machines used for
the purposes of CI/CD tasks.
The python3-resalloc package provides Python 3 client library for talking
to the resalloc server.https://github.com/praiskup/resallocGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-658cca24-b5c4-4c9e-bba4-53a5467954beresalloc-4.9-1.src.rpmpython3-responsesnoarcha31b8cd4d709963fa4d0a2636a1d738301440c96d68994315fbeb26313da766dA utility library for mocking out the `requests` Python library.A utility library for mocking out the requests Python library.https://github.com/getsentry/responsesApache-2.0openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-6ae81ef6-8052-4f25-882b-07766d63f014python-responses-0.18.0-1.src.rpmpython3-retasknoarch719e6f58169d091df8af230bd5cff7dc60efda8a7d6ff342494f60a576d31a99Python module to create and manage distributed task queuesPython module to create and manage distributed task queues using redis.http://retask.readthedocs.org/en/latest/index.htmlMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-100e6971-a6f4-4810-979b-d8cf3f13bc08python-retask-0.4-1.src.rpmpython3-richnoarch405a93b81b997f84b23ca7f971b7a8d1affda75177e0ae473080824a6db22005Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminalRich is a Python library for rich text and beautiful formatting in the terminalhttps://github.com/willmcgugan/richMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-fe180c04-616f-49e9-88bd-508b3843fbe3python-rich-12.6.0-1.src.rpmpython3-richnoarchb27a08dea8278fab47b2157d9ee83e1cb8da2bd07b1dd3d6c5b6eb25573a3cc3Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminalRich is a Python library for rich text and beautiful formatting in the terminalhttps://github.com/willmcgugan/richMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-a2376eb7-ee08-44ac-a4a4-1d442fcd750cpython-rich-12.6.0-1.src.rpmpython3-rpkgnoarch7e00a72c7d1c8e1949cd94e840c68c91b9305d7402688b0887e4c7da5721e767Python library for interacting with rpm+gitA python library for managing RPM package sources in a git repository.https://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-77515a83-31eb-48cd-afa0-c347818e46d3rpkg-1.65-1.src.rpmpython3-rpkgnoarchb57a9a4d173515e8fb583006388f1fb5d9dd406bdf12a158d6dc8da9cca72406Python library for interacting with rpm+gitA python library for managing RPM package sources in a git repository.https://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-fc4268c0-b123-4c53-b91c-aa7c8849a727rpkg-1.65-1.src.rpmpython3-rpkgnoarchdd79f40aaa8b7b56424b46783dff7d01a67a95b9a87c5e49be32b4d4c66dfd09Python library for interacting with rpm+gitA python library for managing RPM package sources in a git repository.https://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3dc05d57-272c-497d-bbe7-c5a884e1c30crpkg-1.65-1.src.rpmpython3-rpmautospecnoarch2997e2199d59d3ac759c57caf2d5b869ef2ede192bd7ab5f1dcb3622aa5c99fePackage and CLI tool to generate release fields and changelogsA package and CLI tool to generate RPM release fields and changelogs.https://pagure.io/fedora-infra/rpmautospecMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c193af30-d8cf-41b3-964b-b57181e178a6python-rpmautospec-0.3.5-1.src.rpmpython3-rpmautospecnoarchc0ac3dde91b39949648bd27a15c2242e3c57d1ec812b18c1fa2f36b6a654ffd5Package and CLI tool to generate release fields and changelogsA package and CLI tool to generate RPM release fields and changelogs.https://pagure.io/fedora-infra/rpmautospecMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f4072875-c26a-4cd8-abb4-0b60ae8fd4e9python-rpmautospec-0.3.5-1.src.rpmpython3-stack-datanoarch11d03e22d5d9a1fd76c95ae289120dc5134dfbf3c8380e856ab887e5261aca78Extract data from python stack frames and tracebacks for informative displays 6 | for i in range(5):
7 | row = []
8 | result.append(row)
--> 9 | print_stack()
10 | for j in range(5):
```
The code for `print_stack()` is fairly self-explanatory. If you want to learn more details about a particular class or method I suggest looking through some docstrings. `FrameInfo` is a class that accepts either a frame or a traceback object and provides a bunch of nice attributes and properties (which are cached so you don't need to worry about performance). In particular `frame_info.lines` is a list of `Line` objects. `line.render()` returns the source code of that line suitable for display. Without any arguments it simply strips any common leading indentation. Later on we'll see a more powerful use for it.
You can see that `frame_info.lines` includes some lines of surrounding context. By default it includes 3 pieces of context before the main line and 1 piece after. We can configure the amount of context by passing options:
```python
options = stack_data.Options(before=1, after=0)
frame_info = stack_data.FrameInfo(frame, options)
```
Then the output looks like:
```http://github.com/alexmojaki/stack_dataMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-44fa049c-439e-4037-af41-f0f230cb78a2python-stack-data-0.6.2-1.src.rpmpython3-stack-datanoarch64e4ea34deb958141788afb531455f58e0a1a5e04d300f200e82d0571c4aa3faExtract data from python stack frames and tracebacks for informative displays 6 | for i in range(5):
7 | row = []
8 | result.append(row)
--> 9 | print_stack()
10 | for j in range(5):
```
The code for `print_stack()` is fairly self-explanatory. If you want to learn more details about a particular class or method I suggest looking through some docstrings. `FrameInfo` is a class that accepts either a frame or a traceback object and provides a bunch of nice attributes and properties (which are cached so you don't need to worry about performance). In particular `frame_info.lines` is a list of `Line` objects. `line.render()` returns the source code of that line suitable for display. Without any arguments it simply strips any common leading indentation. Later on we'll see a more powerful use for it.
You can see that `frame_info.lines` includes some lines of surrounding context. By default it includes 3 pieces of context before the main line and 1 piece after. We can configure the amount of context by passing options:
```python
options = stack_data.Options(before=1, after=0)
frame_info = stack_data.FrameInfo(frame, options)
```
Then the output looks like:
```http://github.com/alexmojaki/stack_dataMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-62785097-dbd7-4d64-b4f4-7feaf3f3efb7python-stack-data-0.6.2-1.src.rpmpython3-stack-datanoarch125b49c675153ccf76a75acb555695dc3801201c2bcd75ab683d056fa632d059Extract data from python stack frames and tracebacks for informative displays 6 | for i in range(5):
7 | row = []
8 | result.append(row)
--> 9 | print_stack()
10 | for j in range(5):
```
The code for `print_stack()` is fairly self-explanatory. If you want to learn more details about a particular class or method I suggest looking through some docstrings. `FrameInfo` is a class that accepts either a frame or a traceback object and provides a bunch of nice attributes and properties (which are cached so you don't need to worry about performance). In particular `frame_info.lines` is a list of `Line` objects. `line.render()` returns the source code of that line suitable for display. Without any arguments it simply strips any common leading indentation. Later on we'll see a more powerful use for it.
You can see that `frame_info.lines` includes some lines of surrounding context. By default it includes 3 pieces of context before the main line and 1 piece after. We can configure the amount of context by passing options:
```python
options = stack_data.Options(before=1, after=0)
frame_info = stack_data.FrameInfo(frame, options)
```
Then the output looks like:
```http://github.com/alexmojaki/stack_dataMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-ae8d7b52-e865-43b2-b6ef-ba1ad248b58dpython-stack-data-0.6.2-1.src.rpmpython3-templated-dictionarynoarchd8b02f4104494005a8d57726938175f7a745e7fd71473310ca6e5378d7cd3b8aDictionary with Jinja2 expansionDictionary where __getitem__() is run through Jinja2 template.https://github.com/xsuchy/templated-dictionaryGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-491e1250-c171-4c4a-952b-8f6f33eca728python-templated-dictionary-1.2-1.src.rpmresallocnoarch42b503ec889f9ad79e01a87114796bcf89abeac5d9db0e2e171fd3a98cafc40fResource allocator for expensive resources - client tooling
The resalloc project aims to help with taking care of dynamically
allocated resources, for example ephemeral virtual machines used for
the purposes of CI/CD tasks.
The resalloc package provides the client-side tooling.https://github.com/praiskup/resallocGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-658cca24-b5c4-4c9e-bba4-53a5467954beresalloc-4.9-1.src.rpm/usr/bin/resallocresallocsrc2a3cbe504e377d89e4bbc3130a2d6eb528a29931ebdfdfc6e853a4bc4fb446e5Resource allocator for expensive resources - client tooling
The resalloc project aims to help with taking care of dynamically
allocated resources, for example ephemeral virtual machines used for
the purposes of CI/CD tasks.
The resalloc package provides the client-side tooling.https://github.com/praiskup/resallocGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-658cca24-b5c4-4c9e-bba4-53a5467954beresalloc-selinuxnoarchb29d919166938ad4531c24c04e57ed57f426b4f45761d8cd3a251159edef6b1dSELinux module for resalloc
The resalloc project aims to help with taking care of dynamically
allocated resources, for example ephemeral virtual machines used for
the purposes of CI/CD tasks.https://github.com/praiskup/resallocGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-658cca24-b5c4-4c9e-bba4-53a5467954beresalloc-4.9-1.src.rpmresalloc-servernoarch28e8d1cf0558b5ae30faef38e43195e3fadf02684504c5c76a3c1f623057feb9Resource allocator for expensive resources - server part
The resalloc project aims to help with taking care of dynamically
allocated resources, for example ephemeral virtual machines used for
the purposes of CI/CD tasks.
The resalloc-server package provides the resalloc server, and
some tooling for resalloc administrators.https://github.com/praiskup/resallocGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-658cca24-b5c4-4c9e-bba4-53a5467954beresalloc-4.9-1.src.rpm/etc/cron.hourly/resalloc/etc/logrotate.d/resalloc-server/etc/resallocserver/etc/resallocserver/pools.yaml/etc/resallocserver/server.yaml/usr/bin/resalloc-check-vm-ip/usr/bin/resalloc-maint/usr/bin/resalloc-serverresalloc-webuinoarch2b19ec54eda5e8f5834d8312cf92ee5da422e9e388812aaf39f0c90985e988ceResource allocator for expensive resources - webui part
The resalloc project aims to help with taking care of dynamically
allocated resources, for example ephemeral virtual machines used for
the purposes of CI/CD tasks.
The resalloc-webui package provides the resalloc webui,
it shows page with information about resalloc resources.https://github.com/praiskup/resallocGPL-2.0-or-lateropenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-658cca24-b5c4-4c9e-bba4-53a5467954beresalloc-4.9-1.src.rpmrpkgsrc8d25d02db71ed087b7634d1a827283417bd154648848027f019ae65f13e4ad84Python library for interacting with rpm+gitPython library for interacting with rpm+githttps://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-65762e79-067e-4c5f-9516-ab2ce04c9dd9rpkgsrc25d9776a660fb8d6f28bff6f46a555a76d8a84b5e2fdb753faf04f85b082341fPython library for interacting with rpm+gitPython library for interacting with rpm+githttps://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-77515a83-31eb-48cd-afa0-c347818e46d3rpkgsrc9a49f9caa9223f9980250fb5090dc988644b4a9d0f8dcca61f1cdd75f28680adPython library for interacting with rpm+gitPython library for interacting with rpm+githttps://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-fc4268c0-b123-4c53-b91c-aa7c8849a727rpkgsrcbcd54cbe6e026d467ae09fce3c48a3de0a00b239979300f14b6f575f2523d3e0Python library for interacting with rpm+gitPython library for interacting with rpm+githttps://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3dc05d57-272c-497d-bbe7-c5a884e1c30crpkgsrc6f8871d221b7f6fd2819e251554e38d4d1401d834101386f6dc8d100c01863a6Python library for interacting with rpm+gitPython library for interacting with rpm+githttps://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-1c6457cf-cfa4-48c5-9819-57b0e53721adrpkgsrcea43e85781c366a0a4649a26ae3138a77a8f64b0449ecb61a6992698f492ee1fPython library for interacting with rpm+gitPython library for interacting with rpm+githttps://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-cd6462bc-6275-4ec9-8f66-0c8520d2f1dbrpkgsrc71aeb42806c703e6f253188a9946bcd3ba1e6e81c9d3ad67d334b703333123f1Python library for interacting with rpm+gitPython library for interacting with rpm+githttps://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-be8a0cad-6742-488d-b04b-b2deec4769abrpkgnoarch500f1826bd0e2733240fd86828b196182075c037b5ee8a3cb02a2754645a1e13RPM packaging utilityThis is an RPM packaging utility that can work with both DistGit
and standard Git repositories and handles packed directory content
as well as unpacked one.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2cad18b6-0b9c-4145-b242-641bbc352851rpkg-util-3.2-1.src.rpm/etc/rpkg.conf/usr/bin/rpkgrpkgnoarch9a4788aa03cafa17d9919d7a5b1628a1ee2ecab69ad23c9d03adb35065d3da8dRPM packaging utilityThis is an RPM packaging utility that can work with both DistGit
and standard Git repositories and handles packed directory content
as well as unpacked one.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-6ed7d668-3966-4cd3-ba11-9539ec132f6erpkg-util-3.2-1.src.rpm/etc/rpkg.conf/usr/bin/rpkgrpkgnoarch0cfff664d651817fb2996dc17bc89753f1b1407dcbf580f24b137bb2e36d4510RPM packaging utilityThis is an RPM packaging utility that can work with both DistGit
and standard Git repositories and handles packed directory content
as well as unpacked one.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e30cd1bc-a86c-40b4-81f9-f212cb2b8d61rpkg-util-3.2-1.src.rpm/etc/rpkg.conf/usr/bin/rpkgrpkg-commonnoarch0a622837f4fdde55be91b26b25360a3287d3e0de6a5e09def30ae8077537bd13Common files for rpkgCommon files for python2-rpkg and python3-rpkg.https://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-77515a83-31eb-48cd-afa0-c347818e46d3rpkg-1.65-1.src.rpm/etc/rpkg/usr/share/rpkg/examples/cli/usr/bin/rpkgrpkg-commonnoarch2d2077c20edc7ae0af0d11b5745c15599077f0183aa402d7cde0b43522b87bcdCommon files for rpkgCommon files for python2-rpkg and python3-rpkg.https://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-fc4268c0-b123-4c53-b91c-aa7c8849a727rpkg-1.65-1.src.rpm/etc/rpkg/usr/share/rpkg/examples/cli/usr/bin/rpkgrpkg-commonnoarchdd59a72491d51fbf3b6dfe7f592e5f786ecc63fdea863389738a7a7acdd08bedCommon files for rpkgCommon files for python2-rpkg and python3-rpkg.https://pagure.io/rpkgGPLv2+ and LGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-3dc05d57-272c-497d-bbe7-c5a884e1c30crpkg-1.65-1.src.rpm/etc/rpkg/usr/share/rpkg/examples/cli/usr/bin/rpkgrpkg-macrosnoarch2e23f6894f658e796330e9e628dbcad907cf171c8f901394528d166cb8463f92Set of preproc macros for rpkg utilitySet of preproc macros to be used by rpkg utility. They
are designed to dynamically generate certain parts
of rpm spec files. You can use those macros also without
rpkg by:
$ cat <file_with_the_macros> | preproc -s /usr/lib/rpkg.macros.d/all.bash -e INPUT_PATH=<file_with_the_macros>
INPUT_PATH env variable is passed to preproc to inform
macros about the input file location. The variable is used
to derive INPUT_DIR_PATH variable which rpkg macros use.
If neither INPUT_PATH nor INPUT_DIR_PATH are specified,
INPUT_PATH will stay empty and INPUT_DIR_PATH will default
to '.' (the current working directory).
Another option to experiment with the macros is to source
/usr/lib/rpkg.macros.d/all.bash into your bash environment
Then you can directly invoke the macros on your command-line
as bash functions. See content in /usr/lib/rpkg.macros.d to
discover available macros.
Please, see man rpkg-macros for more information.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-96fcfb58-8252-43ae-9afa-2f7d1930e547rpkg-macros-2.0-1.src.rpm/usr/bin/pack_sourcesrpkg-macrosnoarch3d7a64dd036036589ab0ee63d683167def38f4e1a334847345e40e63ede576d6Set of preproc macros for rpkg utilitySet of preproc macros to be used by rpkg utility. They
are designed to dynamically generate certain parts
of rpm spec files. You can use those macros also without
rpkg by:
$ cat <file_with_the_macros> | preproc -s /usr/lib/rpkg.macros.d/all.bash -e INPUT_PATH=<file_with_the_macros>
INPUT_PATH env variable is passed to preproc to inform
macros about the input file location. The variable is used
to derive INPUT_DIR_PATH variable which rpkg macros use.
If neither INPUT_PATH nor INPUT_DIR_PATH are specified,
INPUT_PATH will stay empty and INPUT_DIR_PATH will default
to '.' (the current working directory).
Another option to experiment with the macros is to source
/usr/lib/rpkg.macros.d/all.bash into your bash environment
Then you can directly invoke the macros on your command-line
as bash functions. See content in /usr/lib/rpkg.macros.d to
discover available macros.
Please, see man rpkg-macros for more information.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9cdec38c-5ce1-4db8-9a76-afaa3afb7105rpkg-macros-2.0-1.src.rpm/usr/bin/pack_sourcesrpkg-macrossrc04251f31c3847b72281e012bc4e5e6d4ab12a85ec16ce8c7e3896114322f58c2Set of preproc macros for rpkg utilitySet of preproc macros to be used by rpkg utility. They
are designed to dynamically generate certain parts
of rpm spec files. You can use those macros also without
rpkg by:
$ cat <file_with_the_macros> | preproc -s /usr/lib/rpkg.macros.d/all.bash -e INPUT_PATH=<file_with_the_macros>
INPUT_PATH env variable is passed to preproc to inform
macros about the input file location. The variable is used
to derive INPUT_DIR_PATH variable which rpkg macros use.
If neither INPUT_PATH nor INPUT_DIR_PATH are specified,
INPUT_PATH will stay empty and INPUT_DIR_PATH will default
to '.' (the current working directory).
Another option to experiment with the macros is to source
/usr/lib/rpkg.macros.d/all.bash into your bash environment
Then you can directly invoke the macros on your command-line
as bash functions. See content in /usr/lib/rpkg.macros.d to
discover available macros.
Please, see man rpkg-macros for more information.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-96fcfb58-8252-43ae-9afa-2f7d1930e547rpkg-macrossrc89d5f371957ab760a8594b29722ac81f1cf47455ab5de2f7647cb9a5c7dcd0c9Set of preproc macros for rpkg utilitySet of preproc macros to be used by rpkg utility. They
are designed to dynamically generate certain parts
of rpm spec files. You can use those macros also without
rpkg by:
$ cat <file_with_the_macros> | preproc -s /usr/lib/rpkg.macros.d/all.bash -e INPUT_PATH=<file_with_the_macros>
INPUT_PATH env variable is passed to preproc to inform
macros about the input file location. The variable is used
to derive INPUT_DIR_PATH variable which rpkg macros use.
If neither INPUT_PATH nor INPUT_DIR_PATH are specified,
INPUT_PATH will stay empty and INPUT_DIR_PATH will default
to '.' (the current working directory).
Another option to experiment with the macros is to source
/usr/lib/rpkg.macros.d/all.bash into your bash environment
Then you can directly invoke the macros on your command-line
as bash functions. See content in /usr/lib/rpkg.macros.d to
discover available macros.
Please, see man rpkg-macros for more information.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9cdec38c-5ce1-4db8-9a76-afaa3afb7105rpkg-utilsrc97d710078ad00d6d6dbdc6d5fe10aae6c69b2f70c2f7c8431f248100d6ea07cfRPM packaging utilityThis package contains the rpkg utility. We are putting
the actual 'rpkg' package into a subpackage because there already
exists package https://src.fedoraproject.org/rpms/rpkg. That package,
however, does not actually produce rpkg rpm whereas rpkg-util does.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c6629a23-f571-4377-b1d1-f5bdcd9ccb70rpkg-utilsrc724851447a3a103d1b54ee04e9460ba9b132856b994061a64348adcc362f14ecRPM packaging utilityThis package contains the rpkg utility. We are putting
the actual 'rpkg' package into a subpackage because there already
exists package https://src.fedoraproject.org/rpms/rpkg. That package,
however, does not actually produce rpkg rpm whereas rpkg-util does.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e7d4ca7b-162d-4fa2-86fb-f0cb0a1f4088rpkg-utilsrc2c2034fda5baec56d55a5bffe862a8410eff87c4f0d44ba99b4d5ad23d5eaa22RPM packaging utilityThis package contains the rpkg utility. We are putting
the actual 'rpkg' package into a subpackage because there already
exists package https://src.fedoraproject.org/rpms/rpkg. That package,
however, does not actually produce rpkg rpm whereas rpkg-util does.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-2cad18b6-0b9c-4145-b242-641bbc352851rpkg-utilsrc9a2040668b4ab51a876b4bc3faba93c8684daf87d2b0d79e273214306913b5e1RPM packaging utilityThis package contains the rpkg utility. We are putting
the actual 'rpkg' package into a subpackage because there already
exists package https://src.fedoraproject.org/rpms/rpkg. That package,
however, does not actually produce rpkg rpm whereas rpkg-util does.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-6ed7d668-3966-4cd3-ba11-9539ec132f6erpkg-utilsrc8ebd92111a451e33a8e734ba853f436ac59e382fdef3faf0d982228dff222bf9RPM packaging utilityThis package contains the rpkg utility. We are putting
the actual 'rpkg' package into a subpackage because there already
exists package https://src.fedoraproject.org/rpms/rpkg. That package,
however, does not actually produce rpkg rpm whereas rpkg-util does.https://pagure.io/rpkg-util.gitGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e30cd1bc-a86c-40b4-81f9-f212cb2b8d61rpm-git-tag-sortsrc51c13db462118700850d6476ee9b78119a0d9d17c467ba61ab4d6320819fce9cSorts merged git annotated tags according to topology and rpm version sorting.Sorts git annotated tags of Name-Version-Release form
according to topology (primary criterion) and rpm
version sorting (secondary criterion). Outputs only
merged tags (i.e. those that reachable from the
current HEAD).https://pagure.io/rpm-git-tag-sortGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e6cdad77-9911-45c8-8777-cf1d655a6de0rpm-git-tag-sortsrcf0b5f2b76576f47038549d5ed636be25380e2351a3f549e5200834ef7026ff22Sorts merged git annotated tags according to topology and rpm version sorting.Sorts git annotated tags of Name-Version-Release form
according to topology (primary criterion) and rpm
version sorting (secondary criterion). Outputs only
merged tags (i.e. those that reachable from the
current HEAD).https://pagure.io/rpm-git-tag-sortGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-88e9e813-9509-4e35-9603-ba79bacac921rpm-git-tag-sortsrced55a5f82ebbeefc72fe1c0be5969412ed6cac5bd16ffedda180bd07766e9e87Sorts merged git annotated tags according to topology and rpm version sorting.Sorts git annotated tags of Name-Version-Release form
according to topology (primary criterion) and rpm
version sorting (secondary criterion). Outputs only
merged tags (i.e. those that reachable from the
current HEAD).https://pagure.io/rpm-git-tag-sortGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9a10b6dc-5c69-47f6-a7f9-4da4c5998830rpm-git-tag-sortx86_64254fda54d67017135adc4d22b642f0b1374a6543b1dabee49fff970414550904Sorts merged git annotated tags according to topology and rpm version sorting.Sorts git annotated tags of Name-Version-Release form
according to topology (primary criterion) and rpm
version sorting (secondary criterion). Outputs only
merged tags (i.e. those that reachable from the
current HEAD).https://pagure.io/rpm-git-tag-sortGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-e6cdad77-9911-45c8-8777-cf1d655a6de0rpm-git-tag-sort-1.0-12.src.rpm/usr/bin/rpm-git-tag-sortrpm-git-tag-sortx86_64eb957dded0a1cba9e5b152cec858d76ad7778c7cca98fbcaf87061fc81530bbaSorts merged git annotated tags according to topology and rpm version sorting.Sorts git annotated tags of Name-Version-Release form
according to topology (primary criterion) and rpm
version sorting (secondary criterion). Outputs only
merged tags (i.e. those that reachable from the
current HEAD).https://pagure.io/rpm-git-tag-sortGPLv2+openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-9a10b6dc-5c69-47f6-a7f9-4da4c5998830rpm-git-tag-sort-1.0-12.src.rpm/usr/bin/rpm-git-tag-sortrpm-git-tag-sort-debuginfox86_64a5cd9c019f2725df163953ac400a02ef198204241269ff93851168b3bfbf0b6dDebug information for package rpm-git-tag-sortThis package provides debug information for package rpm-git-tag-sort.
Debug information is useful when developing applications that use this
package or when debugging this package.https://pagure.io/rpm-git-tag-sortGPLv2+openEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-e6cdad77-9911-45c8-8777-cf1d655a6de0rpm-git-tag-sort-1.0-12.src.rpm/usr/lib/debug/usr/bin/rpm-git-tag-sort-1.0-12.x86_64.debugrpm-git-tag-sort-debuginfox86_6461b8f2b79830e657c0739e8199d35641a9161ce112c915be8adbf676b26bb7f3Debug information for package rpm-git-tag-sortThis package provides debug information for package rpm-git-tag-sort.
Debug information is useful when developing applications that use this
package or when debugging this package.https://pagure.io/rpm-git-tag-sortGPLv2+openEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-9a10b6dc-5c69-47f6-a7f9-4da4c5998830rpm-git-tag-sort-1.0-12.src.rpm/usr/lib/debug/usr/bin/rpm-git-tag-sort-1.0-12.x86_64.debugrpm-git-tag-sort-debugsourcex86_64a9f457920f6218de3ad39d4c27101224ec3d9bdc82230678300c190a7871f0b3Debug sources for package rpm-git-tag-sortThis package provides debug sources for package rpm-git-tag-sort.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://pagure.io/rpm-git-tag-sortGPLv2+openEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-e6cdad77-9911-45c8-8777-cf1d655a6de0rpm-git-tag-sort-1.0-12.src.rpmrpm-git-tag-sort-debugsourcex86_64af9729aab6b9d66940bdbe4cc5e7cd1d7c8f60fbb053c042aae46a3910b43c1eDebug sources for package rpm-git-tag-sortThis package provides debug sources for package rpm-git-tag-sort.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://pagure.io/rpm-git-tag-sortGPLv2+openEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-9a10b6dc-5c69-47f6-a7f9-4da4c5998830rpm-git-tag-sort-1.0-12.src.rpmrpmautospecnoarchc7a6b95e2030489bcf1d7f4d2bbbbb3f5a91730e7d40b43e094b55a3e67608e9CLI tool for generating RPM releases and changelogsCLI tool for generating RPM releases and changelogshttps://pagure.io/fedora-infra/rpmautospecMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c193af30-d8cf-41b3-964b-b57181e178a6python-rpmautospec-0.3.5-1.src.rpm/usr/bin/rpmautospecrpmautospecnoarch46d29d04fd927cd5bb866519a6b95df7a0ce7ba8e8ce85b31aff391291064339CLI tool for generating RPM releases and changelogsCLI tool for generating RPM releases and changelogshttps://pagure.io/fedora-infra/rpmautospecMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f4072875-c26a-4cd8-abb4-0b60ae8fd4e9python-rpmautospec-0.3.5-1.src.rpm/usr/bin/rpmautospecrpmautospec-rpm-macrosnoarchf4c9b3c2a471015ec25493079c6d282a89993ec23066e06ce246e2e70b6c822dRpmautospec RPM macros for local rpmbuildRPM macros with placeholders for building rpmautospec enabled packages localyhttps://pagure.io/fedora-infra/rpmautospecMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-c193af30-d8cf-41b3-964b-b57181e178a6python-rpmautospec-0.3.5-1.src.rpmrpmautospec-rpm-macrosnoarch11ada918724a507e427f21e781470f65c89500a6065baf576cadd2ae3c9ba4d7Rpmautospec RPM macros for local rpmbuildRPM macros with placeholders for building rpmautospec enabled packages localyhttps://pagure.io/fedora-infra/rpmautospecMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-f4072875-c26a-4cd8-abb4-0b60ae8fd4e9python-rpmautospec-0.3.5-1.src.rpmtinisrcf062812369d44427b781842334df5187cba3249c3cc2ede4f6dffeb831ca927eA tiny but valid init for containersTini is the simplest init you could think of.
All Tini does is spawn a single child (Tini is meant to be run in a container),
and wait for it to exit all the while reaping zombies and performing signal
forwarding.https://github.com/krallin/tiniMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0e55d371-871f-4a76-a04f-2c76ba8f9439tinix86_64d3f4f64a9a66acb55c9c32aa4c9a489e173d509a7f8c38a1025deb9f592f9c08A tiny but valid init for containersTini is the simplest init you could think of.
All Tini does is spawn a single child (Tini is meant to be run in a container),
and wait for it to exit all the while reaping zombies and performing signal
forwarding.https://github.com/krallin/tiniMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0e55d371-871f-4a76-a04f-2c76ba8f9439tini-0.19.0-1.src.rpm/usr/bin/tinitini-debuginfox86_6439d38618b090805e6f045f4b5e48741f612abeedbf9aa6b8159c556741dc4830Debug information for package tiniThis package provides debug information for package tini.
Debug information is useful when developing applications that use this
package or when debugging this package.https://github.com/krallin/tiniMITopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-0e55d371-871f-4a76-a04f-2c76ba8f9439tini-0.19.0-1.src.rpm/usr/lib/debug/usr/bin/tini-0.19.0-1.x86_64.debug/usr/lib/debug/usr/bin/tini-static-0.19.0-1.x86_64.debugtini-debugsourcex86_64921ce8194e9727ef43fd0f621004017719a27901ee56a6248b183da4bf22ab4fDebug sources for package tiniThis package provides debug sources for package tini.
Debug sources are useful when developing applications that use this
package or when debugging this package.https://github.com/krallin/tiniMITopenEuler Copr - user mywaaagh_adminDevelopment/Debugresalloc-0e55d371-871f-4a76-a04f-2c76ba8f9439tini-0.19.0-1.src.rpmtini-staticx86_642ccf0b4b5c408775ef669ecd850f83d3e61746c3004c48c3496a48baa986f957Standalone static build of tiniThis package contains a standalone static build of tini, meant to be used
inside a container.https://github.com/krallin/tiniMITopenEuler Copr - user mywaaagh_adminUnspecifiedresalloc-0e55d371-871f-4a76-a04f-2c76ba8f9439tini-0.19.0-1.src.rpm/usr/bin/tini-statictitonoarchb4e40eb4dbad42290cf74a67a7802ea5e6c29ca7a90a7c18aec62806793f591fA tool for managing rpm based git projectsTito is a tool for managing tarballs, rpms, and builds for projects using
git.https://github.com/rpm-software-management/titoGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5fe983d4-f064-40a4-a9c3-abdcc7e49028tito-0.6.21-1.src.rpm/usr/bin/generate-patches.pl/usr/bin/titotitosrc1b896a9873185fdf00f30dce1df58e79d0875f6bd3512cef85d5a9c19ff45bedA tool for managing rpm based git projectsTito is a tool for managing tarballs, rpms, and builds for projects using
git.https://github.com/rpm-software-management/titoGPLv2openEuler Copr - user mywaaagh_adminUnspecifiedresalloc-5fe983d4-f064-40a4-a9c3-abdcc7e49028