- Update to 0.5.10:

* Translation updates in many languages

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-pytricia?expand=0&rev=8
This commit is contained in:
Tomáš Chvátal 2019-06-04 07:02:52 +00:00 committed by Git OBS Bridge
parent 16af90c8e7
commit ec87612e78
2 changed files with 43 additions and 13 deletions

View File

@ -27,11 +27,8 @@ Url: https://github.com/jsommers/pytricia
Source: https://files.pythonhosted.org/packages/source/p/pytricia/pytricia-%{version}.tar.gz Source: https://files.pythonhosted.org/packages/source/p/pytricia/pytricia-%{version}.tar.gz
# https://github.com/jsommers/pytricia/issues/25 # https://github.com/jsommers/pytricia/issues/25
Source1: https://raw.githubusercontent.com/jsommers/pytricia/master/COPYING.LESSER Source1: https://raw.githubusercontent.com/jsommers/pytricia/master/COPYING.LESSER
# test file was shortened, removed testRaw and testRawIP6 for now
# https://github.com/jsommers/pytricia/issues/26
Source2: https://raw.githubusercontent.com/jsommers/pytricia/master/test.py Source2: https://raw.githubusercontent.com/jsommers/pytricia/master/test.py
BuildRequires: %{python_module devel} BuildRequires: %{python_module devel}
BuildRequires: %{python_module pytest}
BuildRequires: %{python_module setuptools} BuildRequires: %{python_module setuptools}
BuildRequires: python-rpm-macros BuildRequires: python-rpm-macros
%python_subpackages %python_subpackages
@ -39,18 +36,14 @@ BuildRequires: python-rpm-macros
%description %description
Pytricia is a python module to store IP prefixes in a patricia tree. Pytricia is a python module to store IP prefixes in a patricia tree.
It's based on Dave Plonka's modified patricia tree code, and has three things It's based on Dave Plonka's modified patricia tree code, and has three things
to recommend it over related modules (including py-radix and SubnetTree): to recommend it over related modules (including py-radix and SubnetTree).
1. it is faster
2. it works in Python 3, and
3. there are a few nicer library features for manipulating the structure.
%prep %prep
%setup -q -n pytricia-%{version} %setup -q -n pytricia-%{version}
cp %{SOURCE1} .
cp %{SOURCE2} . cp %{SOURCE2} .
%build %build
install -m 644 %{SOURCE1} %{_builddir}/pytricia-%{version}
export CFLAGS="%{optflags}" export CFLAGS="%{optflags}"
%python_build %python_build
@ -58,14 +51,11 @@ export CFLAGS="%{optflags}"
%python_install %python_install
%check %check
%{python_expand export PYTHONPATH=%{buildroot}%{$python_sitearch} %python_expand PYTHONPATH=%{buildroot}%{$python_sitearch} $python -m unittest discover
$python -m unittest discover
}
%files %{python_files} %files %{python_files}
%license COPYING.LESSER %license COPYING.LESSER
%doc README.md %doc README.md
%defattr(-,root,root)
%{python_sitearch}/* %{python_sitearch}/*
%changelog %changelog

40
test.py
View File

@ -411,4 +411,44 @@ class PyTriciaTests(unittest.TestCase):
self.assertFalse('1.2.3.0/24' in pyt) self.assertFalse('1.2.3.0/24' in pyt)
def testRaw(self):
pyt = pytricia.PyTricia(32, socket.AF_INET, True)
prefixes = [
(b'\x01\x02\x00\x00', 16),
(b'\x01\x02\x02\x00', 24),
(b'\x01\x02\x03\x00', 24),
(b'\x01\x02\x03\x04', 32)
]
values = ["A", "B", "C", "D"]
for prefix, value in zip(prefixes, values):
pyt.insert(prefix, value)
with self.assertRaises(ValueError) as cm:
pyt.insert((b'invalid', 24), "Z")
self.assertEqual(pyt.get_key((b'\x01\x02\x02\x02', 30)), (b'\x01\x02\x02\x00', 24))
self.assertListEqual(sorted(pyt.keys()), sorted(prefixes))
self.assertEqual(pyt.parent((b'\x01\x02\x03\x04', 32)), (b'\x01\x02\x03\x00', 24))
self.assertListEqual(list(pyt.children((b'\x01\x02\x03\x00', 24))), [(b'\x01\x02\x03\x04', 32)])
self.assertListEqual(sorted(list(pyt)), sorted(prefixes))
def testRawIP6(self):
pyt = pytricia.PyTricia(128, socket.AF_INET6, True)
prefixes = [
(b'\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\x01\x02\x00\x00', 96+16),
(b'\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\x01\x02\x02\x00', 96+24),
(b'\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\x01\x02\x03\x00', 96+24),
(b'\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\x01\x02\x03\x04', 96+32)
]
values = ["A", "B", "C", "D"]
for prefix, value in zip(prefixes, values):
pyt.insert(prefix, value)
self.assertEqual(pyt.get_key((b'\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\x01\x02\x02\x02', 96+30)), (b'\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\x01\x02\x02\x00', 96+24))
self.assertListEqual(sorted(pyt.keys()), sorted(prefixes))
self.assertEqual(pyt.parent((b'\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\x01\x02\x03\x04', 96+32)), (b'\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\x01\x02\x03\x00', 96+24))
self.assertListEqual(list(pyt.children((b'\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\x01\x02\x03\x00', 96+24))), [(b'\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\xAA\xBB\xCC\xDD\x01\x02\x03\x04', 96+32)])
self.assertListEqual(sorted(list(pyt)), sorted(prefixes))
if __name__ == '__main__':
unittest.main()