Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pamela for openSUSE:Factory 
checked in at 2023-12-15 21:49:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pamela (Old)
 and      /work/SRC/openSUSE:Factory/.python-pamela.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pamela"

Fri Dec 15 21:49:58 2023 rev:2 rq:1133386 version:1.1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pamela/python-pamela.changes      
2020-04-07 10:31:54.870544947 +0200
+++ /work/SRC/openSUSE:Factory/.python-pamela.new.25432/python-pamela.changes   
2023-12-15 21:50:16.224741592 +0100
@@ -1,0 +2,6 @@
+Fri Dec  8 10:03:59 UTC 2023 - Dirk Müller <dmuel...@suse.com>
+
+- update to 1.1.0:
+  * Enable password input in authenticate to be an iterable
+
+-------------------------------------------------------------------

Old:
----
  1.0.0.tar.gz

New:
----
  1.1.0.tar.gz

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

Other differences:
------------------
++++++ python-pamela.spec ++++++
--- /var/tmp/diff_new_pack.4XJ1z5/_old  2023-12-15 21:50:16.948768231 +0100
+++ /var/tmp/diff_new_pack.4XJ1z5/_new  2023-12-15 21:50:16.952768378 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-pamela
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-pamela
-Version:        1.0.0
+Version:        1.1.0
 Release:        0
 Summary:        PAM interface using ctypes
 License:        MIT

