Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-linetable for 
openSUSE:Factory checked in at 2026-10-26 10:00:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-linetable (Old)
 and      /work/SRC/openSUSE:Factory/.python-linetable.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-linetable"

Mon Oct 26 10:00:57 2026 rev:3 rq:1392462 version:0.0.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-linetable/python-linetable.changes        
2025-06-02 22:00:44.629677173 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-linetable.new.2252680/python-linetable.changes
   2026-10-26 10:02:21.061623973 +0100
@@ -1,0 +2,6 @@
+Sun Oct 25 15:29:26 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.0.4:
+  * add license and add more tests
+
+-------------------------------------------------------------------

Old:
----
  linetable-0.0.3.tar.gz

New:
----
  linetable-0.0.4.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-linetable.spec ++++++
--- /var/tmp/diff_new_pack.dgfeab/_old  2026-10-26 10:02:22.281675138 +0100
+++ /var/tmp/diff_new_pack.dgfeab/_new  2026-10-26 10:02:22.288675431 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-linetable
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           python-linetable
-Version:        0.0.3
+Version:        0.0.4
 Release:        0
 Summary:        library to manage Python Locations Table (co_linetable)
 License:        MIT
@@ -46,6 +46,7 @@
 
 %files %{python_files}
 %doc README.rst
+%license LICENSE
 %{python_sitelib}/linetable
 %{python_sitelib}/linetable-%{version}*-info
 

++++++ linetable-0.0.3.tar.gz -> linetable-0.0.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linetable-0.0.3/LICENSE new/linetable-0.0.4/LICENSE
--- old/linetable-0.0.3/LICENSE 1970-01-01 01:00:00.000000000 +0100
+++ new/linetable-0.0.4/LICENSE 2026-10-08 12:03:39.984408100 +0200
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Alessandro Molina
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linetable-0.0.3/PKG-INFO new/linetable-0.0.4/PKG-INFO
--- old/linetable-0.0.3/PKG-INFO        2023-03-07 11:52:56.026441000 +0100
+++ new/linetable-0.0.4/PKG-INFO        2026-10-08 12:03:48.763447500 +0200
@@ -1,89 +1,99 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.4
 Name: linetable
-Version: 0.0.3
+Version: 0.0.4
 Summary: library to manage Python Locations Table (co_linetable)
-Home-page: https://github.com/amol-/linetable
-Author: Alessandro Molina
-Author-email: [email protected]
+Author-email: Alessandro Molina <[email protected]>
 License: MIT
