Hello community,

here is the log from the commit of package python-python-rpm-spec for 
openSUSE:Factory checked in at 2020-11-19 12:01:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-rpm-spec (Old)
 and      /work/SRC/openSUSE:Factory/.python-python-rpm-spec.new.5913 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-python-rpm-spec"

Thu Nov 19 12:01:35 2020 rev:5 rq:849347 version:0.10

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-python-rpm-spec/python-python-rpm-spec.changes
    2020-08-06 10:42:10.066121469 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-python-rpm-spec.new.5913/python-python-rpm-spec.changes
  2020-11-23 10:46:03.822336801 +0100
@@ -1,0 +2,7 @@
+Tue Nov 17 04:47:01 UTC 2020 - John Vandenberg <jay...@gmail.com>
+
+- Update to v0.10
+  * Ignore spaces before ':' separator
+  * Fix behavior of replace_macro function when macro is a tag
+
+-------------------------------------------------------------------

Old:
----
  python-rpm-spec-0.9.tar.gz

New:
----
  python-rpm-spec-0.10.tar.gz

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

Other differences:
------------------
++++++ python-python-rpm-spec.spec ++++++
--- /var/tmp/diff_new_pack.KIMtoI/_old  2020-11-23 10:46:04.386337364 +0100
+++ /var/tmp/diff_new_pack.KIMtoI/_new  2020-11-23 10:46:04.390337367 +0100
@@ -19,7 +19,7 @@
 %define skip_python2 1
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-python-rpm-spec
-Version:        0.9
+Version:        0.10
 Release:        0
 Summary:        Python module for parsing RPM spec files
 License:        MIT

++++++ python-rpm-spec-0.9.tar.gz -> python-rpm-spec-0.10.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/.gitignore 
new/python-rpm-spec-0.10/.gitignore
--- old/python-rpm-spec-0.9/.gitignore  2020-03-01 12:31:05.636504400 +0100
+++ new/python-rpm-spec-0.10/.gitignore 2020-09-19 21:23:19.038267400 +0200
@@ -95,6 +95,5 @@
 .idea/
 
 *.tar.gz
-.vscode
 *.src.rpm
 .pytest_cache/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/.pylintrc 
new/python-rpm-spec-0.10/.pylintrc
--- old/python-rpm-spec-0.9/.pylintrc   2020-03-01 12:31:05.475503000 +0100
+++ new/python-rpm-spec-0.10/.pylintrc  2020-09-19 21:28:45.024429600 +0200
@@ -1,565 +1,12 @@
-[MASTER]
-
-# A comma-separated list of package or module names from where C extensions may
-# be loaded. Extensions are loading into the active Python interpreter and may
-# run arbitrary code.
-extension-pkg-whitelist=
-
-# Add files or directories to the blacklist. They should be base names, not
-# paths.
-ignore=CVS
-
-# Add files or directories matching the regex patterns to the blacklist. The
-# regex matches against base names, not paths.
-ignore-patterns=
-
-# Python code to execute, usually for sys.path manipulation such as
-# pygtk.require().
-#init-hook=
-
-# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
-# number of processors available to use.
-jobs=1
-
-# Control the amount of potential inferred values when inferring a single
-# object. This can help the performance when dealing with large functions or
-# complex, nested conditions.
-limit-inference-results=100
-
-# List of plugins (as comma separated values of python modules names) to load,
-# usually to register additional checkers.
-load-plugins=
-
-# Pickle collected data for later comparisons.
-persistent=yes
-
-# Specify a configuration file.
-#rcfile=
-
-# When enabled, pylint would attempt to guess common misconfiguration and emit
-# user-friendly hints instead of false-positive error messages.
-suggestion-mode=yes
-
-# Allow loading of arbitrary C extensions. Extensions are imported into the
-# active Python interpreter and may run arbitrary code.
-unsafe-load-any-extension=no
-
-
 [MESSAGES CONTROL]
-
-# Only show warnings with the listed confidence levels. Leave empty to show
-# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED.
-confidence=
-
-# Disable the message, report, category or checker with the given id(s). You
-# can either give multiple identifiers separated by comma (,) or put this
-# option multiple times (only on the command line, not in the configuration
-# file where it should appear only once). You can also use "--disable=all" to
-# disable everything first and then reenable specific checks. For example, if
-# you want to run only the similarities checker, you can use "--disable=all
-# --enable=similarities". If you want to run only the classes checker, but have
-# no Warning level messages displayed, use "--disable=all --enable=classes
-# --disable=W".
-disable=print-statement,
-        parameter-unpacking,
-        unpacking-in-except,
-        old-raise-syntax,
-        backtick,
-        long-suffix,
-        old-ne-operator,
-        old-octal-literal,
-        import-star-module-level,
-        non-ascii-bytes-literal,
-        raw-checker-failed,
-        bad-inline-option,
-        locally-disabled,
-        locally-enabled,
-        file-ignored,
+enable=all
+disable=bad-continuation,
+        missing-docstring,
+        invalid-name,
+        too-few-public-methods,
+        no-member,
+        unused-argument,
+        import-outside-toplevel,
         suppressed-message,