++++++ 1.0.0.tar.gz -> 1.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pamela-1.0.0/.bumpversion.cfg 
new/pamela-1.1.0/.bumpversion.cfg
--- old/pamela-1.0.0/.bumpversion.cfg   2019-01-17 16:21:23.000000000 +0100
+++ new/pamela-1.1.0/.bumpversion.cfg   1970-01-01 01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-[bumpversion]
-current_version = 1.0.0
-parse = 
(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.(?P<release>[a-z0-9]+))?
-tag_name = {new_version}
-allow_dirty = True
-commit = True
-serialize = 
-       {major}.{minor}.{patch}.{release}
-       {major}.{minor}.{patch}
-
-[bumpversion:file:pamela.py]
-
-[bumpversion:part:release]
-optional_value = stable
-values = 
-       dev
-       stable
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pamela-1.0.0/.flake8 new/pamela-1.1.0/.flake8
--- old/pamela-1.0.0/.flake8    1970-01-01 01:00:00.000000000 +0100
+++ new/pamela-1.1.0/.flake8    2023-06-01 11:43:37.000000000 +0200
@@ -0,0 +1,7 @@
+[flake8]
+# Ignore style and complexity
+# E: style errors
+# W: style warnings
+# C: complexity
+# F841: local variable assigned but never used
+ignore = E, C, W, D
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pamela-1.0.0/.github/workflows/release.yaml 
new/pamela-1.1.0/.github/workflows/release.yaml
--- old/pamela-1.0.0/.github/workflows/release.yaml     1970-01-01 
01:00:00.000000000 +0100
+++ new/pamela-1.1.0/.github/workflows/release.yaml     2023-06-01 
11:43:37.000000000 +0200
@@ -0,0 +1,45 @@
+# This is a GitHub workflow defining a set of jobs with a set of steps.
+# ref: 
https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions
+#
+name: Release
+
+# always build releases (to make sure wheel-building works)
+# but only publish to PyPI on tags
+on:
+  pull_request:
+    paths-ignore:
+      - "*.md"
+      - ".github/workflows/*.yaml"
+      - "!.github/workflows/release.yaml"
+  push:
+    branches:
+      - main
+    tags: ["**"]
+  workflow_dispatch:
+
+jobs:
+  build-release:
+    permissions:
+      # IMPORTANT: this permission is mandatory for trusted publishing
+      id-token: write
+    runs-on: ubuntu-22.04
+    steps:
+      - uses: actions/checkout@v3
+      - uses: actions/setup-python@v4
+        with:
+          python-version: "3.11"
+
+      - name: install build package
+        run: |
+          pip install --upgrade pip
+          pip install build
+          pip freeze
+
+      - name: build release
+        run: |
+          python -m build --sdist --wheel .
+          ls -l dist
+
+      - name: publish to pypi
+        uses: pypa/gh-action-pypi-publish@v1.8.6
+        if: startsWith(github.ref, 'refs/tags/')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pamela-1.0.0/.github/workflows/test.yaml 
new/pamela-1.1.0/.github/workflows/test.yaml
--- old/pamela-1.0.0/.github/workflows/test.yaml        1970-01-01 
01:00:00.000000000 +0100
+++ new/pamela-1.1.0/.github/workflows/test.yaml        2023-06-01 
11:43:37.000000000 +0200
@@ -0,0 +1,46 @@
+# This is a GitHub workflow defining a set of jobs with a set of steps.
+# ref: 
https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions
+#
+name: Tests
+
+on:
+  pull_request:
+    paths-ignore:
+      - "docs/**"
+      - ".github/workflows/*.yaml"
+      - "!.github/workflows/test.yaml"
+  push:
+    branches:
+      - main
+    tags: ["**"]
+  workflow_dispatch:
+
+jobs:
+  test:
+    runs-on: ubuntu-22.04
+    timeout-minutes: 10
+
+    strategy:
+      # Keep running even if one variation of the job fail
+      fail-fast: false
+      matrix:
+        python:
+          - "3.7"
+          - "3.8"
+          - "3.9"
+          - "3.10"
+          - "3.11"
+
+    steps:
+      - uses: actions/checkout@v3
+      - uses: actions/setup-python@v4
+        with:
+          python-version: "${{ matrix.python }}"
+
+      - name: Install Python dependencies
+        run: |
+          pip install . pytest
+          pip list
+
+      - name: Run tests
+        run: pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pamela-1.0.0/.pre-commit-config.yaml 
new/pamela-1.1.0/.pre-commit-config.yaml
--- old/pamela-1.0.0/.pre-commit-config.yaml    1970-01-01 01:00:00.000000000 
+0100
+++ new/pamela-1.1.0/.pre-commit-config.yaml    2023-06-01 11:43:37.000000000 
+0200
@@ -0,0 +1,73 @@
+# pre-commit is a tool to perform a predefined set of tasks manually and/or
+# automatically before git commits are made.
+#
+# Config reference: https://pre-commit.com/#pre-commit-configyaml---top-level
+#
+# Common tasks
+#
+# - Run on all files:   pre-commit run --all-files
+# - Register git hooks: pre-commit install --install-hooks
+#
+repos:
+  # Autoformat: Python code, syntax patterns are modernized
+  - repo: https://github.com/asottile/pyupgrade
+    rev: v3.3.1
+    hooks:
+      - id: pyupgrade
+        args:
+          - --py37-plus
+
+  # Autoformat: Python code
+  - repo: https://github.com/PyCQA/autoflake
+    rev: v2.0.2
+    hooks:
+      - id: autoflake
+        # args ref: https://github.com/PyCQA/autoflake#advanced-usage
+        args:
+          - --in-place
+
+  # Autoformat: python imports
+  - repo: https://github.com/pycqa/isort
+    rev: 5.12.0
+    hooks:
+      - id: isort
+
+  # Autoformat: Python code
+  - repo: https://github.com/psf/black
+    rev: 23.3.0
+    hooks:
+      - id: black
+
+  # Autoformat: markdown, yaml
+  - repo: https://github.com/pre-commit/mirrors-prettier
+    rev: v3.0.0-alpha.6
+    hooks:
+      - id: prettier
+
+  # Misc...
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v4.4.0
+    # ref: https://github.com/pre-commit/pre-commit-hooks#hooks-available
+    hooks:
+      # Autoformat: Makes sure files end in a newline and only a newline.
+      - id: end-of-file-fixer
+
+      # Autoformat: Sorts entries in requirements.txt.
+      - id: requirements-txt-fixer
+
+      # Lint: Check for files with names that would conflict on a
+      # case-insensitive filesystem like MacOS HFS+ or Windows FAT.
+      - id: check-case-conflict
+
+      # Lint: Checks that non-binary executables have a proper shebang.
+      - id: check-executables-have-shebangs
+
+  # Lint: Python code
+  - repo: https://github.com/pycqa/flake8
+    rev: "6.0.0"
+    hooks:
+      - id: flake8
+
+# pre-commit.ci config reference: https://pre-commit.ci/#configuration
+ci:
+  autoupdate_schedule: monthly
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pamela-1.0.0/pamela.py new/pamela-1.1.0/pamela.py
--- old/pamela-1.0.0/pamela.py  2019-01-17 16:21:23.000000000 +0100
+++ new/pamela-1.1.0/pamela.py  2023-06-01 11:43:37.000000000 +0200
@@ -11,9 +11,8 @@
 
 Implemented using ctypes, so no compilation is necessary.
 """
-from __future__ import print_function
 
-__version__ = '1.0.0'
+__version__ = '1.1.0'
 
 __all__ = [
     'PAMError',
@@ -24,21 +23,33 @@
     'change_password',
 ]
 
-from ctypes import CDLL, POINTER, Structure, CFUNCTYPE, cast, pointer, sizeof, 
byref
-from ctypes import c_void_p, c_uint, c_char_p, c_char, c_int
-from ctypes.util import find_library
 import getpass
 import sys
+from ctypes import (
+    CDLL,
+    CFUNCTYPE,
+    POINTER,
+    Structure,
+    byref,
+    c_char,
+    c_char_p,
+    c_int,
+    c_uint,
+    c_void_p,
+    cast,
+    pointer,
+    sizeof,
+)
+from ctypes.util import find_library
 
 # Python 3 bytes/unicode compat
-if sys.version_info >= (3,):
-    unicode = str
-    raw_input = input
-    def _bytes_to_str(s, encoding='utf8'):
-        return s.decode(encoding)
-else:
-    def _bytes_to_str(s, encoding='utf8'):
-        return s
+unicode = str
+raw_input = input
+
+
+def _bytes_to_str(s, encoding='utf8'):
+    return s.decode(encoding)
+
 
 def _cast_bytes(s, encoding='utf8'):
     if isinstance(s, unicode):
@@ -55,7 +66,7 @@
 
 STRDUP = LIBC.strdup
 STRDUP.argstypes = [c_char_p]
-STRDUP.restype = POINTER(c_char) # NOT c_char_p !!!!
+STRDUP.restype = POINTER(c_char)  # NOT c_char_p !!!!
 
 # Various constants
 PAM_PROMPT_ECHO_OFF = 1
@@ -83,9 +94,8 @@
 
 class PamHandle(Structure):
     """wrapper class for pam_handle_t"""
-    _fields_ = [
-            ("handle", c_void_p)
-            ]
+
+    _fields_ = [("handle", c_void_p)]
 
     def __init__(self):
         Structure.__init__(self)
@@ -117,16 +127,12 @@
             return ret.decode(encoding)
 
     def put_env(self, k, v, encoding='utf-8'):
-        retval = PAM_PUTENV(
-            self,
-            ('%s=%s' % (k, v)).encode(encoding))
+        retval = PAM_PUTENV(self, (f'{k}={v}').encode(encoding))
         if retval != PAM_SUCCESS:
             raise PAMError(errno=retval)
 
     def del_env(self, k, encoding='utf-8'):
-        retval = PAM_PUTENV(
-            self,
-            k.encode(encoding))
+        retval = PAM_PUTENV(self, k.encode(encoding))
         if retval != PAM_SUCCESS:
             raise PAMError(errno=retval)
 
@@ -159,13 +165,16 @@
 PAM_STRERROR.restype = c_char_p
 PAM_STRERROR.argtypes = [PamHandle, c_int]
 
+
 def pam_strerror(handle, errno):
     """Wrap bytes-only PAM_STRERROR in native str"""
     return _bytes_to_str(PAM_STRERROR(handle, errno))
 
+
 class PAMError(Exception):
     errno = None
     message = ''
+
     def __init__(self, message='', errno=None):
         self.errno = errno
         if message:
@@ -178,47 +187,51 @@
 
     def __repr__(self):
         en = '' if self.errno is None else ' %i' % self.errno
-        return "<PAM Error%s: '%s'>" % (en, self.message)
+        return f"<PAM Error{en}: '{self.message}'>"
 
     def __str__(self):
         en = '' if self.errno is None else ' %i' % self.errno
-        return '[PAM Error%s] %s' % (en, self.message)
+        return f'[PAM Error{en}] {self.message}'
+
 
 class PamMessage(Structure):
     """wrapper class for pam_message structure"""
+
     _fields_ = [
-            ("msg_style", c_int),
-            ("msg", POINTER(c_char)),
-            ]
+        ("msg_style", c_int),
+        ("msg", POINTER(c_char)),
+    ]
 
     def __repr__(self):
         return "<PamMessage %i '%s'>" % (self.msg_style, 
_bytes_to_str(self.msg))
 
+
 class PamResponse(Structure):
     """wrapper class for pam_response structure"""
+
     _fields_ = [
-            ("resp", POINTER(c_char)),
-            ("resp_retcode", c_int),
-            ]
+        ("resp", POINTER(c_char)),
+        ("resp_retcode", c_int),
+    ]
 
     def __repr__(self):
         return "<PamResponse %i '%s'>" % (self.resp_retcode, 
_bytes_to_str(self.resp))
 
-CONV_FUNC = CFUNCTYPE(c_int,
-        c_int, POINTER(POINTER(PamMessage)),
-               POINTER(POINTER(PamResponse)), c_void_p)
+
+CONV_FUNC = CFUNCTYPE(
+    c_int, c_int, POINTER(POINTER(PamMessage)), POINTER(POINTER(PamResponse)), 
c_void_p
+)
+
 
 class PamConv(Structure):
     """wrapper class for pam_conv structure"""
-    _fields_ = [
-            ("conv", CONV_FUNC),
-            ("appdata_ptr", c_void_p)
-            ]
+
+    _fields_ = [("conv", CONV_FUNC), ("appdata_ptr", c_void_p)]
+
 
 PAM_START = LIBPAM.pam_start
 PAM_START.restype = c_int
-PAM_START.argtypes = [c_char_p, c_char_p, POINTER(PamConv),
-        POINTER(PamHandle)]
+PAM_START.argtypes = [c_char_p, c_char_p, POINTER(PamConv), POINTER(PamHandle)]
 
 PAM_END = LIBPAM.pam_end
 PAM_END.restype = c_int
@@ -268,6 +281,7 @@
 PAM_GET_ITEM.restype = c_int
 PAM_GET_ITEM.argtypes = [PamHandle, c_int, POINTER(c_void_p)]
 
+
 @CONV_FUNC
 def default_conv(n_messages, messages, p_response, app_data):
     addr = CALLOC(n_messages, sizeof(PamResponse))
@@ -296,9 +310,11 @@
             print(repr(messages[i].contents))
     return 0
 
+
 def new_simple_password_conv(passwords, encoding):
     passwords = [_cast_bytes(password, encoding) for password in passwords]
     passwords.reverse()
+
     @CONV_FUNC
     def conv_func(n_messages, messages, p_response, app_data):
         """Simple conversation function that responds to any
