summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-04-11 16:42:51 +0000
committerCoprDistGit <infra@openeuler.org>2023-04-11 16:42:51 +0000
commit01733d75a0c2054bd92ef84cecb5bb9ee975cc2c (patch)
tree0abc122d15414944ef306022bae1c8cb5be8664b
parent5fba456e0531b02d479587c2f662122b0d95cd1e (diff)
automatic import of python-py-lspci
-rw-r--r--.gitignore1
-rw-r--r--python-py-lspci.spec385
-rw-r--r--sources1
3 files changed, 387 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..e3ffb84 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/py-lspci-0.0.9.tar.gz
diff --git a/python-py-lspci.spec b/python-py-lspci.spec
new file mode 100644
index 0000000..3c6682b
--- /dev/null
+++ b/python-py-lspci.spec
@@ -0,0 +1,385 @@
+%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()
+<pylspci.pci_scanner.PCISelect object at 0x7fa1dcda3940>
+```
+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 "<input>", line 1, in <module>
+ 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()
+<pylspci.pci_scanner.PCISelect object at 0x7fa1dcda3940>
+```
+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 "<input>", line 1, in <module>
+ 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()
+<pylspci.pci_scanner.PCISelect object at 0x7fa1dcda3940>
+```
+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 "<input>", line 1, in <module>
+ 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 <Python_Bot@openeuler.org> - 0.0.9-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..29b0cb8
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+f8c2eb012d0e3137e0d6ca9b823d6308 py-lspci-0.0.9.tar.gz