-Description: About linetable
-        ---------------
-        
-        .. image:: 
https://github.com/amol-/linetable/actions/workflows/run-tests.yml/badge.svg
-            :target: 
https://github.com/amol-/linetable/actions/workflows/run-tests.yml
-        
-        .. image:: https://coveralls.io/repos/amol-/linetable/badge.svg
-            :target: https://coveralls.io/r/amol-/linetable
-        
-        .. image:: https://img.shields.io/pypi/v/linetable.svg
-           :target: https://pypi.python.org/pypi/linetable
-        
-        .. image:: https://img.shields.io/pypi/pyversions/linetable.svg
-            :target: https://pypi.python.org/pypi/linetable
-        
-        .. image:: https://img.shields.io/pypi/l/linetable.svg
-            :target: https://pypi.python.org/pypi/linetable
-        
-        linetable is a library parse and generate co_linetable attributes in 
Python code objects.
-        
-        Based on 
https://github.com/python/cpython/blob/main/Objects/locations.md
-        
-        Installing
-        ----------
-        
-        linetable can be installed from pypi::
-        
-            pip install linetable
-        
-        should just work for most of the users
-        
-        Usage
-        -----
-        
-        Existing linetable can be parsed using ``linetable.parse_linetable``::
-        
-            >>> def testfunc():
-            ...   x = 3
-            ...   y = x + 1
-            ...   return y
-        
-            >>> list(linetable.parse_linetable(testfunc.__code__.co_linetable))
-            [
-                (1, 1, 1, 0, 0),
-                (1, 2, 2, 6, 7),
-                (1, 2, 2, 2, 3),
-                (1, 3, 3, 6, 7),
-                (1, 3, 3, 10, 11),
-                (2, 3, 3, 6, 11),
-                (1, 3, 3, 2, 3),
-                (1, 4, 4, 9, 10),
-                (1, 4, 4, 2, 10),
-            ]
-        
-        If you prefer the output in the format of ``dis.Positions`` objects,
-        you can create them from the yielded values::
-        
-            >>> [dis.Positions(*e[1:]) for e in 
linetable.parse_linetable(testfunc.__code__.co_linetable)]
-            [Positions(lineno=1, end_lineno=1, col_offset=0, 
end_col_offset=0), Positions(lineno=2, end_lineno=2, col_offset=8, 
end_col_offset=9), Positions(lineno=2, end_lineno=2, col_offset=4, 
end_col_offset=5), Positions(lineno=3, end_lineno=3, col_offset=8, 
end_col_offset=9), Positions(lineno=3, end_lineno=3, col_offset=12, 
end_col_offset=13), Positions(lineno=3, end_lineno=3, col_offset=8, 
end_col_offset=13), Positions(lineno=3, end_lineno=3, col_offset=4, 
end_col_offset=5), Positions(lineno=4, end_lineno=4, col_offset=11, 
end_col_offset=12), Positions(lineno=4, end_lineno=4, col_offset=4, 
end_col_offset=12)]
-        
-        If you have the linetable, you can generate back the binary encoded 
version
-        using ``linetable.generate_linetable``::
-        
-            >>> lt = [
-            ...     (1, 1, 1, 0, 0),
-            ...     (1, 2, 2, 6, 7),
-            ...     (1, 2, 2, 2, 3),
-            ...     (1, 3, 3, 6, 7),
-            ...     (1, 3, 3, 10, 11),
-            ...     (2, 3, 3, 6, 11),
-            ...     (1, 3, 3, 2, 3),
-            ...     (1, 4, 4, 9, 10),
-            ...     (1, 4, 4, 2, 10),
-            ... ]
-            >>> linetable.generate_linetable(lt)
-            
b"\x80\x00\xd8\x06\x07\x80!\xd8\x06\x07\x88!\x81e\x80!\xd8\t\n\x80("
-        
-Platform: UNKNOWN
+Project-URL: Homepage, https://github.com/amol-/linetable
+Project-URL: Source, https://github.com/amol-/linetable
+Keywords: linetable,python,bytecode
 Classifier: Intended Audience :: Developers
 Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
