mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-09-03 12:51:29 +02:00
248 lines
8.6 KiB
Diff
248 lines
8.6 KiB
Diff
Patch-Source: https://github.com/ulif/diceware/pull/62
|
|
From 4e11c42940a60518f7b895ca036d461bc2bcbb91 Mon Sep 17 00:00:00 2001
|
|
From: Hartmut Goebel <h.goebel@crazy-compilers.com>
|
|
Date: Mon, 29 Apr 2019 10:42:12 +0200
|
|
Subject: [PATCH 1/4] Get package version from module `__about__`.
|
|
|
|
---
|
|
diceware/__about__.py | 1 +
|
|
diceware/__init__.py | 3 +--
|
|
setup.py | 5 ++++-
|
|
3 files changed, 6 insertions(+), 3 deletions(-)
|
|
create mode 100644 diceware/__about__.py
|
|
|
|
diff --git a/diceware/__about__.py b/diceware/__about__.py
|
|
new file mode 100644
|
|
index 0000000..2ed0450
|
|
--- /dev/null
|
|
+++ b/diceware/__about__.py
|
|
@@ -0,0 +1,6 @@
|
|
+version = "0.9.7.dev0"
|
|
+random_sources = {
|
|
+ 'system': 'diceware.random_sources:SystemRandomSource',
|
|
+ 'realdice': 'diceware.random_sources:RealDiceRandomSource',
|
|
+ # add more sources of randomness here...
|
|
+}
|
|
diff --git a/diceware/__init__.py b/diceware/__init__.py
|
|
index 6f00228..b0d0880 100644
|
|
--- a/diceware/__init__.py
|
|
+++ b/diceware/__init__.py
|
|
@@ -16,23 +16,20 @@
|
|
"""diceware -- rememberable passphrases
|
|
"""
|
|
import argparse
|
|
-import pkg_resources
|
|
import sys
|
|
import logging
|
|
from errno import ENOENT
|
|
from random import SystemRandom
|
|
+from .__about__ import version as __version__
|
|
from diceware.config import get_config_dict
|
|
from diceware.logger import configure
|
|
from diceware.wordlist import (
|
|
WordList, get_wordlist_path, get_wordlists_dir, get_wordlist_names,
|
|
)
|
|
|
|
-__version__ = pkg_resources.get_distribution('diceware').version
|
|
-
|
|
#: Special chars inserted on demand
|
|
SPECIAL_CHARS = r"~!#$%^&*()-=+[]\{}:;" + r'"' + r"'<>?/0123456789"
|
|
|
|
-
|
|
GPL_TEXT = (
|
|
"""
|
|
This program is free software: you can redistribute it and/or modify
|
|
@@ -73,10 +70,16 @@ def get_random_sources():
|
|
that provides a `choice(sequence)` method that works like the
|
|
respective method in the standard Python lib `random` module.
|
|
"""
|
|
+ from .__about__ import random_sources
|
|
result = dict()
|
|
- for entry_point in pkg_resources.iter_entry_points(
|
|
- group="diceware_random_sources"):
|
|
- result.update({entry_point.name: entry_point.load()})
|
|
+ for name, spec in random_sources.items():
|
|
+ module, func = spec.split(":")
|
|
+ module = __import__(module, fromlist=['__name__'], level=0)
|
|
+ try:
|
|
+ func = getattr(module, func)
|
|
+ except AttributeError as exc:
|
|
+ raise ImportError(str(exc))
|
|
+ result[name] = func
|
|
return result
|
|
|
|
|
|
@@ -84,7 +87,7 @@ def handle_options(args):
|
|
"""Handle commandline options.
|
|
"""
|
|
plugins = get_random_sources()
|
|
- random_sources = plugins.keys()
|
|
+ rnd_sources = plugins.keys()
|
|
wordlist_names = get_wordlist_names()
|
|
defaults = get_config_dict()
|
|
parser = argparse.ArgumentParser(
|
|
@@ -108,11 +111,11 @@ def handle_options(args):
|
|
'-d', '--delimiter', default='',
|
|
help="Separate words by DELIMITER. Empty string by default.")
|
|
parser.add_argument(
|
|
- '-r', '--randomsource', default='system', choices=random_sources,
|
|
+ '-r', '--randomsource', default='system', choices=rnd_sources,
|
|
metavar="SOURCE",
|
|
help=(
|
|
"Get randomness from this source. Possible values: `%s'. "
|
|
- "Default: system" % "', `".join(sorted(random_sources))))
|
|
+ "Default: system" % "', `".join(sorted(rnd_sources))))
|
|
parser.add_argument(
|
|
'-w', '--wordlist', default=['en_eff'], choices=wordlist_names,
|
|
metavar="NAME", nargs='*',
|
|
diff --git a/diceware/__main__.py b/diceware/__main__.py
|
|
new file mode 100644
|
|
index 0000000..031df43
|
|
--- /dev/null
|
|
+++ b/diceware/__main__.py
|
|
@@ -0,0 +1,2 @@
|
|
+from . import main
|
|
+main()
|
|
diff --git a/diceware/random_sources.py b/diceware/random_sources.py
|
|
index 72f69a7..8bc6d35 100644
|
|
--- a/diceware/random_sources.py
|
|
+++ b/diceware/random_sources.py
|
|
@@ -15,7 +15,7 @@
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
"""Sources of randomness.
|
|
|
|
-Please register all sources as entry point in ``setup.py``. Look out for
|
|
+Please register all sources as entry point in ``__about__.py``. Look out for
|
|
"SystemRandomSource" for an example.
|
|
|
|
For developers of interfaces to other sources of randomness: Currently,
|
|
@@ -45,21 +45,15 @@ If you want to manage own commandline options with your plugin, you can
|
|
implement a `classmethod` called ``update_argparser(parser)`` which gets
|
|
an `argparse.ArgumentParser` instance as argument (no pun intended).
|
|
|
|
-Finally, to register the source, add some stanza in `setup.py` of your
|
|
-project that looks like::
|
|
+Finally, to register the source, add some stanza in `__about__.py`
|
|
+that looks like::
|
|
|
|
# ...
|
|
- setup(
|
|
- # ...
|
|
- entry_points={
|
|
- # console scripts and other entry points...
|
|
- 'diceware_random_sources': [
|
|
- 'myrandom = mypkg.mymodule:MyRandomSource',
|
|
- 'myothersrc = mypkg.mymodule:MyOtherSource',
|
|
- ],
|
|
- },
|
|
- # ...
|
|
- )
|
|
+ random_sources' = {
|
|
+ # ...
|
|
+ 'myrandom': 'mypkg.mymodule:MyRandomSource',
|
|
+ 'myothersrc': 'mypkg.mymodule:MyOtherSource',
|
|
+ }
|
|
# ...
|
|
|
|
Here the `myrandom` and `myothersrc` lines register random sources that
|
|
diff --git a/setup.py b/setup.py
|
|
index 3a7228e..8a82624 100644
|
|
--- a/setup.py
|
|
+++ b/setup.py
|
|
@@ -2,8 +2,12 @@ import os
|
|
from setuptools import setup
|
|
|
|
|
|
-def read(fname):
|
|
- return open(os.path.join(os.path.dirname(__file__), fname)).read()
|
|
+def read(*parts):
|
|
+ with open(os.path.join(os.path.dirname(__file__), *parts)) as fp:
|
|
+ return fp.read()
|
|
+
|
|
+version = {}
|
|
+exec(read("diceware", "__about__.py"), version)
|
|
|
|
|
|
setup_requires = [
|
|
@@ -27,7 +31,7 @@ docs_require = [
|
|
|
|
setup(
|
|
name="diceware",
|
|
- version="0.10",
|
|
+ version=version["version"],
|
|
author="Uli Fouquet",
|
|
author_email="uli@gnufix.de",
|
|
description=(
|
|
@@ -75,10 +79,5 @@ setup(
|
|
'console_scripts': [
|
|
'diceware = diceware:main',
|
|
],
|
|
- 'diceware_random_sources': [
|
|
- 'system = diceware.random_sources:SystemRandomSource',
|
|
- 'realdice = diceware.random_sources:RealDiceRandomSource',
|
|
- # add more sources of randomness here...
|
|
- ],
|
|
},
|
|
)
|
|
diff --git a/tests/test_diceware.py b/tests/test_diceware.py
|
|
index 7867101..c52bb8f 100644
|
|
--- a/tests/test_diceware.py
|
|
+++ b/tests/test_diceware.py
|
|
@@ -180,6 +180,14 @@ class TestDicewareModule(object):
|
|
assert 'system' in sources_dict
|
|
assert isinstance(sources_dict['system'], type)
|
|
|
|
+ def test_get_random_sources_non_existing(self, monkeypatch):
|
|
+ import diceware
|
|
+ monkeypatch.setattr(
|
|
+ diceware.__about__, 'random_sources',
|
|
+ {'foo': 'diceware.random_sources:NotExistingSource'})
|
|
+ with pytest.raises(ImportError):
|
|
+ get_random_sources()
|
|
+
|
|
def test_insert_special_char(self):
|
|
# we can insert special chars in words.
|
|
fake_rnd = FakeRandom()
|
|
diff --git a/tests/test_random_sources.py b/tests/test_random_sources.py
|
|
index 91f3b09..a544357 100644
|
|
--- a/tests/test_random_sources.py
|
|
+++ b/tests/test_random_sources.py
|
|
@@ -1,12 +1,11 @@
|
|
from __future__ import unicode_literals
|
|
-import pkg_resources
|
|
import pytest
|
|
import sys
|
|
import argparse
|
|
from conftest import InputMock
|
|
from io import StringIO
|
|
from itertools import product, chain
|
|
-from diceware import main
|
|
+from diceware import main, get_random_sources
|
|
from diceware.random_sources import (
|
|
SystemRandomSource, RealDiceRandomSource,
|
|
)
|
|
@@ -38,10 +37,7 @@ class TestSystemRandomSource(object):
|
|
def test_registered_as_system(self):
|
|
# The SystemRandomInstance is registered as entry point with
|
|
# name 'system' in group 'diceware_random_sources'
|
|
- sources_dict = dict()
|
|
- for entry_point in pkg_resources.iter_entry_points(
|
|
- group="diceware_random_sources"):
|
|
- sources_dict.update({entry_point.name: entry_point.load()})
|
|
+ sources_dict = get_random_sources()
|
|
assert 'system' in sources_dict
|
|
assert sources_dict['system'] == SystemRandomSource
|
|
|
|
@@ -110,10 +106,7 @@ class TestRealDiceRandomSource(object):
|
|
def test_registered_as_realdice(self):
|
|
# The RealDiceRandomSource is registered as entry point with
|
|
# name 'realdice' in group 'diceware_random_sources'
|
|
- sources_dict = dict()
|
|
- for entry_point in pkg_resources.iter_entry_points(
|
|
- group="diceware_random_sources"):
|
|
- sources_dict.update({entry_point.name: entry_point.load()})
|
|
+ sources_dict = get_random_sources()
|
|
assert 'realdice' in sources_dict
|
|
assert sources_dict['realdice'] == RealDiceRandomSource
|
|
|