15
0
forked from pool/python-Beaker

- Switch to pyproject macros.

- Add patch avoid-dbm-sqlite3.patch:
  * Avoid dbm.sqlite3 to support testing with Python 3.13.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Beaker?expand=0&rev=65
This commit is contained in:
2025-04-15 06:22:45 +00:00
committed by Git OBS Bridge
commit 33605962fc
7 changed files with 502 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.osc

3
1.13.0.tar.gz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3987a336340e884bcec2a2496f2614ee2cd0a171079191f57df25247b6e0c4a7
size 90138

40
avoid-dbm-sqlite3.patch Normal file
View File

@@ -0,0 +1,40 @@
From 4fea03d3cef673917d30ca70ab693e2f851f7260 Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Fri, 21 Jun 2024 12:32:19 -0700
Subject: [PATCH] Avoid using dbm.sqlite3 (#242)
Python 3.13 added a new dbm backend, dbm.sqlite3, as the most-
preferred choice when you do `import dbm`. This backend causes
our test suite to fail with sqlite3 threading violations. This
tweaks our dbm loading to just skip sqlite3 and try the other
possible backends in the same order as Python < 3.13 did.
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
beaker/_compat.py | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/beaker/_compat.py b/beaker/_compat.py
index d7bac174..fd2ed42e 100644
--- a/beaker/_compat.py
+++ b/beaker/_compat.py
@@ -28,10 +28,17 @@
import http.cookies as http_cookies
from base64 import b64decode as _b64decode, b64encode as _b64encode
+ # this reproduces the default behavior of Python 3.0 to 3.12
+ # Python 3.13 added dbm.sqlite3 as the first choice, but it
+ # doesn't work for us due to threading violations:
+ # https://github.com/bbangert/beaker/issues/242
try:
- import dbm as anydbm
+ import dbm.gnu as anydbm
except:
- import dumbdbm as anydbm
+ try:
+ import dbm.ndbm as anydbm
+ except:
+ import dbm.dumb as anydbm
def b64decode(b):
return _b64decode(b.encode('ascii'))

291
python-Beaker.changes Normal file
View File

@@ -0,0 +1,291 @@
-------------------------------------------------------------------
Tue Apr 15 06:20:51 UTC 2025 - Steve Kowalik <steven.kowalik@suse.com>
- Switch to pyproject macros.
- Add patch avoid-dbm-sqlite3.patch:
* Avoid dbm.sqlite3 to support testing with Python 3.13.
-------------------------------------------------------------------
Sat Apr 20 13:26:25 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 1.13.0:
* Fix validation messages for validate_key and encrypt_key
* Added support for rediscluster via ext:redisclusternm
* Removed the need to install mock library to run tests
-------------------------------------------------------------------
Fri Feb 10 10:19:21 UTC 2023 - Dirk Müller <dmueller@suse.com>
- update to 1.12.1:
* Fix ext:database backend failing to initialize
* Improved inline code documentation for the crypto module
-------------------------------------------------------------------
Tue Jan 3 08:16:03 UTC 2023 - Steve Kowalik <steven.kowalik@suse.com>
- Actually correct BuildRequires.
-------------------------------------------------------------------
Tue Dec 20 06:34:00 UTC 2022 - Steve Kowalik <steven.kowalik@suse.com>
- Update to 1.12.0:
* Enabled testing on Python 3.10 and 3.11
* Fixed issue #122 - Session ignores deserializer json
* Remove ID generation fallback for when the uuid module is not found
* Port testing from nose to pytest
* Fixed issue #180 - KeyError when loading deleted session
- Remove Python 2 and Python 3 gubbins.
- Remove patch denose.patch, merged upstream.
- Add patch support-pymemcache.patch:
* Also support pymemcache.
- Fiddle BuildRequires as appropiate.
-------------------------------------------------------------------
Wed Mar 16 08:44:59 UTC 2022 - pgajdos@suse.com
- python-mock is actually not required for build
-------------------------------------------------------------------
Tue Mar 1 08:40:51 UTC 2022 - Dirk Müller <dmueller@suse.com>
- add glibc-locale dependency for tests
-------------------------------------------------------------------
Fri Mar 5 09:13:58 UTC 2021 - Markéta Machová <mmachova@suse.com>
- Replace broken %ifpython3 macro
-------------------------------------------------------------------
Wed Jul 22 20:24:19 UTC 2020 - Matej Cepl <mcepl@suse.com>
- Add denose.patch, which ports the package from the dependency
on nose to pytest (gh#bbangert/beaker#192).
-------------------------------------------------------------------
Wed Apr 22 06:59:17 UTC 2020 - Steve Kowalik <steven.kowalik@suse.com>
- Fix build without Python 2 present.
-------------------------------------------------------------------
Sat Nov 23 13:35:32 UTC 2019 - Michael Ströder <michael@stroeder.com>
- only recommend installation of package python-python-memcached
-------------------------------------------------------------------
Mon Sep 23 14:43:25 UTC 2019 - pgajdos@suse.com
- version update to 1.11.0
* Fixed cookie path option not being properly set (`self._path`
was removed, only `self.path` exists)
* Documented `SameSite` option
* Fixed cookie expiration being localised when it shouldn't.
-------------------------------------------------------------------
Thu Apr 18 14:26:01 CEST 2019 - Matej Cepl <mcepl@suse.com>
- Actually for working around gh#bbangert/beaker#172 it is enough
to rm -fv tests/test.db, because the test suite apparently
doesn't clean up after itself.
-------------------------------------------------------------------
Mon Apr 1 13:36:58 UTC 2019 - Matej Cepl <mcepl@suse.com>
- Ignore test_database tests to avoid gh#bbangert/beaker#172
-------------------------------------------------------------------
Fri Mar 1 09:08:58 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
- Update to 1.10.1:
* Fix issue with Redis namespace manager TTL
* Fix for SameSite cookie option not being set in some cases
* Fix for memcached tests on Python3
* Redis namespace manager now supports providing a TTL for session entries that had a ``timeout`` provided.
This will remove the need to manually clear expired sessions from the redis storage.
* ``nsscrypto`` backend is now properly identified as providing AES support.
* When a crypto backend doesn't support AES it will no longer crash if the ``encrypt_key`` is ``None``.
* Session cookies will now provide support for ``SameSite`` through the ``samesite`` option.
By default this will be ``Lax``, but can be set to ``Strict`` or ``None`` to disable it.
-------------------------------------------------------------------
Thu Sep 7 16:55:30 UTC 2017 - toddrme2178@gmail.com
- Update to version 1.9.0
* Beaker now provides builtin ``ext:mongodb`` and ``ext:redis``
namespace managers. Both come with a Synchronizer implemented
on the storage backend instead of relying on file one.
* Fixed an issue where cookie options like ``Secure``,
``Domain`` and so on where lost.
* Improved support for cache entries expiration.
NamespaceManagers that support it will expire their key
automatically.
* Pycryptodome can be used instead of pycrypto.
* An issue with ``Cookie`` module import on case insensitive
file systems should have been resolved.
* Cryptography module is now as a crypto function provider
instead of pycrypto
-------------------------------------------------------------------
Thu Aug 24 13:33:15 UTC 2017 - jmatejek@suse.com
- singlespec auto-conversion
-------------------------------------------------------------------
Wed Nov 16 09:56:42 UTC 2016 - dmueller@suse.com
- adjust for cryptopp -> pycryptopp rename
-------------------------------------------------------------------
Mon Nov 14 13:58:04 UTC 2016 - dmueller@suse.com
- update to 1.8.1
* Bugfixes
-------------------------------------------------------------------
Thu Sep 15 22:14:25 UTC 2016 - toddrme2178@gmail.com
- Update to version 1.8.0
* Encrypted sessions can now specify nonce length for salt
generation through encrypt_nonce_bits parameter. set it to 48
for backward compatibility with sessions generated before 1.8.0
* kwargs support in @cache_region decorator
* annotations support in @cache_region decorator
* data_serializer parameter in Session can now specify json to
avoid pickle security issues
* Invalid cookies are now skipped in cookie based sessions
* Memcached based on PyLibMC now share same connection pool for
same url
-------------------------------------------------------------------
Sat Apr 25 18:36:03 UTC 2015 - benoit.monin@gmx.fr
- update to version 1.7.0:
* Beaker no longer supports python 2.4 and 2.5
* Beaker now supports Python 2.6, 2.7, 3.2, 3.3, 3.4 without
2to3 usage
* Fixed Encrypted Cookie Session on Python3 #57
* New pbkdf2 mobule working on Python3 #21
* Fixed Test suite on Python 3.3 #53, #51
- additional changes from version 1.6.5:
* @cached decorator now keeps docstring of decorated method.
* Fix crash when Session ``accessed_time`` is not available,
this happened when session ``encrypt_key`` was changed.
* Fix cache regions not providing a default key length even
though this was required and examples in the doc didn't
provide it.
* Fix crash when cache expire wasn't an int, this happened when
caching options were loaded from a config file.
- remove everything related to tests:
upstream deleted them from archive
- drop Beaker-1.6.4-setup_test.patch: only used by the tests
- do not delete the shebang of pbkdf2.py: fixed upstream
- remove CHANGELOG and LICENSE from package: deleted from archive
- add README.rst to the package documentation
-------------------------------------------------------------------
Fri Aug 9 09:20:00 UTC 2013 - speilicke@suse.com
- Add a build conditional for testing with memcached. It can be too
heavy at times
- Fix previous changes entry
-------------------------------------------------------------------
Tue Aug 6 23:16:53 UTC 2013 - hpj@urpla.net
- fix deps
- enable full testing
- Add Beaker-1.6.4-setup_test.patch: Workaround for TypeError in
multiprocessing/util.py
-------------------------------------------------------------------
Fri Jul 19 17:12:05 UTC 2013 - berendt@b1-systems.de
- added fdupes to remove rpmlint warning
-------------------------------------------------------------------
Sat Sep 22 20:26:45 UTC 2012 - os-dev@jacraig.com
- Update to 1.6.4:
* Warning: Session hashing for encrypted sessions using PyCrypto has
changed. This will result in sessions being invalidated upon upgrading
if PyCrypto is used.
* Fix bug with key_length not being coerced to a int for comparison.
* Fix bug with cookie invalidation not clearing the cookie data.
* Added ability to pass in cookie_path for the Session.
* Add NSS crypto support to Beaker.
* Fix security bug with pycrypto not securing data such that an attacker
could possibly determine parts of the encrypted payload. See CVE-2012-3458
<http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-3458>.
* Add ability to specify schema for database-backed sessions.
* Fix issue with long key names in memcached backend.
- Fix sed script so it removes the shebang instead of inserting "d" throughout
the pbkdf2.py file.
- Test suite now succeeds (for Python 2 package) but didn't add it to build
because it takes too long.
- Update URL to what is given in setup.py.
-------------------------------------------------------------------
Wed May 23 03:08:32 UTC 2012 - highwaystar.ru@gmail.com
- update to version 1.6.3
* Fix bug with cookie deletion on leap years. Patch contributed
by Greg Nelson and Michael Wirth.
* Fix issue with referencing same module via different import paths.
Patch contributed by brianfrantz.
* Fix cookie expiration check. Patch contributed by Mike Dirolf.
- python3 package added
- minor spec improvement
-------------------------------------------------------------------
Wed Feb 1 10:43:39 UTC 2012 - saschpe@suse.de
- Update to version 1.6.2:
* Updated dogpile lock so that it locks per namespace+key rather than on the
entire namespace. (#101)
* Added encryption option for any backend. Patch contributed by Toby Elliot.
-------------------------------------------------------------------
Thu Nov 10 10:13:51 UTC 2011 - saschpe@suse.de
- Update to version 1.6.1:
* Remove stray print statement.
* Include .app for consistency instead of requiring wrap_app.
- Changes from version 1.6:
* Fix bug with cache_key length calculation.
* Fix bug with how path was set so that its restored properly and propagated.
* Fix bug with CacheMiddleware clobbering enabled setting.
* Update option for ``cookie_expires`` so that it can now handle an integer
which will be used as the seconds till the cookie expires.
* Merge fix for Issue 31, can now handle unicode cache keys.
* Add ``key_length`` option for cache regions, and for keyword args passed
into the cache system. Cache keys longer than this will be SHA'd.
* added runtime beaker.__version__
* Add ``webtest_varname`` option to configuration to optionally include
the session value in the environ vars when using Beaker with WebTest.
* Defer running of pkg_resources to look for external cache modules
until requested. #66
* memcached backend uses pylibmc.ThreadMappedPool to ensure thread-local
usage of pylibmc when that library is in use. (#60)
* memcached backend also has ``memcache_module`` string argument, allows
direct specification of the name of which memcache backend to use.
* Basic container/file-based Session support working in Py3K. (#72)
* Further Python 3 fixes
* Added an optimization to the FileNamespaceContainer when used with
Session, such that the pickled contents of the file are not
read a second time when session.save() is called. (#64)
* Fixed bug whereby CacheManager.invalidate wouldn't work for a function
decorated by cache.cache(). (#61)
* cache decorators @cache.cache(), @cache_region() won't include first
argument named 'self' or 'cls' as part of the cache key. This allows
reasonably safe usage for methods as well as functions. (#55)
* file backend no longer squashes unpickling errors. This was inconsistent
behavior versus all the other backends.
* invalidate_corrupt flag on Session now emits a warning. (#52)
* cache.remove_value() removes the value even if it's already marked
'expired' (#42)
-------------------------------------------------------------------
Thu Sep 1 13:13:32 UTC 2011 - saschpe@suse.de
- Initial version

118
python-Beaker.spec Normal file
View File

@@ -0,0 +1,118 @@
#
# spec file for package python-Beaker
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
Name: python-Beaker
Version: 1.13.0
Release: 0
Summary: A Session and Caching library with WSGI Middleware
License: BSD-3-Clause
URL: https://github.com/bbangert/beaker
Source: https://github.com/bbangert/beaker/archive/%{version}.tar.gz
# PATCH-FIX-OPENSUSE Support pymemcache
Patch0: support-pymemcache.patch
# PATCH-FIX-UPSTREAM gh#AdamWill/beaker#4fea03d3cef673917d30ca70ab693e2f851f7260
Patch1: avoid-dbm-sqlite3.patch
BuildRequires: %{python_module SQLAlchemy}
BuildRequires: %{python_module WebTest}
BuildRequires: %{python_module coverage}
BuildRequires: %{python_module cryptography}
BuildRequires: %{python_module dbm}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module pycryptodome}
BuildRequires: %{python_module pylibmc}
BuildRequires: %{python_module pymemcache}
BuildRequires: %{python_module pymongo}
BuildRequires: %{python_module pytest}
BuildRequires: %{python_module redis}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: glibc-locale
BuildRequires: python-rpm-macros
Requires: python-dbm
Requires: python-pylibmc
Requires: python-setuptools
Recommends: python-SQLAlchemy
Recommends: python-cryptography
Recommends: python-pycrypto
Recommends: python-pycryptopp >= 0.5.12
Recommends: python-pymemcache
Recommends: python-pymongo
Recommends: python-redis
BuildArch: noarch
%python_subpackages
%description
Beaker is a web session and general caching library that includes WSGI
middleware for use in web applications.
As a general caching library, Beaker can handle storing for various times
any Python object that can be pickled with optional back-ends on a
fine-grained basis.
Beaker was built largely on the code from MyghtyUtils, then refactored and
extended with database support.
Beaker includes Cache and Session WSGI middleware to ease integration with
WSGI capable frameworks, and is automatically used by Pylons.
Features include:
* Fast, robust performance
* Multiple reader/single writer lock system to avoid duplicate simultaneous
cache creation
* Cache back-ends include dbm, file, memory, memcached, and database (Using
SQLAlchemy for multiple-db vendor support)
* Signed cookie's to prevent session hijacking/spoofing
* Cookie-only sessions to remove the need for a db or file backend (ideal
for clustered systems)
* Extensible Container object to support new back-ends
* Cache's can be divided into namespaces (to represent templates, objects,
etc.) then keyed for different copies
* Create functions for automatic call-backs to create new cache copies after
expiration
* Fine-grained toggling of back-ends, keys, and expiration per Cache object
%prep
%autosetup -p1 -n beaker-%{version}
%build
%pyproject_wheel
%install
%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
# needs mongo and redis running
rm -r tests/test_managers
rm tests/test_memcached.py
rm tests/test_cachemanager.py
%{python_expand PYTHONPATH=%{buildroot}%{$python_sitelib}
# gh#bbangert/beaker#172
rm -fv tests/test.db
pytest tests
}
%files %{python_files}
%license LICENSE
%doc README.rst CHANGELOG
%{python_sitelib}/beaker/
%{python_sitelib}/beaker-%{version}.dist-info
%changelog

26
support-pymemcache.patch Normal file
View File

@@ -0,0 +1,26 @@
Index: beaker-1.12.0/beaker/ext/memcached.py
===================================================================
--- beaker-1.12.0.orig/beaker/ext/memcached.py
+++ beaker-1.12.0/beaker/ext/memcached.py
@@ -39,8 +39,12 @@ def _load_client(name='auto'):
import bmemcached
return bmemcached
+ def _pymemcache():
+ from pymemcache.client.base import Client
+ return Client
+
def _auto():
- for _client in (_pylibmc, _cmemcache, _memcache, _bmemcached):
+ for _client in (_pymemcache, _pylibmc, _cmemcache, _memcache, _bmemcached):
try:
return _client()
except ImportError:
@@ -52,6 +56,7 @@ def _load_client(name='auto'):
clients = {
'pylibmc': _pylibmc,
+ 'pymemcache': _pymemcache,
'cmemcache': _cmemcache,
'memcache': _memcache,
'bmemcached': _bmemcached,