+Requires-Python: >=3.8
+Description-Content-Type: text/x-rst
+License-File: LICENSE
+Dynamic: license-file
+
+About linetable
+---------------
+
+.. image:: 
https://github.com/amol-/linetable/actions/workflows/run-tests.yml/badge.svg
+    :target: https://github.com/amol-/linetable/actions/workflows/run-tests.yml
+
+.. image:: https://coveralls.io/repos/amol-/linetable/badge.svg
+    :target: https://coveralls.io/r/amol-/linetable
+
+.. image:: https://img.shields.io/pypi/v/linetable.svg
+   :target: https://pypi.python.org/pypi/linetable
+
+.. image:: https://img.shields.io/pypi/pyversions/linetable.svg
+    :target: https://pypi.python.org/pypi/linetable
+
+.. image:: https://img.shields.io/pypi/l/linetable.svg
+    :target: https://pypi.python.org/pypi/linetable
+
+linetable is a library parse and generate co_linetable attributes in Python 
code objects.
+
+Based on https://github.com/python/cpython/blob/main/Objects/locations.md
+
+Installing
+----------
+
+linetable can be installed from pypi::
+
+    pip install linetable
+
+should just work for most of the users
+
+Usage
+-----
+
+Existing linetable can be parsed using ``linetable.parse_linetable``::
+
+    >>> def testfunc():
+    ...   x = 3
+    ...   y = x + 1
+    ...   return y
+
+    >>> list(linetable.parse_linetable(testfunc.__code__.co_linetable))
+    [
+        (1, 1, 1, 0, 0),
+        (1, 2, 2, 6, 7),
+        (1, 2, 2, 2, 3),
+        (1, 3, 3, 6, 7),
+        (1, 3, 3, 10, 11),
+        (2, 3, 3, 6, 11),
+        (1, 3, 3, 2, 3),
+        (1, 4, 4, 9, 10),
+        (1, 4, 4, 2, 10),
+    ]
+
+If you prefer the output in the format of ``dis.Positions`` objects,
+you can create them from the yielded values::
+
+    >>> [dis.Positions(*e[1:]) for e in 
linetable.parse_linetable(testfunc.__code__.co_linetable)]
+    [Positions(lineno=1, end_lineno=1, col_offset=0, end_col_offset=0), 
Positions(lineno=2, end_lineno=2, col_offset=8, end_col_offset=9), 
Positions(lineno=2, end_lineno=2, col_offset=4, end_col_offset=5), 
Positions(lineno=3, end_lineno=3, col_offset=8, end_col_offset=9), 
Positions(lineno=3, end_lineno=3, col_offset=12, end_col_offset=13), 
Positions(lineno=3, end_lineno=3, col_offset=8, end_col_offset=13), 
Positions(lineno=3, end_lineno=3, col_offset=4, end_col_offset=5), 
Positions(lineno=4, end_lineno=4, col_offset=11, end_col_offset=12), 
Positions(lineno=4, end_lineno=4, col_offset=4, end_col_offset=12)]
+
+If you have the linetable, you can generate back the binary encoded version
+using ``linetable.generate_linetable``::
+
+    >>> lt = [
+    ...     (1, 1, 1, 0, 0),
+    ...     (1, 2, 2, 6, 7),
+    ...     (1, 2, 2, 2, 3),
+    ...     (1, 3, 3, 6, 7),
+    ...     (1, 3, 3, 10, 11),
+    ...     (2, 3, 3, 6, 11),
+    ...     (1, 3, 3, 2, 3),
+    ...     (1, 4, 4, 9, 10),
+    ...     (1, 4, 4, 2, 10),
+    ... ]
+    >>> linetable.generate_linetable(lt)
+    b"\x80\x00\xd8\x06\x07\x80!\xd8\x06\x07\x88!\x81e\x80!\xd8\t\n\x80("
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linetable-0.0.3/linetable.egg-info/PKG-INFO 
new/linetable-0.0.4/linetable.egg-info/PKG-INFO
--- old/linetable-0.0.3/linetable.egg-info/PKG-INFO     2023-03-07 
11:52:55.000000000 +0100
+++ new/linetable-0.0.4/linetable.egg-info/PKG-INFO     2026-10-08 
12:03:48.754469000 +0200
@@ -1,89 +1,99 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.4
 Name: linetable
-Version: 0.0.3
+Version: 0.0.4
 Summary: library to manage Python Locations Table (co_linetable)
-Home-page: https://github.com/amol-/linetable
-Author: Alessandro Molina
-Author-email: [email protected]
+Author-email: Alessandro Molina <[email protected]>
 License: MIT
