%global _empty_manifest_terminate_build 0 Name: python-py-lspci Version: 0.0.9 Release: 1 Summary: Parser for lspci output on remote or local machines License: MIT License URL: https://github.com/YADRO-KNS/py-lspci Source0: https://mirrors.nju.edu.cn/pypi/web/packages/4c/e2/8ac8c2abf14d305f7629341758f4e49869ef6f2b7f1628cf24a3770ce3fc/py-lspci-0.0.9.tar.gz BuildArch: noarch Requires: python3-Fabric %description py-lspci – parser for lspci output on remote or local UNIX machines. This package provides convenient interface to interact with lspci output in form of Python objects. ## Getting Started ### Prerequisites py-lspci requires python 3.6 or newer versions to run. Also targets that you could interact with py-lspci must have [pciutils](http://mj.ucw.cz/sw/pciutils/) installed on them. ### Installing Cloning project from git repository ```bash git clone https://github.com/YADRO-KNS/py-lspci.git ``` Installing from PyPi ```bash pip3 install py-lspci ``` ## Examples ### Connection First we have to establish connection to our target as user with sudo privileges: ```python import pylspci scanner = pylspci.ScannerPCI(ip='192.168.1.1', username='admin', password='pa$$w0rd') ``` In cases if we targeting local machine we need to provide user password if user isn't root: ```python import pylspci scanner = pylspci.ScannerPCI(ip='127.0.0.1', password='pa$$w0rd') ``` ### Select With *ScannerPCI* object now we can write requests to get data from lspci output, main tool to do that is **select** method, that will return *PCISelect* iterator object. ``` >>> scanner.select() ``` Select will return all PCI devices that matches select request. ``` >>> scanner.select().count() 22 >>> scanner.select(pci_address='0000:00:00.0').count() 1 ``` For broad select requests you could use asterisk: ``` >>> scanner.select(type='Bridge').count() 0 >>> scanner.select(type='*Bridge').count() 10 ``` Use multiple keyword arguments to specify search. You could search by any attributes or properties of *PCIDevice* class.: ``` >>> scanner.select(type='*Bridge', is_upstream=True).count() 1 ``` With *PCISelect* object you could loop over PCI devices that matches search parameters: ``` >>> for device in scanner.select(is_downstream=True): 0000:08:00.0 PCI bridge Intel Corporation JHL6240 Thunderbolt 3 Bridge [x4/x4][2.5GT/s/2.5GT/s] 0000:08:01.0 PCI bridge Intel Corporation JHL6240 Thunderbolt 3 Bridge [x4/x4][2.5GT/s/2.5GT/s] 0000:08:02.0 PCI bridge Intel Corporation JHL6240 Thunderbolt 3 Bridge [x4/x4][2.5GT/s/2.5GT/s] ``` Also you can chain your select requests: ``` >>> scanner.select(type='PCI bridge').count() 8 >>> scanner.select(type='PCI bridge').select(is_upstream=True).count() 1 ``` ### Get Another search method is **get**. Basically it is the same select that will return first matching object instead of list of objects or will raise exception in case if there was no matches. ``` >>> print(scanner.get(type='*Host')) 0000:07:00.0 PCI bridge Intel Corporation [x2/x2][8GT/s/8GT/s] >>> print(scanner.get(type='*Host', is_upstream=True)) Traceback (most recent call last): File "", line 1, in File "/home/sergey/PycharmProjects/py-lspci/pylspci/pci_scanner.py", line 98, in get if parent.is_host_bridge: pylspci.pci_scanner.DoesNotExist: Unable to find PCI Device matching: {'type': '*Host', 'is_upstream': True} ``` ### Get Connected Another tool is **get_connected** method of Scanner, that returns *PCISelect* with all devices connected to passed device. For Host Bridge it will return all devices in Root Complex. For Upstream of PCI Bridge - all Downstreams. For Downstream or Root Ports - all connected Upstreams or Endpoints. End for Endpoints it will return empty list. ``` >>> scanner.get_connected(scanner.get(type='*Host')).count() 14 ``` py-lspci uses cached value of lspci output, in case if you need to refresh that data, use *force_rescan* argument, for any of mentioned methods. ``` >>> scanner.select(force_rescan=True) ``` ### PCI rescan procedure Last but not least method of *ScannerPCI* is **pci_rescan** that causes full rescan of PCI bus on target machine. Be careful with this one, because not all distros support proper PCI rescan. ## Versioning We use [SemVer](http://semver.org/) for versioning. ## Authors * **[Sergey Parshin](https://github.com/shooshp)** See also the list of [contributors](https://github.com/YADRO-KNS/py-lspci/graphs/contributors) who participated in this project. ## License The code is available as open source under the terms of the [MIT License](LICENSE). %package -n python3-py-lspci Summary: Parser for lspci output on remote or local machines Provides: python-py-lspci BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-py-lspci py-lspci – parser for lspci output on remote or local UNIX machines. This package provides convenient interface to interact with lspci output in form of Python objects. ## Getting Started ### Prerequisites py-lspci requires python 3.6 or newer versions to run. Also targets that you could interact with py-lspci must have [pciutils](http://mj.ucw.cz/sw/pciutils/) installed on them. ### Installing Cloning project from git repository ```bash git clone https://github.com/YADRO-KNS/py-lspci.git ``` Installing from PyPi ```bash pip3 install py-lspci ``` ## Examples ### Connection First we have to establish connection to our target as user with sudo privileges: ```python import pylspci scanner = pylspci.ScannerPCI(ip='192.168.1.1', username='admin', password='pa$$w0rd') ``` In cases if we targeting local machine we need to provide user password if user isn't root: ```python import pylspci scanner = pylspci.ScannerPCI(ip='127.0.0.1', password='pa$$w0rd') ``` ### Select With *ScannerPCI* object now we can write requests to get data from lspci output, main tool to do that is **select** method, that will return *PCISelect* iterator object. ``` >>> scanner.select() ``` Select will return all PCI devices that matches select request. ``` >>> scanner.select().count() 22 >>> scanner.select(pci_address='0000:00:00.0').count() 1 ``` For broad select requests you could use asterisk: ``` >>> scanner.select(type='Bridge').count() 0 >>> scanner.select(type='*Bridge').count() 10 ``` Use multiple keyword arguments to specify search. You could search by any attributes or properties of *PCIDevice* class.: ``` >>> scanner.select(type='*Bridge', is_upstream=True).count() 1 ``` With *PCISelect* object you could loop over PCI devices that matches search parameters: ``` >>> for device in scanner.select(is_downstream=True): 0000:08:00.0 PCI bridge Intel Corporation JHL6240 Thunderbolt 3 Bridge [x4/x4][2.5GT/s/2.5GT/s] 0000:08:01.0 PCI bridge Intel Corporation JHL6240 Thunderbolt 3 Bridge [x4/x4][2.5GT/s/2.5GT/s] 0000:08:02.0 PCI bridge Intel Corporation JHL6240 Thunderbolt 3 Bridge [x4/x4][2.5GT/s/2.5GT/s] ``` Also you can chain your select requests: ``` >>> scanner.select(type='PCI bridge').count() 8 >>> scanner.select(type='PCI bridge').select(is_upstream=True).count() 1 ``` ### Get Another search method is **get**. Basically it is the same select that will return first matching object instead of list of objects or will raise exception in case if there was no matches. ``` >>> print(scanner.get(type='*Host')) 0000:07:00.0 PCI bridge Intel Corporation [x2/x2][8GT/s/8GT/s] >>> print(scanner.get(type='*Host', is_upstream=True)) Traceback (most recent call last): File "", line 1, in File "/home/sergey/PycharmProjects/py-lspci/pylspci/pci_scanner.py", line 98, in get if parent.is_host_bridge: pylspci.pci_scanner.DoesNotExist: Unable to find PCI Device matching: {'type': '*Host', 'is_upstream': True} ``` ### Get Connected Another tool is **get_connected** method of Scanner, that returns *PCISelect* with all devices connected to passed device. For Host Bridge it will return all devices in Root Complex. For Upstream of PCI Bridge - all Downstreams. For Downstream or Root Ports - all connected Upstreams or Endpoints. End for Endpoints it will return empty list. ``` >>> scanner.get_connected(scanner.get(type='*Host')).count() 14 ``` py-lspci uses cached value of lspci output, in case if you need to refresh that data, use *force_rescan* argument, for any of mentioned methods. ``` >>> scanner.select(force_rescan=True) ``` ### PCI rescan procedure Last but not least method of *ScannerPCI* is **pci_rescan** that causes full rescan of PCI bus on target machine. Be careful with this one, because not all distros support proper PCI rescan. ## Versioning We use [SemVer](http://semver.org/) for versioning. ## Authors * **[Sergey Parshin](https://github.com/shooshp)** See also the list of [contributors](https://github.com/YADRO-KNS/py-lspci/graphs/contributors) who participated in this project. ## License The code is available as open source under the terms of the [MIT License](LICENSE). %package help Summary: Development documents and examples for py-lspci Provides: python3-py-lspci-doc %description help py-lspci – parser for lspci output on remote or local UNIX machines. This package provides convenient interface to interact with lspci output in form of Python objects. ## Getting Started ### Prerequisites py-lspci requires python 3.6 or newer versions to run. Also targets that you could interact with py-lspci must have [pciutils](http://mj.ucw.cz/sw/pciutils/) installed on them. ### Installing Cloning project from git repository ```bash git clone https://github.com/YADRO-KNS/py-lspci.git ``` Installing from PyPi ```bash pip3 install py-lspci ``` ## Examples ### Connection First we have to establish connection to our target as user with sudo privileges: ```python import pylspci scanner = pylspci.ScannerPCI(ip='192.168.1.1', username='admin', password='pa$$w0rd') ``` In cases if we targeting local machine we need to provide user password if user isn't root: ```python import pylspci scanner = pylspci.ScannerPCI(ip='127.0.0.1', password='pa$$w0rd') ``` ### Select With *ScannerPCI* object now we can write requests to get data from lspci output, main tool to do that is **select** method, that will return *PCISelect* iterator object. ``` >>> scanner.select() ``` Select will return all PCI devices that matches select request. ``` >>> scanner.select().count() 22 >>> scanner.select(pci_address='0000:00:00.0').count() 1 ``` For broad select requests you could use asterisk: ``` >>> scanner.select(type='Bridge').count() 0 >>> scanner.select(type='*Bridge').count() 10 ``` Use multiple keyword arguments to specify search. You could search by any attributes or properties of *PCIDevice* class.: ``` >>> scanner.select(type='*Bridge', is_upstream=True).count() 1 ``` With *PCISelect* object you could loop over PCI devices that matches search parameters: ``` >>> for device in scanner.select(is_downstream=True): 0000:08:00.0 PCI bridge Intel Corporation JHL6240 Thunderbolt 3 Bridge [x4/x4][2.5GT/s/2.5GT/s] 0000:08:01.0 PCI bridge Intel Corporation JHL6240 Thunderbolt 3 Bridge [x4/x4][2.5GT/s/2.5GT/s] 0000:08:02.0 PCI bridge Intel Corporation JHL6240 Thunderbolt 3 Bridge [x4/x4][2.5GT/s/2.5GT/s] ``` Also you can chain your select requests: ``` >>> scanner.select(type='PCI bridge').count() 8 >>> scanner.select(type='PCI bridge').select(is_upstream=True).count() 1 ``` ### Get Another search method is **get**. Basically it is the same select that will return first matching object instead of list of objects or will raise exception in case if there was no matches. ``` >>> print(scanner.get(type='*Host')) 0000:07:00.0 PCI bridge Intel Corporation [x2/x2][8GT/s/8GT/s] >>> print(scanner.get(type='*Host', is_upstream=True)) Traceback (most recent call last): File "", line 1, in File "/home/sergey/PycharmProjects/py-lspci/pylspci/pci_scanner.py", line 98, in get if parent.is_host_bridge: pylspci.pci_scanner.DoesNotExist: Unable to find PCI Device matching: {'type': '*Host', 'is_upstream': True} ``` ### Get Connected Another tool is **get_connected** method of Scanner, that returns *PCISelect* with all devices connected to passed device. For Host Bridge it will return all devices in Root Complex. For Upstream of PCI Bridge - all Downstreams. For Downstream or Root Ports - all connected Upstreams or Endpoints. End for Endpoints it will return empty list. ``` >>> scanner.get_connected(scanner.get(type='*Host')).count() 14 ``` py-lspci uses cached value of lspci output, in case if you need to refresh that data, use *force_rescan* argument, for any of mentioned methods. ``` >>> scanner.select(force_rescan=True) ``` ### PCI rescan procedure Last but not least method of *ScannerPCI* is **pci_rescan** that causes full rescan of PCI bus on target machine. Be careful with this one, because not all distros support proper PCI rescan. ## Versioning We use [SemVer](http://semver.org/) for versioning. ## Authors * **[Sergey Parshin](https://github.com/shooshp)** See also the list of [contributors](https://github.com/YADRO-KNS/py-lspci/graphs/contributors) who participated in this project. ## License The code is available as open source under the terms of the [MIT License](LICENSE). %prep %autosetup -n py-lspci-0.0.9 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-py-lspci -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue Apr 11 2023 Python_Bot - 0.0.9-1 - Package Spec generated