@@ -314,8 +330,10 @@
                 p_response.contents[i].resp = pw_copy
                 p_response.contents[i].resp_retcode = 0
         return 0
+
     return conv_func
 
+
 def pam_start(service, username, conv_func=default_conv, encoding='utf8'):
     service = _cast_bytes(service, encoding)
     username = _cast_bytes(username, encoding)
@@ -330,6 +348,7 @@
 
     return handle
 
+
 def pam_end(handle, retval=0):
     e = PAM_END(handle, retval)
     if retval == 0 and e == 0:
@@ -338,14 +357,22 @@
         retval = e
     raise PAMError(errno=retval)
 
-def authenticate(username, password=None, service='login', encoding='utf-8',
-                 resetcred=PAM_REINITIALIZE_CRED, close=True):
+
+def authenticate(
+    username,
+    password=None,
+    service='login',
+    encoding='utf-8',
+    resetcred=PAM_REINITIALIZE_CRED,
+    close=True,
+):
     """Returns None if the given username and password authenticate for the
     given service.  Raises PAMError otherwise
 
     ``username``: the username to authenticate
 
-    ``password``: the password in plain text
+    ``password``: the password in plain text. It can also be an iterable of
+                  passwords when using multifactor authentication.
                   Defaults to None to use PAM's conversation interface
 
     ``service``: the PAM service to authenticate against.
@@ -369,8 +396,9 @@
     if password is None:
         conv_func = default_conv
     else:
-        password = _cast_bytes(password, encoding)
-        conv_func = new_simple_password_conv((password, ), encoding)
+        if isinstance(password, str):
+            password = (password,)
+        conv_func = new_simple_password_conv(password, encoding)
 
     handle = pam_start(service, username, conv_func=conv_func, 
encoding=encoding)
 
@@ -388,18 +416,22 @@
     else:
         return handle
 
+
 def open_session(username, service='login', encoding='utf-8'):
     handle = pam_start(service, username, encoding=encoding)
     return pam_end(handle, PAM_OPEN_SESSION(handle, 0))
 
+
 def close_session(username, service='login', encoding='utf-8'):
     handle = pam_start(service, username, encoding=encoding)
     return pam_end(handle, PAM_CLOSE_SESSION(handle, 0))
 
+
 def check_account(username, service='login', encoding='utf-8'):
     handle = pam_start(service, username, encoding=encoding)
     return pam_end(handle, PAM_ACCT_MGMT(handle, 0))
 
+
 def change_password(username, password=None, service='login', 
encoding='utf-8'):
     if password is None:
         conv_func = default_conv
@@ -412,34 +444,72 @@
     handle = pam_start(service, username, conv_func=conv_func, 
encoding=encoding)
     return pam_end(handle, PAM_CHAUTHTOK(handle, 0))
 
+
 if __name__ == "__main__":
     import optparse
 
     usage = "usage: %prog [options] [username]"
     parser = optparse.OptionParser(usage=usage)
-    parser.add_option('-a', '--authenticate', dest='authenticate',
-        action='store_true', help='authenticate user')
-    parser.add_option('-o', '--open-session', dest='open_session',
-        action='store_true', help='open session')
-    parser.add_option('-c', '--close-session', dest='close_session',
-        action='store_true', help='close session')
-    parser.add_option('-v', '--validate-account', dest='validate_account',
-        action='store_true', help='check account validity')
-    parser.add_option('-p', '--change-password', dest='change_password',
-        action='store_true', help='change password')
-    parser.add_option('-s', '--service', dest='service',
-        action='store', default='login',
-        help='PAM service to use [default: %default]')
-    parser.add_option('-P', '--ask-password', dest='ask_password',
-        action='store_true', help="own password prompt instead of PAM's")
+    parser.add_option(
+        '-a',
+        '--authenticate',
+        dest='authenticate',
+        action='store_true',
+        help='authenticate user',
+    )
+    parser.add_option(
+        '-o',
+        '--open-session',
+        dest='open_session',
+        action='store_true',
+        help='open session',
+    )
+    parser.add_option(
+        '-c',
+        '--close-session',
+        dest='close_session',
+        action='store_true',
+        help='close session',
+    )
+    parser.add_option(
+        '-v',
+        '--validate-account',
+        dest='validate_account',
+        action='store_true',
+        help='check account validity',
+    )
+    parser.add_option(
+        '-p',
+        '--change-password',
+        dest='change_password',
+        action='store_true',
+        help='change password',
+    )
+    parser.add_option(
+        '-s',
+        '--service',
+        dest='service',
+        action='store',
+        default='login',
+        help='PAM service to use [default: %default]',
+    )
+    parser.add_option(
+        '-P',
+        '--ask-password',
+        dest='ask_password',
+        action='store_true',
+        help="own password prompt instead of PAM's",
+    )
 
     (o, a) = parser.parse_args()
 
-    if not (o.authenticate or \
-        o.open_session or \
-        o.close_session or \
-        o.validate_account or \
-        o.change_password):
+    if not (
+        o.authenticate
+        or o.open_session
+        or o.close_session
+        or o.validate_account
+        or o.change_password
+    ):
         parser.error("One of -a, -o, -c, -v or -p is mandatory")
 
     try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pamela-1.0.0/pyproject.toml 
new/pamela-1.1.0/pyproject.toml
--- old/pamela-1.0.0/pyproject.toml     1970-01-01 01:00:00.000000000 +0100
+++ new/pamela-1.1.0/pyproject.toml     2023-06-01 11:43:37.000000000 +0200
@@ -0,0 +1,83 @@
+[build-system]
+requires = [
+    "setuptools",
+]
+build-backend = "setuptools.build_meta"
+
+# autoflake is used for autoformatting Python code
+#
+# ref: https://github.com/PyCQA/autoflake#readme
+#
+[tool.autoflake]
+ignore-init-module-imports = true
+remove-all-unused-imports = true
+remove-duplicate-keys = true
+#remove-unused-variables = true
+
+
+# isort is used for autoformatting Python code
+#
+# ref: https://pycqa.github.io/isort/
+#
+[tool.isort]
+profile = "black"
+
+
+# black is used for autoformatting Python code
+#
+# ref: https://black.readthedocs.io/en/stable/
+#
+[tool.black]
+skip-string-normalization = true
+# target-version should be all supported versions, see
+# https://github.com/psf/black/issues/751#issuecomment-473066811
+target_version = [
+    "py37",
+    "py38",
+    "py39",
+    "py310",
+    "py311",
+]
+
+[tool.pytest.ini_options]
+addopts = "--verbose --color=yes --durations=10"
+testpaths = [
+    "."
+]
+
+# tbump is used to simplify and standardize the release process when updating
+# the version, making a git commit and tag, and pushing changes.
+#
+# ref: https://github.com/your-tools/tbump#readme
+#
+[tool.tbump]
+# Uncomment this if your project is hosted on GitHub:
+github_url = "https://github.com/jupyterhub/jupyterhub";
+
+[tool.tbump.version]
+current = "1.1.0"
+
+# Example of a semver regexp.
+# Make sure this matches current_version before
+# using tbump
+regex = '''
+  (?P<major>\d+)
+  \.
+  (?P<minor>\d+)
+  \.
+  (?P<patch>\d+)
+  (?P<pre>((a|b|rc)\d+)|)
+  \.?
+  (?P<dev>(?<=\.)dev\d*|)
+  '''
+
+[tool.tbump.git]
+message_template = "Bump to {new_version}"
+tag_template = "{new_version}"
+
+# For each file to patch, add a [[tool.tbump.file]] config
+# section containing the path of the file, relative to the
+# pyproject.toml location.
+
+[[tool.tbump.file]]
+src = "pamela.py"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pamela-1.0.0/setup.py new/pamela-1.1.0/setup.py
--- old/pamela-1.0.0/setup.py   2019-01-17 16:21:23.000000000 +0100
+++ new/pamela-1.1.0/setup.py   2023-06-01 11:43:37.000000000 +0200
@@ -9,14 +9,18 @@
 from setuptools import setup
 from setuptools.command.bdist_egg import bdist_egg
 
+
 class bdist_egg_disabled(bdist_egg):
     """Disabled version of bdist_egg
 
     Prevents setup.py install from performing setuptools' default easy_install,
     which it should never ever do.
     """
+
     def run(self):
-        sys.exit("Aborting implicit building of eggs. Use `pip install .` to 
install from source.")
+        sys.exit(
+            "Aborting implicit building of eggs. Use `pip install .` to 
install from source."
+        )
 
 
 with open('pamela.py') as f:
@@ -27,28 +31,29 @@
             version = version_ns['__version__']
 
 
-setup(name='pamela',
-      version=version,
-      description="PAM interface using ctypes",
-      long_description=open("README.md").read(),
-      long_description_content_type="text/markdown",
-      classifiers=[
-          "Development Status :: 4 - Beta",
-          "Intended Audience :: Developers",
-          "License :: OSI Approved :: MIT License",
-          "Operating System :: POSIX :: Linux",
-          "Operating System :: MacOS :: MacOS X",
-          "Programming Language :: Python",
-          "Topic :: Software Development :: Libraries :: Python Modules",
-          "Topic :: System :: Systems Administration :: 
Authentication/Directory"
-          ],
-      cmdclass={
-          "bdist_egg": bdist_egg if "bdist_egg" in sys.argv else 
bdist_egg_disabled,
-      },
-      keywords=['pam', 'authentication'],
-      author='Min RK',
-      author_email='benjami...@gmail.com',
-      url='https://github.com/minrk/pamela',
-      license='MIT',
-      py_modules=["pamela"],
+setup(
+    name='pamela',
+    version=version,
+    description="PAM interface using ctypes",
+    long_description=open("README.md").read(),
+    long_description_content_type="text/markdown",
+    classifiers=[
+        "Development Status :: 4 - Beta",
+        "Intended Audience :: Developers",
+        "License :: OSI Approved :: MIT License",
+        "Operating System :: POSIX :: Linux",
+        "Operating System :: MacOS :: MacOS X",
+        "Programming Language :: Python",
+        "Topic :: Software Development :: Libraries :: Python Modules",
+        "Topic :: System :: Systems Administration :: 
Authentication/Directory",
+    ],
+    cmdclass={
+        "bdist_egg": bdist_egg if "bdist_egg" in sys.argv else 
bdist_egg_disabled,
+    },
+    keywords=['pam', 'authentication'],
+    author='Min RK',
+    author_email='benjami...@gmail.com',
+    url='https://github.com/minrk/pamela',
+    license='MIT',
+    py_modules=["pamela"],
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pamela-1.0.0/test_pamela.py 
new/pamela-1.1.0/test_pamela.py
--- old/pamela-1.0.0/test_pamela.py     2019-01-17 16:21:23.000000000 +0100
+++ new/pamela-1.1.0/test_pamela.py     2023-06-01 11:43:37.000000000 +0200
@@ -71,6 +71,7 @@
     assert handle.get_item(pamela.PAM_RUSER) == None
 
 
+@pytest.mark.skip(reason="doesn't work on CI")
 def test_session():
     handle = pamela.pam_start(getpass.getuser(), 'login')
     handle.open_session()

Reply via email to