-Description: About linetable
-        ---------------
-        
-        .. image:: 
https://github.com/amol-/linetable/actions/workflows/run-tests.yml/badge.svg
-            :target: 
https://github.com/amol-/linetable/actions/workflows/run-tests.yml
-        
-        .. image:: https://coveralls.io/repos/amol-/linetable/badge.svg
-            :target: https://coveralls.io/r/amol-/linetable
-        
-        .. image:: https://img.shields.io/pypi/v/linetable.svg
-           :target: https://pypi.python.org/pypi/linetable
-        
-        .. image:: https://img.shields.io/pypi/pyversions/linetable.svg
-            :target: https://pypi.python.org/pypi/linetable
-        
-        .. image:: https://img.shields.io/pypi/l/linetable.svg
-            :target: https://pypi.python.org/pypi/linetable
-        
-        linetable is a library parse and generate co_linetable attributes in 
Python code objects.
-        
-        Based on 
https://github.com/python/cpython/blob/main/Objects/locations.md
-        
-        Installing
-        ----------
-        
-        linetable can be installed from pypi::
-        
-            pip install linetable
-        
-        should just work for most of the users
-        
-        Usage
-        -----
-        
-        Existing linetable can be parsed using ``linetable.parse_linetable``::
-        
-            >>> def testfunc():
-            ...   x = 3
-            ...   y = x + 1
-            ...   return y
-        
-            >>> list(linetable.parse_linetable(testfunc.__code__.co_linetable))
-            [
-                (1, 1, 1, 0, 0),
-                (1, 2, 2, 6, 7),
-                (1, 2, 2, 2, 3),
-                (1, 3, 3, 6, 7),
-                (1, 3, 3, 10, 11),
-                (2, 3, 3, 6, 11),
-                (1, 3, 3, 2, 3),
-                (1, 4, 4, 9, 10),
-                (1, 4, 4, 2, 10),
-            ]
-        
-        If you prefer the output in the format of ``dis.Positions`` objects,
-        you can create them from the yielded values::
-        
-            >>> [dis.Positions(*e[1:]) for e in 
linetable.parse_linetable(testfunc.__code__.co_linetable)]
-            [Positions(lineno=1, end_lineno=1, col_offset=0, 
end_col_offset=0), Positions(lineno=2, end_lineno=2, col_offset=8, 
end_col_offset=9), Positions(lineno=2, end_lineno=2, col_offset=4, 
end_col_offset=5), Positions(lineno=3, end_lineno=3, col_offset=8, 
end_col_offset=9), Positions(lineno=3, end_lineno=3, col_offset=12, 
end_col_offset=13), Positions(lineno=3, end_lineno=3, col_offset=8, 
end_col_offset=13), Positions(lineno=3, end_lineno=3, col_offset=4, 
end_col_offset=5), Positions(lineno=4, end_lineno=4, col_offset=11, 
end_col_offset=12), Positions(lineno=4, end_lineno=4, col_offset=4, 
end_col_offset=12)]
-        
-        If you have the linetable, you can generate back the binary encoded 
version
-        using ``linetable.generate_linetable``::
-        
-            >>> lt = [
-            ...     (1, 1, 1, 0, 0),
-            ...     (1, 2, 2, 6, 7),
-            ...     (1, 2, 2, 2, 3),
-            ...     (1, 3, 3, 6, 7),
-            ...     (1, 3, 3, 10, 11),
-            ...     (2, 3, 3, 6, 11),
-            ...     (1, 3, 3, 2, 3),
-            ...     (1, 4, 4, 9, 10),
-            ...     (1, 4, 4, 2, 10),
-            ... ]
-            >>> linetable.generate_linetable(lt)
-            
b"\x80\x00\xd8\x06\x07\x80!\xd8\x06\x07\x88!\x81e\x80!\xd8\t\n\x80("
-        
-Platform: UNKNOWN
+Project-URL: Homepage, https://github.com/amol-/linetable
+Project-URL: Source, https://github.com/amol-/linetable
+Keywords: linetable,python,bytecode
 Classifier: Intended Audience :: Developers
 Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