-        useless-suppression,
-        deprecated-pragma,
-        use-symbolic-message-instead,
-        apply-builtin,
-        basestring-builtin,
-        buffer-builtin,
-        cmp-builtin,
-        coerce-builtin,
-        execfile-builtin,
-        file-builtin,
-        long-builtin,
-        raw_input-builtin,
-        reduce-builtin,
-        standarderror-builtin,
-        unicode-builtin,
-        xrange-builtin,
-        coerce-method,
-        delslice-method,
-        getslice-method,
-        setslice-method,
-        no-absolute-import,
-        old-division,
-        dict-iter-method,
-        dict-view-method,
-        next-method-called,
-        metaclass-assignment,
-        indexing-exception,
-        raising-string,
-        reload-builtin,
-        oct-method,
-        hex-method,
-        nonzero-method,
-        cmp-method,
-        input-builtin,
-        round-builtin,
-        intern-builtin,
-        unichr-builtin,
-        map-builtin-not-iterating,
-        zip-builtin-not-iterating,
-        range-builtin-not-iterating,
-        filter-builtin-not-iterating,
-        using-cmp-argument,
-        eq-without-hash,
-        div-method,
-        idiv-method,
-        rdiv-method,
-        exception-message-attribute,
-        invalid-str-codec,
-        sys-max-int,
-        bad-python3-import,
-        deprecated-string-function,
-        deprecated-str-translate-call,
-        deprecated-itertools-function,
-        deprecated-types-field,
-        next-method-defined,
-        dict-items-not-iterating,
-        dict-keys-not-iterating,
-        dict-values-not-iterating,
-        deprecated-operator-function,
-        deprecated-urllib-function,
-        xreadlines-attribute,
-        deprecated-sys-function,
-        exception-escape,
-        comprehension-escape,
-        C0103,
-        C0111,
-        C0111,
-        C0330, # Wrong hanging indentation before block
-        C0413,
-        E1101,
-        R0903,
-
-# Enable the message, report, category or checker with the given id(s). You can
-# either give multiple identifier separated by comma (,) or put this option
-# multiple time (only on the command line, not in the configuration file where
-# it should appear only once). See also the "--disable" option for examples.
-enable=c-extension-no-member
-
-
-[REPORTS]
-
-# Python expression which should return a note less than 10 (10 is the highest
-# note). You have access to the variables errors warning, statement which
-# respectively contain the number of errors / warnings messages and the total
-# number of statements analyzed. This is used by the global evaluation report
-# (RP0004).
-evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / 
statement) * 10)
-
-# Template used to display messages. This is a python new-style format string
-# used to format the message information. See doc for all details.
-#msg-template=
-
-# Set the output format. Available formats are text, parseable, colorized, json
-# and msvs (visual studio). You can also give a reporter class, e.g.
-# mypackage.mymodule.MyReporterClass.
-output-format=text
-
-# Tells whether to display a full report or only the messages.
-reports=no
-
-# Activate the evaluation score.
-score=yes
-
-
-[REFACTORING]
-
-# Maximum number of nested blocks for function / method body
-max-nested-blocks=5
-
-# Complete name of functions that never returns. When checking for
-# inconsistent-return-statements if a never returning function is called then
-# it will be considered as an explicit return statement and no message will be
-# printed.
-never-returning-functions=sys.exit
-
-
-[LOGGING]
-
-# Logging modules to check that the string format arguments are in logging
-# function parameter format.
-logging-modules=logging
-
-
-[SPELLING]
-
-# Limits count of emitted suggestions for spelling mistakes.
-max-spelling-suggestions=4
-
-# Spelling dictionary name. Available dictionaries: none. To make it working
-# install python-enchant package..
-spelling-dict=
-
-# List of comma separated words that should not be checked.
-spelling-ignore-words=
-
-# A path to a file that contains private dictionary; one word per line.
-spelling-private-dict-file=
-
-# Tells whether to store unknown words to indicated private dictionary in
-# --spelling-private-dict-file option instead of raising a message.
-spelling-store-unknown-words=no
-
-
-[MISCELLANEOUS]
-
-# List of note tags to take in consideration, separated by a comma.
-notes=FIXME,
-      XXX,
-      TODO
-
-
-[TYPECHECK]
-
-# List of decorators that produce context managers, such as
-# contextlib.contextmanager. Add to this list to register other decorators that
-# produce valid context managers.
-contextmanager-decorators=contextlib.contextmanager
-
-# List of members which are set dynamically and missed by pylint inference
-# system, and so shouldn't trigger E1101 when accessed. Python regular
-# expressions are accepted.
-generated-members=
-
-# Tells whether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-# Tells whether to warn about missing members when the owner of the attribute
-# is inferred to be None.
-ignore-none=yes
-
-# This flag controls whether pylint should warn about no-member and similar
-# checks whenever an opaque object is returned when inferring. The inference
-# can return multiple potential results while evaluating a Python object, but
-# some branches might not be evaluated, which results in partial inference. In
-# that case, it might be useful to still emit no-member and other checks for
-# the rest of the inferred objects.
-ignore-on-opaque-inference=yes
-
-# List of class names for which member attributes should not be checked (useful
-# for classes with dynamically set attributes). This supports the use of
-# qualified names.
-ignored-classes=optparse.Values,thread._local,_thread._local
-
-# List of module names for which member attributes should not be checked
-# (useful for modules/projects where namespaces are manipulated during runtime
-# and thus existing member attributes cannot be deduced by static analysis. It
-# supports qualified module names, as well as Unix pattern matching.
-ignored-modules=
-
-# Show a hint with possible names when a member name was not found. The aspect
-# of finding the hint is based on edit distance.
-missing-member-hint=yes
-
-# The minimum edit distance a name should have in order to be considered a
-# similar match for a missing member name.
-missing-member-hint-distance=1
-
-# The total number of similar names that should be taken in consideration when
-# showing a hint for a missing member.
-missing-member-max-choices=1
-
-
-[VARIABLES]
-
-# List of additional names supposed to be defined in builtins. Remember that
-# you should avoid to define new builtins when possible.
-additional-builtins=
-
-# Tells whether unused global variables should be treated as a violation.
-allow-global-unused-variables=yes
-
-# List of strings which can identify a callback function by name. A callback
-# name must start or end with one of those strings.
-callbacks=cb_,
-          _cb
-
-# A regular expression matching the name of dummy variables (i.e. expected to
-# not be used).
-dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
-
-# Argument names that match this expression will be ignored. Default to name
-# with leading underscore.
-ignored-argument-names=_.*|^ignored_|^unused_
-
-# Tells whether we should check for unused import in __init__ files.
-init-import=no
-
-# List of qualified module names which can have objects that can redefine
-# builtins.
-redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io
-
-
-[FORMAT]
-
-# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
-expected-line-ending-format=
-
-# Regexp for a line that is allowed to be longer than the limit.
-ignore-long-lines=^\s*(# )?<?https?://\S+>?$
-
-# Number of spaces of indent required inside a hanging  or continued line.
-indent-after-paren=4
-
-# String used as indentation unit. This is usually "    " (4 spaces) or "\t" (1
-# tab).
-indent-string='    '
-
-# Maximum number of characters on a single line.
-max-line-length=110
-
-# Maximum number of lines in a module.
-max-module-lines=1000
-
-# List of optional constructs for which whitespace checking is disabled. `dict-
-# separator` is used to allow tabulation in dicts, etc.: {1  : 1,\n222: 2}.
-# `trailing-comma` allows a space between comma and closing bracket: (a, ).
-# `empty-line` allows space-only lines.
-no-space-check=trailing-comma,
-               dict-separator
-
-# Allow the body of a class to be on the same line as the declaration if body
-# contains single statement.
-single-line-class-stmt=no
-
-# Allow the body of an if to be on the same line as the test if there is no
-# else.
-single-line-if-stmt=no
-
-
-[SIMILARITIES]
-
-# Ignore comments when computing similarities.
-ignore-comments=yes
-
-# Ignore docstrings when computing similarities.
-ignore-docstrings=yes
-
-# Ignore imports when computing similarities.
-ignore-imports=no
-
-# Minimum lines number of a similarity.
-min-similarity-lines=4
-
-
-[BASIC]
-
-# Naming style matching correct argument names.
-argument-naming-style=snake_case
-
-# Regular expression matching correct argument names. Overrides argument-
-# naming-style.
-#argument-rgx=
-
-# Naming style matching correct attribute names.
-attr-naming-style=snake_case
-
-# Regular expression matching correct attribute names. Overrides attr-naming-
-# style.
-#attr-rgx=
-
-# Bad variable names which should always be refused, separated by a comma.
-bad-names=foo,
-          bar,
-          baz,
-          toto,
-          tutu,
-          tata
-
-# Naming style matching correct class attribute names.
-class-attribute-naming-style=any
-
-# Regular expression matching correct class attribute names. Overrides class-
-# attribute-naming-style.
-#class-attribute-rgx=
-
-# Naming style matching correct class names.
-class-naming-style=PascalCase
-
-# Regular expression matching correct class names. Overrides class-naming-
-# style.
-#class-rgx=
-
-# Naming style matching correct constant names.
-const-naming-style=UPPER_CASE
-
-# Regular expression matching correct constant names. Overrides const-naming-
-# style.
-#const-rgx=
-
-# Minimum line length for functions/classes that require docstrings, shorter
-# ones are exempt.
-docstring-min-length=-1
-
-# Naming style matching correct function names.
-function-naming-style=snake_case
-
-# Regular expression matching correct function names. Overrides function-
-# naming-style.
-#function-rgx=
-
-# Good variable names which should always be accepted, separated by a comma.
-good-names=i,
-           j,
-           k,
-           ex,
-           Run,
-           _
-
-# Include a hint for the correct naming format with invalid-name.
-include-naming-hint=no
-
-# Naming style matching correct inline iteration names.
-inlinevar-naming-style=any
-
-# Regular expression matching correct inline iteration names. Overrides
-# inlinevar-naming-style.
-#inlinevar-rgx=
-
-# Naming style matching correct method names.
-method-naming-style=snake_case
-
-# Regular expression matching correct method names. Overrides method-naming-
-# style.
-#method-rgx=
-
-# Naming style matching correct module names.
-module-naming-style=snake_case
-
-# Regular expression matching correct module names. Overrides module-naming-
-# style.
-#module-rgx=
-
-# Colon-delimited sets of names that determine each other's naming style when
-# the name regexes allow several styles.
-name-group=
-
-# Regular expression which should only match function or class names that do
-# not require a docstring.
-no-docstring-rgx=^_
-
-# List of decorators that produce properties, such as abc.abstractproperty. Add
-# to this list to register other decorators that produce valid properties.
-# These decorators are taken in consideration only for invalid-name.
-property-classes=abc.abstractproperty
-
-# Naming style matching correct variable names.
-variable-naming-style=snake_case
-
-# Regular expression matching correct variable names. Overrides variable-
-# naming-style.
-#variable-rgx=
-
-
-[IMPORTS]
-
-# Allow wildcard imports from modules that define __all__.
-allow-wildcard-with-all=no
-
-# Analyse import fallback blocks. This can be used to support both Python 2 and
-# 3 compatible code, which means that the block might have code that exists
-# only in one or another interpreter, leading to false positives when analysed.
-analyse-fallback-blocks=no
-
-# Deprecated modules which should not be used, separated by a comma.
-deprecated-modules=optparse,tkinter.tix
-
-# Create a graph of external dependencies in the given file (report RP0402 must
-# not be disabled).
-ext-import-graph=
-
-# Create a graph of every (i.e. internal and external) dependencies in the
-# given file (report RP0402 must not be disabled).
-import-graph=
-
-# Create a graph of internal dependencies in the given file (report RP0402 must
-# not be disabled).
-int-import-graph=
-
-# Force import order to recognize a module as part of the standard
-# compatibility libraries.
-known-standard-library=
-
-# Force import order to recognize a module as part of a third party library.
-known-third-party=enchant
-
-
-[CLASSES]
-
-# List of method names used to declare (i.e. assign) instance attributes.
-defining-attr-methods=__init__,
-                      __new__,
-                      setUp
-
-# List of member names, which should be excluded from the protected access
-# warning.
-exclude-protected=_asdict,
-                  _fields,
-                  _replace,
-                  _source,
-                  _make
-
-# List of valid names for the first argument in a class method.
-valid-classmethod-first-arg=cls
-
-# List of valid names for the first argument in a metaclass class method.
-valid-metaclass-classmethod-first-arg=cls
-
-
-[DESIGN]
-
-# Maximum number of arguments for function / method.
-max-args=5
-
-# Maximum number of attributes for a class (see R0902).
-max-attributes=7
-
-# Maximum number of boolean expressions in an if statement.
-max-bool-expr=5
-
-# Maximum number of branch for function / method body.
-max-branches=12
-
-# Maximum number of locals for function / method body.
-max-locals=15
-
-# Maximum number of parents for a class (see R0901).
-max-parents=7
-
-# Maximum number of public methods for a class (see R0904).
-max-public-methods=20
-
-# Maximum number of return / yield for function / method body.
-max-returns=6
-
-# Maximum number of statements in function / method body.
-max-statements=50
-
-# Minimum number of public methods for a class (see R0903).
-min-public-methods=2
-
-
-[EXCEPTIONS]
-
-# Exceptions that will emit a warning when being caught. Defaults to
-# "Exception".
-overgeneral-exceptions=Exception
+        locally-disabled
+max-line-length=130
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/.travis.yml 
new/python-rpm-spec-0.10/.travis.yml
--- old/python-rpm-spec-0.9/.travis.yml 2020-03-01 12:31:11.367553500 +0100
+++ new/python-rpm-spec-0.10/.travis.yml        2020-09-12 11:07:40.821493400 
+0200
@@ -3,10 +3,10 @@
 language: python
 
 python:
-  - 3.5
+  - 3.8
 
 install:
   - pip install pytest coverage pytest-cov
 
 script:
-  - py.test --cov=pyrpm.spec tests
+  - pytest --cov=pyrpm.spec tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/.vscode/launch.json 
new/python-rpm-spec-0.10/.vscode/launch.json
--- old/python-rpm-spec-0.9/.vscode/launch.json 1970-01-01 01:00:00.000000000 
+0100
+++ new/python-rpm-spec-0.10/.vscode/launch.json        2020-09-12 
11:22:07.308439700 +0200
@@ -0,0 +1,13 @@
+{
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "Python: Current File",
+            "type": "python",
+            "request": "launch",
+            "program": "${file}",
+            "console": "integratedTerminal",
+            "justMyCode": false
+        }
+    ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/.vscode/settings.json 
new/python-rpm-spec-0.10/.vscode/settings.json
--- old/python-rpm-spec-0.9/.vscode/settings.json       1970-01-01 
01:00:00.000000000 +0100
+++ new/python-rpm-spec-0.10/.vscode/settings.json      2020-09-19 
21:08:05.503261600 +0200
@@ -0,0 +1,21 @@
+{
+    "python.pythonPath": ".venv/bin/python3",
+    "python.formatting.provider": "black",
+    "python.formatting.blackArgs": [
+        "--line-length",
+        "130",
+        "--target-version",
+        "py38"
+    ],
+    "editor.rulers": [
+        130
+    ],
+    "python.testing.pytestArgs": [
+        "tests",
+    ],
+    "python.testing.unittestEnabled": false,
+    "python.testing.nosetestsEnabled": false,
+    "python.testing.pytestEnabled": true,
+    "python.testing.autoTestDiscoverOnSaveEnabled": true,
+    "editor.formatOnSaveMode": "modifications",
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/AUTHORS 
new/python-rpm-spec-0.10/AUTHORS
--- old/python-rpm-spec-0.9/AUTHORS     2020-05-02 14:29:17.262953300 +0200
+++ new/python-rpm-spec-0.10/AUTHORS    2020-09-12 11:02:04.468869400 +0200
@@ -2,6 +2,7 @@
 Clément Bénier <clement.ben...@iot.bzh>
 KOLANICH <kola...@mail.ru>
 Lazar Šumar <bugzi...@lazar.co.nz>
+Leo Fang <leofang...@163.com>
 Lon Hohberger <l...@metamorphism.com>
 Luca Beltrame <lbeltr...@kde.org>
 Maciej Wolny <maciej.wo...@codethink.co.uk>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/CHANGELOG.md 
new/python-rpm-spec-0.10/CHANGELOG.md
--- old/python-rpm-spec-0.9/CHANGELOG.md        2020-05-02 15:05:15.548065000 
+0200
+++ new/python-rpm-spec-0.10/CHANGELOG.md       2020-09-19 21:42:55.392858700 
+0200
@@ -1,6 +1,13 @@
 # Changelog
 
-## 0.9 (202-05-02)
+## 0.10 (2020-09-19)
+
+Changes:
+
+* Ignore spaces before ':' separator (see PR 
[#32][https://github.com/bkircher/python-rpm-spec/pull/32])
+* Fix behavior of replace_macro function when macro is a tag, too (see issue 
[#33](https://github.com/bkircher/python-rpm-spec/issues/33)).
+
+## 0.9 (2020-05-02)
 
 Changes:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/PKG-INFO 
new/python-rpm-spec-0.10/PKG-INFO
--- old/python-rpm-spec-0.9/PKG-INFO    1970-01-01 01:00:00.000000000 +0100
+++ new/python-rpm-spec-0.10/PKG-INFO   1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: python-rpm-spec
-Version: 0.9
+Version: 0.10
 Summary: python-rpm-spec is a Python library for parsing RPM spec files.
 Home-page: https://github.com/bkircher/python-rpm-spec
 Author: Benjamin Kircher
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/README.md 
new/python-rpm-spec-0.10/README.md
--- old/python-rpm-spec-0.9/README.md   2020-03-01 12:31:05.628504300 +0100
+++ new/python-rpm-spec-0.10/README.md  2020-05-02 15:18:26.243766000 +0200
@@ -1,6 +1,7 @@
 # python-rpm-spec
 
 [![Build 
Status](https://travis-ci.org/bkircher/python-rpm-spec.svg?branch=master)](https://travis-ci.org/bkircher/python-rpm-spec)
+[![PyPI 
version](https://badge.fury.io/py/python-rpm-spec.svg)](https://badge.fury.io/py/python-rpm-spec)
 
 python-rpm-spec is a Python library for parsing RPM spec files.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/examples/a.py 
new/python-rpm-spec-0.10/examples/a.py
--- old/python-rpm-spec-0.9/examples/a.py       2020-03-01 12:31:05.647504600 
+0100
+++ new/python-rpm-spec-0.10/examples/a.py      2020-09-19 21:24:55.593528300 
+0200
@@ -1,6 +1,6 @@
 from pyrpm.spec import Spec, replace_macros
 
-spec = Spec.from_file('llvm.spec')
+spec = Spec.from_file("llvm.spec")
 print(spec.version)  # 3.8.0
 print(spec.sources[0])  # 
http://llvm.org/releases/%{version}/%{name}-%{version}.src.tar.xz
 print(replace_macros(spec.sources[0], spec))  # 
http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/examples/b.py 
new/python-rpm-spec-0.10/examples/b.py
--- old/python-rpm-spec-0.9/examples/b.py       2020-03-01 12:31:05.671504700 
+0100
+++ new/python-rpm-spec-0.10/examples/b.py      2020-09-19 21:24:55.586528300 
+0200
@@ -1,10 +1,10 @@
 from pyrpm.spec import Spec
 
-spec = Spec.from_file('llvm.spec')
+spec = Spec.from_file("llvm.spec")
 
 # Access sources and patches via name
 for k, v in spec.sources_dict.items():
-    print(f'{k} → {v}')
+    print(f"{k} → {v}")
 
 # Source0 → http://llvm.org/releases/%{version}/%{name}-%{version}.src.tar.xz
 # Source100 → llvm-config.h
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/examples/c.py 
new/python-rpm-spec-0.10/examples/c.py
--- old/python-rpm-spec-0.9/examples/c.py       2020-03-01 12:31:05.664504800 
+0100
+++ new/python-rpm-spec-0.10/examples/c.py      2020-09-19 21:24:55.590528200 
+0200
@@ -1,10 +1,10 @@
 from pyrpm.spec import Spec
 
-spec = Spec.from_file('attica-qt5.spec')
+spec = Spec.from_file("attica-qt5.spec")
 
 # Access sources and patches via name
 for br in spec.build_requires:
-    print(f'{br.name} {br.operator} {br.version}' if br.version else 
f'{br.name}')
+    print(f"{br.name} {br.operator} {br.version}" if br.version else 
f"{br.name}")
 
 # cmake >= 3.0
 # extra-cmake-modules >= %{_tar_path}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/pyrpm/__init__.py 
new/python-rpm-spec-0.10/pyrpm/__init__.py
--- old/python-rpm-spec-0.9/pyrpm/__init__.py   2020-05-02 15:07:32.983013000 
+0200
+++ new/python-rpm-spec-0.10/pyrpm/__init__.py  2020-09-19 21:45:20.706195000 
+0200
@@ -2,4 +2,4 @@
 
 """
 
-__version__ = "0.9"
+__version__ = "0.10"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/pyrpm/spec.py 
new/python-rpm-spec-0.10/pyrpm/spec.py
--- old/python-rpm-spec-0.9/pyrpm/spec.py       2020-05-02 14:47:30.966467100 
+0200
+++ new/python-rpm-spec-0.10/pyrpm/spec.py      2020-09-19 21:24:55.800529500 
+0200
@@ -81,7 +81,10 @@
 
     def update_impl(self, spec_obj, context, match_obj, line):
         name, value = match_obj.groups()
-        setattr(spec_obj, name, str(value))
+        spec_obj.macros[name] = str(value)
+        if name not in _tag_names:
+            # Also make available as attribute of spec object
+            setattr(spec_obj, name, str(value))
         return spec_obj, context
 
 
@@ -160,32 +163,36 @@
         getattr(target_obj, self.name).append(value)
         return spec_obj, context
 
+
 def re_tag_compile(tag):
     return re.compile(tag, re.IGNORECASE)
 
+
 _tags = [
-    _NameValue("name", re_tag_compile(r"^Name:\s*(\S+)")),
-    _NameValue("version", re_tag_compile(r"^Version:\s*(\S+)")),
-    _NameValue("epoch", re_tag_compile(r"^Epoch:\s*(\S+)")),
-    _NameValue("release", re_tag_compile(r"^Release:\s*(\S+)")),
-    _NameValue("summary", re_tag_compile(r"^Summary:\s*(.+)")),
-    _NameValue("license", re_tag_compile(r"^License:\s*(.+)")),
-    _NameValue("group", re_tag_compile(r"^Group:\s*(\S+)")),
-    _NameValue("url", re_tag_compile(r"^URL:\s*(\S+)")),
-    _NameValue("buildroot", re_tag_compile(r"^BuildRoot:\s*(\S+)")),
-    _NameValue("buildarch", re_tag_compile(r"^BuildArch:\s*(\S+)")),
-    _ListAndDict("sources", re_tag_compile(r"^(Source\d*):\s*(\S+)")),
-    _ListAndDict("patches", re_tag_compile(r"^(Patch\d*):\s*(\S+)")),
-    _List("build_requires", re_tag_compile(r"^BuildRequires:\s*(.+)")),
-    _List("requires", re_tag_compile(r"^Requires:\s*(.+)")),
-    _List("conflicts", re_tag_compile(r"^Conflicts:\s*(.+)")),
-    _List("obsoletes", re_tag_compile(r"^Obsoletes:\s*(.+)")),
-    _List("provides", re_tag_compile(r"^Provides:\s*(.+)")),
+    _NameValue("name", re_tag_compile(r"^Name\s*:\s*(\S+)")),
+    _NameValue("version", re_tag_compile(r"^Version\s*:\s*(\S+)")),
+    _NameValue("epoch", re_tag_compile(r"^Epoch\s*:\s*(\S+)")),
+    _NameValue("release", re_tag_compile(r"^Release\s*:\s*(\S+)")),
+    _NameValue("summary", re_tag_compile(r"^Summary\s*:\s*(.+)")),
+    _NameValue("license", re_tag_compile(r"^License\s*:\s*(.+)")),
+    _NameValue("group", re_tag_compile(r"^Group\s*:\s*(.+)")),
+    _NameValue("url", re_tag_compile(r"^URL\s*:\s*(\S+)")),
+    _NameValue("buildroot", re_tag_compile(r"^BuildRoot\s*:\s*(\S+)")),
+    _NameValue("buildarch", re_tag_compile(r"^BuildArch\s*:\s*(\S+)")),
+    _ListAndDict("sources", re_tag_compile(r"^(Source\d*\s*):\s*(.+)")),
+    _ListAndDict("patches", re_tag_compile(r"^(Patch\d*\s*):\s*(\S+)")),
+    _List("build_requires", re_tag_compile(r"^BuildRequires\s*:\s*(.+)")),
+    _List("requires", re_tag_compile(r"^Requires\s*:\s*(.+)")),
+    _List("conflicts", re_tag_compile(r"^Conflicts\s*:\s*(.+)")),
+    _List("obsoletes", re_tag_compile(r"^Obsoletes\s*:\s*(.+)")),
+    _List("provides", re_tag_compile(r"^Provides\s*:\s*(.+)")),
     _List("packages", re.compile(r"^%package\s+(\S+)")),
     _MacroDef("define", re.compile(r"^%define\s+(\S+)\s+(\S+)")),
     _MacroDef("global", re.compile(r"^%global\s+(\S+)\s+(\S+)")),
 ]
 
+_tag_names = [tag.name for tag in _tags]
+
 _macro_pattern = re.compile(r"%{(\S+?)\}")
 
 
@@ -305,9 +312,7 @@
 
 
 class Spec:
-    """Represents a single spec file.
-
-    """
+    """Represents a single spec file."""
 
     def __init__(self):
         for tag in _tags:
@@ -316,8 +321,9 @@
             else:
                 setattr(self, tag.name, None)
 
-        self.sources_dict = dict()
-        self.patches_dict = dict()
+        self.sources_dict = {}
+        self.patches_dict = {}
+        self.macros = {}
 
     @property
     def packages_dict(self):
@@ -392,24 +398,24 @@
             parts = macro_name[1:].split(sep=":", maxsplit=1)
             assert parts
             if _test_conditional(macro_name):
-                if hasattr(spec, parts[0]):
+                if hasattr(spec, parts[0]) or parts[0] in spec.macros:
                     if len(parts) == 2:
                         return parts[1]
 
-                    return getattr(spec, parts[0], None)
+                    return spec.macros.get(parts[0], getattr(spec, parts[0], 
None))
 
                 return ""
 
-            if not hasattr(spec, parts[0]):
+            if not hasattr(spec, parts[0]) and parts[0] not in spec.macros:
                 if len(parts) == 2:
                     return parts[1]
 
-                return getattr(spec, parts[0], None)
+                return spec.macros.get(parts[0], getattr(spec, parts[0], None))
 
             return ""
 
         if spec:
-            value = getattr(spec, macro_name, None)
+            value = spec.macros.get(macro_name, getattr(spec, macro_name, 
None))
             if value:
                 return str(value)
         return match.string[match.start() : match.end()]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/setup.py 
new/python-rpm-spec-0.10/setup.py
--- old/python-rpm-spec-0.9/setup.py    1970-01-01 01:00:00.000000000 +0100
+++ new/python-rpm-spec-0.10/setup.py   1970-01-01 01:00:00.000000000 +0100
@@ -10,7 +10,7 @@
 {'': ['*']}
 
 setup(name='python-rpm-spec',
-      version='0.9',
+      version='0.10',
       description='python-rpm-spec is a Python library for parsing RPM spec 
files.',
       author='Benjamin Kircher',
       author_email='bkirc...@0xadd.de',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rpm-spec-0.9/tests/test_spec_file_parser.py 
new/python-rpm-spec-0.10/tests/test_spec_file_parser.py
--- old/python-rpm-spec-0.9/tests/test_spec_file_parser.py      2020-05-02 
14:43:25.667559600 +0200
+++ new/python-rpm-spec-0.10/tests/test_spec_file_parser.py     2020-09-19 
21:34:41.458718300 +0200
@@ -5,6 +5,9 @@
 CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
 
 
+# pylint: disable=no-self-use,protected-access
+
+
 class TestPackageClass:
     def test_repr_string(self):
         package = Package("foo")
@@ -37,10 +40,7 @@
         assert spec.version == "3.8.0"
 
         assert len(spec.sources) == 2
-        assert (
-            spec.sources[0]
-            == 
"http://llvm.org/releases/%{version}/%{name}-%{version}.src.tar.xz";
-        )
+        assert spec.sources[0] == 
"http://llvm.org/releases/%{version}/%{name}-%{version}.src.tar.xz";
         assert spec.sources[1] == "llvm-config.h"
 
         assert len(spec.patches) == 1
@@ -54,7 +54,7 @@
         assert not spec.packages[0].is_subpackage
 
     def test_parse_subpackages(self):
-        # spec file contains four subpackages and one base package
+        # spec file contains four sub-packages and one base package
         spec = Spec.from_file(os.path.join(CURRENT_DIR, "llvm.spec"))
         assert len(spec.packages) == 5
 
@@ -98,10 +98,7 @@
         # Summary: tag
         assert spec.summary == "JavaScript Remote Debugger for SpiderMonkey"
         packages = spec.packages_dict
-        assert (
-            packages["jsrdbg-devel"].summary
-            == "Header files, libraries and development documentation for 
%{name}"
-        )
+        assert packages["jsrdbg-devel"].summary == "Header files, libraries 
and development documentation for %{name}"
         assert packages["jrdb"].summary == "A command line debugger client for 
%{name}"
 
     def test_defines(self):
@@ -117,6 +114,28 @@
         assert spec._libname == "KF5Attica"
         assert spec._tar_path == "5.31"
 
+    def test_replace_macro_that_is_tag_name(self):
+        """Test that we are able to replace macros which are in the tag list.
+
+        See issue https://github.com/bkircher/python-rpm-spec/issues/33.
+
+        """
+        spec = Spec.from_string(
+            r"""
+%global myversion 1.2.3
+Version: %{myversion}
+        """
+        )
+        assert replace_macros(spec.version, spec) == "1.2.3"
+
+        spec = Spec.from_string(
+            r"""
+%global version 1.2.3
+Version: %{version}
+        """
+        )
+        assert replace_macros(spec.version, spec) == "1.2.3"
+
     def test_requirement_parsing(self):
         spec = Spec.from_file(os.path.join(CURRENT_DIR, "attica-qt5.spec"))
 
@@ -164,10 +183,7 @@
 class TestReplaceMacro:
     def test_replace_macro_with_spec(self):
         spec = Spec.from_file(os.path.join(CURRENT_DIR, "llvm.spec"))
-        assert (
-            replace_macros(spec.sources[0], spec)
-            == "http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz";
-        )
+        assert replace_macros(spec.sources[0], spec) == 
"http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz";
         assert replace_macros(spec.sources[1], spec) == "llvm-config.h"
 
     def test_replace_without_spec(self):
@@ -185,6 +201,7 @@
 
     def test_replace_macro_twice(self):
         spec = Spec.from_file(os.path.join(CURRENT_DIR, "jsrdbg.spec"))
+        # pylint: disable=line-too-long
         assert (
             replace_macros(spec.sources[0], spec)
             == 
"https://github.com/swojtasiak/jsrdbg/archive/26f9f2b27c04b4aec9cd67baaf9a0a206bbbd5c7.tar.gz#/jsrdbg-26f9f2b27c04b4aec9cd67baaf9a0a206bbbd5c7.tar.gz";
_______________________________________________
openSUSE Commits mailing list -- commit@lists.opensuse.org
To unsubscribe, email commit-le...@lists.opensuse.org
List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette
List Archives: 
https://lists.opensuse.org/archives/list/commit@lists.opensuse.org

Reply via email to