+Requires-Python: >=3.8
+Description-Content-Type: text/x-rst
+License-File: LICENSE
+Dynamic: license-file
+
+About linetable
+---------------
+
+.. image:: 
https://github.com/amol-/linetable/actions/workflows/run-tests.yml/badge.svg
+    :target: https://github.com/amol-/linetable/actions/workflows/run-tests.yml
+
+.. image:: https://coveralls.io/repos/amol-/linetable/badge.svg
+    :target: https://coveralls.io/r/amol-/linetable
+
+.. image:: https://img.shields.io/pypi/v/linetable.svg
+   :target: https://pypi.python.org/pypi/linetable
+
+.. image:: https://img.shields.io/pypi/pyversions/linetable.svg
+    :target: https://pypi.python.org/pypi/linetable
+
+.. image:: https://img.shields.io/pypi/l/linetable.svg
+    :target: https://pypi.python.org/pypi/linetable
+
+linetable is a library parse and generate co_linetable attributes in Python 
code objects.
+
+Based on https://github.com/python/cpython/blob/main/Objects/locations.md
+
+Installing
+----------
+
+linetable can be installed from pypi::
+
+    pip install linetable
+
+should just work for most of the users
+
+Usage
+-----
+
+Existing linetable can be parsed using ``linetable.parse_linetable``::
+
+    >>> def testfunc():
+    ...   x = 3
+    ...   y = x + 1
+    ...   return y
+
+    >>> list(linetable.parse_linetable(testfunc.__code__.co_linetable))
+    [
+        (1, 1, 1, 0, 0),
+        (1, 2, 2, 6, 7),
+        (1, 2, 2, 2, 3),
+        (1, 3, 3, 6, 7),
+        (1, 3, 3, 10, 11),
+        (2, 3, 3, 6, 11),
+        (1, 3, 3, 2, 3),
+        (1, 4, 4, 9, 10),
+        (1, 4, 4, 2, 10),
+    ]
+
+If you prefer the output in the format of ``dis.Positions`` objects,
+you can create them from the yielded values::
+
+    >>> [dis.Positions(*e[1:]) for e in 
linetable.parse_linetable(testfunc.__code__.co_linetable)]
+    [Positions(lineno=1, end_lineno=1, col_offset=0, end_col_offset=0), 
Positions(lineno=2, end_lineno=2, col_offset=8, end_col_offset=9), 
Positions(lineno=2, end_lineno=2, col_offset=4, end_col_offset=5), 
Positions(lineno=3, end_lineno=3, col_offset=8, end_col_offset=9), 
Positions(lineno=3, end_lineno=3, col_offset=12, end_col_offset=13), 
Positions(lineno=3, end_lineno=3, col_offset=8, end_col_offset=13), 
Positions(lineno=3, end_lineno=3, col_offset=4, end_col_offset=5), 
Positions(lineno=4, end_lineno=4, col_offset=11, end_col_offset=12), 
Positions(lineno=4, end_lineno=4, col_offset=4, end_col_offset=12)]
+
+If you have the linetable, you can generate back the binary encoded version
+using ``linetable.generate_linetable``::
+
+    >>> lt = [
+    ...     (1, 1, 1, 0, 0),
+    ...     (1, 2, 2, 6, 7),
+    ...     (1, 2, 2, 2, 3),
+    ...     (1, 3, 3, 6, 7),
+    ...     (1, 3, 3, 10, 11),
+    ...     (2, 3, 3, 6, 11),
+    ...     (1, 3, 3, 2, 3),
+    ...     (1, 4, 4, 9, 10),
+    ...     (1, 4, 4, 2, 10),
+    ... ]
+    >>> linetable.generate_linetable(lt)
+    b"\x80\x00\xd8\x06\x07\x80!\xd8\x06\x07\x88!\x81e\x80!\xd8\t\n\x80("
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linetable-0.0.3/linetable.egg-info/SOURCES.txt 
new/linetable-0.0.4/linetable.egg-info/SOURCES.txt
--- old/linetable-0.0.3/linetable.egg-info/SOURCES.txt  2023-03-07 
11:52:55.000000000 +0100
+++ new/linetable-0.0.4/linetable.egg-info/SOURCES.txt  2026-10-08 
12:03:48.757503000 +0200
@@ -1,13 +1,12 @@
+LICENSE
 MANIFEST.in
 README.rst
-setup.cfg
-setup.py
+pyproject.toml
 linetable/__init__.py
 linetable/linetable.py
 linetable/varint.py
 linetable.egg-info/PKG-INFO
 linetable.egg-info/SOURCES.txt
 linetable.egg-info/dependency_links.txt
-linetable.egg-info/entry_points.txt
-linetable.egg-info/not-zip-safe
-linetable.egg-info/top_level.txt
\ No newline at end of file
+linetable.egg-info/top_level.txt
+tests/test_linetable.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linetable-0.0.3/linetable.egg-info/entry_points.txt 
new/linetable-0.0.4/linetable.egg-info/entry_points.txt
--- old/linetable-0.0.3/linetable.egg-info/entry_points.txt     2023-03-07 
11:52:55.000000000 +0100
+++ new/linetable-0.0.4/linetable.egg-info/entry_points.txt     1970-01-01 
01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-
-      # -*- Entry points: -*-
-      
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linetable-0.0.3/linetable.egg-info/not-zip-safe 
new/linetable-0.0.4/linetable.egg-info/not-zip-safe
--- old/linetable-0.0.3/linetable.egg-info/not-zip-safe 2023-03-07 
11:52:55.000000000 +0100
+++ new/linetable-0.0.4/linetable.egg-info/not-zip-safe 1970-01-01 
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linetable-0.0.3/pyproject.toml 
new/linetable-0.0.4/pyproject.toml
--- old/linetable-0.0.3/pyproject.toml  1970-01-01 01:00:00.000000000 +0100
+++ new/linetable-0.0.4/pyproject.toml  2026-10-08 12:03:39.984638200 +0200
@@ -0,0 +1,37 @@
+[build-system]
+requires = ["setuptools>=66", "wheel"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "linetable"
+version = "0.0.4"
+description = "library to manage Python Locations Table (co_linetable)"
+readme = {file = "README.rst", "content-type" = "text/x-rst"}
+authors = [
+    {name = "Alessandro Molina", email = "[email protected]"},
+]
+license = { text = "MIT" }
+classifiers = [
+    "Intended Audience :: Developers",
+    "Programming Language :: Python",
+    "Programming Language :: Python :: 3.8",
+    "Programming Language :: Python :: 3.9",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python :: 3.12",
+    "Programming Language :: Python :: 3.13",
+    "Programming Language :: Python :: 3.14",
+]
+keywords = ["linetable", "python", "bytecode"]
+requires-python = ">=3.8"
+
+[project.urls]
+Homepage = "https://github.com/amol-/linetable";
+Source = "https://github.com/amol-/linetable";
+
+[tool.setuptools]
+include-package-data = true
+
+[tool.setuptools.packages.find]
+where = ["."]
+include = ["linetable", "linetable.*"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linetable-0.0.3/setup.py new/linetable-0.0.4/setup.py
--- old/linetable-0.0.3/setup.py        2023-03-07 11:43:47.000000000 +0100
+++ new/linetable-0.0.4/setup.py        1970-01-01 01:00:00.000000000 +0100
@@ -1,36 +0,0 @@
-from setuptools import setup, find_packages
-import sys, os
-
-here = os.path.abspath(os.path.dirname(__file__))
-try:
-    README = open(os.path.join(here, "README.rst")).read()
-except IOError:
-    README = ""
-
-version = "0.0.3"
-
-setup(
-    name="linetable",
-    version=version,
-    description="library to manage Python Locations Table (co_linetable)",
-    long_description=README,
-    classifiers=[
-        'Intended Audience :: Developers',
-        'Programming Language :: Python',
-        'Programming Language :: Python :: 3.11',
-    ],
-    keywords="",
-    author="Alessandro Molina",
-    author_email="[email protected]",
-    url="https://github.com/amol-/linetable";,
-    license="MIT",
-    packages=find_packages(exclude=["ez_setup", "examples", "tests"]),
-    include_package_data=True,
-    zip_safe=False,
-    install_requires=[
-        # -*- Extra requirements: -*-
-    ],
-    entry_points="""
-      # -*- Entry points: -*-
-      """,
-)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linetable-0.0.3/tests/test_linetable.py 
new/linetable-0.0.4/tests/test_linetable.py
--- old/linetable-0.0.3/tests/test_linetable.py 1970-01-01 01:00:00.000000000 
+0100
+++ new/linetable-0.0.4/tests/test_linetable.py 2026-10-08 12:03:39.984638200 
+0200
@@ -0,0 +1,108 @@
+import sys
+import pytest
+from linetable import generate_linetable, parse_linetable
+
+
+def test_parse_linetable():
+    linetable = 
b"\x80\x00\xd8\x06\x07\x80!\xd8\x06\x07\x88!\x81e\x80!\xd8\t\n\x80("
+    parsed = list(parse_linetable(linetable))
+    assert parsed == [
+        (1, 1, 1, 0, 0),
+        (1, 2, 2, 6, 7),
+        (1, 2, 2, 2, 3),
+        (1, 3, 3, 6, 7),
+        (1, 3, 3, 10, 11),
+        (2, 3, 3, 6, 11),
+        (1, 3, 3, 2, 3),
+        (1, 4, 4, 9, 10),
+        (1, 4, 4, 2, 10),
+    ]
+
+
+def test_parse_linetable_nocolumns():
+    linetable = (
+        
b"\xe8\x00\xe8\x02\xe8\x00\xe8\x02\xe8\x00\xe9\x00\xe8\x00\xe8\x02\xe8\x00"
+    )
+    parsed = list(parse_linetable(linetable))
+    assert parsed == [
+        (1, 1, 1, None, None),
+        (1, 2, 2, None, None),
+        (1, 2, 2, None, None),
+        (1, 3, 3, None, None),
+        (1, 3, 3, None, None),
+        (2, 3, 3, None, None),
+        (1, 3, 3, None, None),
+        (1, 4, 4, None, None),
+        (1, 4, 4, None, None),
+    ]
+
+
+def test_linetable():
+    pairs = [
+        # length, start_line, end_line, start_col, end_col
+        (1, 1, 1, 0, 0),
+        (1, 2, 2, 6, 7),
+        (1, 2, 2, 2, 3),
+        (1, 3, 3, 6, 7),
+        (1, 3, 3, 10, 11),
+        (2, 3, 3, 6, 11),
+        (1, 3, 3, 2, 3),
+        (1, 4, 4, 9, 10),
+        (1, 4, 4, 2, 10),
+    ]
+    expected = 
b"\x80\x00\xd8\x06\x07\x80!\xd8\x06\x07\x88!\x81e\x80!\xd8\t\n\x80("
+    assert generate_linetable(pairs, use_bytecode_offset=False) == expected
+
+
+def test_linetable_offsets():
+    pairs = [
+        # bytecode_offset, start_line, end_line, start_col, end_col
+        (0, 1, 1, 0, 0),
+        (2, 2, 2, 6, 7),
+        (4, 2, 2, 2, 3),
+        (6, 3, 3, 6, 7),
+        (8, 3, 3, 10, 11),
+        (10, 3, 3, 6, 11),
+        (14, 3, 3, 2, 3),
+        (16, 4, 4, 9, 10),
+        (18, 4, 4, 2, 10),
+    ]
+    expected = 
b"\x80\x00\xd8\x06\x07\x80!\xd8\x06\x07\x88!\x81e\x80!\xd8\t\n\x80("
+    assert generate_linetable(pairs, use_bytecode_offset=True) == expected
+
+
+def test_linetable_offsets_short():
+    pairs = [
+        # bytecode_offset, linenum
+        (0, 1),
+        (2, 2),
+        (4, 2),
+        (6, 3),
+        (8, 3),
+        (10, 3),
+        (14, 3),
+        (16, 4),
+        (18, 4),
+    ]
+    expected = (
+        
b"\xe8\x00\xe8\x02\xe8\x00\xe8\x02\xe8\x00\xe9\x00\xe8\x00\xe8\x02\xe8\x00"
+    )
+    assert generate_linetable(pairs, use_bytecode_offset=True) == expected
+
+
[email protected](sys.version_info < (3,11),
+                    reason="requires python3.11+")
+def test_roundtrip():
+    def _test_function():
+        x = 13
+        y = x * 2 + 7 + 8 + 9 - 3 - 1 - 5
+        z = y**2
+        return z
+
+    co_linetable = _test_function.__code__.co_linetable
+    assert (
+        generate_linetable(
+            parse_linetable(generate_linetable(parse_linetable(co_linetable)))
+        )
+        == co_linetable
+    )

Reply via email to