Browse Source

Merge Joinmarket-Org/joinmarket-clientserver#1484: Migrate to modern packaging and src layout

c8eef50e93 Migrate to modern packaging and src layout (roshii)

Pull request description:

  - Migrate to src-layout following https://setuptools.pypa.io/en/latest/userguide/package_discovery.html#src-layout to facilitate automatic package discovery and editable installs.
  - Create `joinmarket` namespace distribution package in line with https://packaging.python.org/en/latest/guides/packaging-namespace-packages/
  - Migrate to `pyproject.toml` file for project configuration instead of legacy `setup.py`

  In practice:
  - Joinmarket packages are moved to `src` folder, with their respective test moved to `test` folder at project root
  - Optional dependencies definitions groups allows a granular installation depending on user needs
  - Integrated test cannot be run prior to subpackages' respective test, `reactor` is somehow left unclean by the latter., the former test definitions are therefore moved to a dedicated `unified` folder.
  - A private module is created in `jmqtui` to be run upon UI update (not tested)

  Fixes https://github.com/JoinMarket-Org/joinmarket-clientserver/issues/1491

Top commit has no ACKs.

Tree-SHA512: f88c4f58c114700a68cbc451fa37ad53e9e2e07b837c20ac4d83a73e6803a28a4a38ec68320932ba309a72107d6747f37465f9898a9cdf0e2f210aa067146e1b
master
Adam Gibson 2 years ago
parent
commit
b27c86edce
No known key found for this signature in database
GPG Key ID: 141001A1AF77F20B
  1. 13
      .coveragerc
  2. 24
      .github/workflows/unittests.yml
  3. 2
      README.md
  4. 9
      docs/INSTALL.md
  5. 2
      docs/JSON-RPC-API-using-jmwalletd.md
  6. 2
      docs/TESTING.md
  7. 17
      install.sh
  8. 16
      jmbase/setup.py
  9. 14
      jmbitcoin/setup.py
  10. 17
      jmclient/setup.py
  11. 17
      jmdaemon/setup.py
  12. 19
      jmqtui/setup.py
  13. 81
      pyproject.toml
  14. 4
      requirements/base.txt
  15. 9
      requirements/gui.txt
  16. 11
      requirements/testing.txt
  17. 5
      setup.cfg
  18. 57
      setupall.py
  19. 0
      src/jmbase/__init__.py
  20. 0
      src/jmbase/arguments.py
  21. 0
      src/jmbase/bigstring.py
  22. 0
      src/jmbase/bytesprod.py
  23. 0
      src/jmbase/commands.py
  24. 0
      src/jmbase/crypto.py
  25. 0
      src/jmbase/proof_of_work.py
  26. 0
      src/jmbase/support.py
  27. 0
      src/jmbase/twisted_utils.py
  28. 0
      src/jmbitcoin/__init__.py
  29. 0
      src/jmbitcoin/amount.py
  30. 0
      src/jmbitcoin/bip21.py
  31. 0
      src/jmbitcoin/blocks.py
  32. 0
      src/jmbitcoin/output_descriptors.py
  33. 0
      src/jmbitcoin/secp256k1_deterministic.py
  34. 0
      src/jmbitcoin/secp256k1_ecies.py
  35. 0
      src/jmbitcoin/secp256k1_main.py
  36. 0
      src/jmbitcoin/secp256k1_transaction.py
  37. 0
      src/jmbitcoin/snicker.py
  38. 0
      src/jmclient/__init__.py
  39. 0
      src/jmclient/auth.py
  40. 0
      src/jmclient/blockchaininterface.py
  41. 0
      src/jmclient/bond_calc.py
  42. 0
      src/jmclient/cli_options.py
  43. 0
      src/jmclient/client_protocol.py
  44. 0
      src/jmclient/commitment_utils.py
  45. 0
      src/jmclient/configure.py
  46. 0
      src/jmclient/cryptoengine.py
  47. 0
      src/jmclient/fidelity_bond.py
  48. 0
      src/jmclient/jsonrpc.py
  49. 0
      src/jmclient/maker.py
  50. 0
      src/jmclient/old_mnemonic.py
  51. 0
      src/jmclient/output.py
  52. 0
      src/jmclient/payjoin.py
  53. 0
      src/jmclient/podle.py
  54. 0
      src/jmclient/schedule.py
  55. 0
      src/jmclient/snicker_receiver.py
  56. 0
      src/jmclient/storage.py
  57. 0
      src/jmclient/support.py
  58. 0
      src/jmclient/taker.py
  59. 0
      src/jmclient/taker_utils.py
  60. 0
      src/jmclient/wallet.py
  61. 0
      src/jmclient/wallet_rpc.py
  62. 0
      src/jmclient/wallet_service.py
  63. 0
      src/jmclient/wallet_utils.py
  64. 0
      src/jmclient/websocketserver.py
  65. 0
      src/jmclient/yieldgenerator.py
  66. 0
      src/jmdaemon/__init__.py
  67. 0
      src/jmdaemon/daemon_protocol.py
  68. 0
      src/jmdaemon/enc_wrapper.py
  69. 0
      src/jmdaemon/fidelity_bond_sanity_check.py
  70. 0
      src/jmdaemon/irc.py
  71. 0
      src/jmdaemon/message_channel.py
  72. 0
      src/jmdaemon/onionmc.py
  73. 0
      src/jmdaemon/orderbookwatch.py
  74. 0
      src/jmdaemon/protocol.py
  75. 0
      src/jmqtui/__init__.py
  76. 7
      src/jmqtui/_compile.py
  77. 0
      src/jmqtui/open_wallet_dialog.py
  78. 0
      src/jmqtui/open_wallet_dialog.ui
  79. 0
      test/jmbase/test_base_support.py
  80. 0
      test/jmbase/test_commands.py
  81. 0
      test/jmbitcoin/base58_keys_invalid.json
  82. 0
      test/jmbitcoin/base58_keys_valid.json
  83. 0
      test/jmbitcoin/ecc_sigs_rfc6979_valid.json
  84. 0
      test/jmbitcoin/test_amounts.py
  85. 0
      test/jmbitcoin/test_bip21.py
  86. 0
      test/jmbitcoin/test_bip32.py
  87. 0
      test/jmbitcoin/test_btc_snicker.py
  88. 0
      test/jmbitcoin/test_ecc_signing.py
  89. 0
      test/jmbitcoin/test_ecdh.py
  90. 0
      test/jmbitcoin/test_ecies.py
  91. 0
      test/jmbitcoin/test_output_descriptors.py
  92. 0
      test/jmbitcoin/test_tx_signing.py
  93. 0
      test/jmbitcoin/tx_valid.json
  94. 0
      test/jmclient/base58_keys_invalid.json
  95. 0
      test/jmclient/base58_keys_valid.json
  96. 0
      test/jmclient/bip341_wallet_test_vectors.json
  97. 0
      test/jmclient/bip39vectors.json
  98. 0
      test/jmclient/commontest.py
  99. 0
      test/jmclient/taker_test_data.py
  100. 0
      test/jmclient/test_argon2.py
  101. Some files were not shown because too many files have changed in this diff Show More

13
.coveragerc

@ -1,15 +1,4 @@
# .coveragerc to control coverage.py
[run]
omit =
jmclient/jmclient/jsonrpc.py
jmclient/jmclient/electruminterface.py
jmclient/jmclient/btc.py
jmclient/test/*
jmclient/setup.py
jmbitcoin/test/*
jmbitcoin/setup.py
jmbase/test/*
jmbase/setup.py
jmdaemon/test/*
jmdaemon/setup.py
jmdaemon/jmdaemon/socks.py
src/jmclient/jsonrpc.py

24
.github/workflows/unittests.yml

@ -18,23 +18,21 @@ jobs:
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
# - name: Cache venv
# id: cache-venv
# uses: actions/cache@v3
# env:
# cache-name: venv
# with:
# path: jmvenv
# key: ${{ runner.os }}-${{ matrix.python-version }}-${{ env.cache-name }}-${{ hashFiles('requirements/*.txt', 'install.sh', '*/setup.py') }}
- name: Cache venv
id: cache-venv
uses: actions/cache@v3
env:
cache-name: venv
with:
path: jmvenv
key: ${{ runner.os }}-${{ matrix.python-version }}-${{ env.cache-name }}-${{ hashFiles('requirements/*.txt', 'install.sh', '*/setup.py') }}
- name: Setup joinmarket + virtualenv
# if: steps.cache-venv.outputs.cache-hit != 'true'
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
sed -i.bak 's/-e //g' requirements/base.txt
sed -i.bak 's/-e //g' requirements/gui.txt
./install.sh --develop --with-qt
./jmvenv/bin/pip install -r requirements/testing.txt
./jmvenv/bin/python -m pip install --upgrade pip
- name: Lint with flake8
run: ./jmvenv/bin/flake8 -v jmclient jmbase jmbitcoin jmdaemon scripts
run: ./jmvenv/bin/flake8 -v src
- name: Cache bitcoind
uses: actions/cache@v3
env:

2
README.md

@ -93,7 +93,7 @@ If binaries are built, they will be gpg signed and announced on the Releases pag
If you haven't chosen the Qt option during installation with `install.sh`, then to run the script `joinmarket-qt.py` from the command line you will need to install two more packages. Use these 2 commands while the `jmvenv` virtual environment is activated:
```
pip install -r requirements/gui.txt
pip install .[gui]
```
After this, the command `python joinmarket-qt.py` from within the `scripts` subdirectory should work.
There is a [walkthrough](docs/JOINMARKET-QT-GUIDE.md) for what to do next.

9
docs/INSTALL.md

@ -75,7 +75,7 @@ Then build and install a local copy of libsecp256k1 for python-bitcointx:
> *NOTE*: It is very important to have activated the virtual environment before running this step. Otherwise, `pip install` will fail, you may be tempted to re-run it with `sudo pip install` which will cause problems in the future.
pip install -r requirements/base.txt
pip install .[services]
If you have installed this "full" version of the client, you can use it with the command line scripts as explained in the [usage guide](USAGE.md).
@ -122,7 +122,7 @@ If you have installed this "full" version of the client, you can use it with the
7) Setup joinmarket-qt
```
pip install -r requirements/gui.txt
pip install .[gui]
```
8) Start joinmarket-qt
```
@ -165,10 +165,9 @@ Unzip the `joinmarket-clientserver-x.x.x` (where `x.x.x` is the release number)
Using the command prompt in Administrator mode, go to that directory and run the commands:
`pip install -r requirements\base.txt`
`pip install -r requirements\gui.txt`
`pip install joinmarket[services]`
(the latter is needed for Joinmarket-Qt).
(replace `services` with `gui` for Joinmarket-Qt).
The final step is to manually add the libsodium dependency, as mentioned. Do the following:

2
docs/JSON-RPC-API-using-jmwalletd.md

@ -28,7 +28,7 @@ On initially creating, unlocking or recovering a wallet, a new access and refres
Tokens are signed with HS256 (HMAC with SHA-256), a symmetric keyed hashing algorithm that uses one secret key. Signature keys (differentiated between access and refresh tokens) are generated from random bytes upon the following events, implying that any previously issued token is invalidated.
- starting Joinmarket wallet deamon
- starting Joinmarket wallet daemon
- creating, unlocking or recovering a wallet if RPC API is already serving another wallet
- locking wallet

2
docs/TESTING.md

@ -7,7 +7,7 @@ Work in your `jmvenv` virtual environment as for all Joinmarket work. Make sure
Install the test requirements:
(jmvenv)$ pip install -r requirements/testing.txt
(jmvenv)$ pip install .[test]
#### Running the test suite.

17
install.sh

@ -434,16 +434,17 @@ CookieAuthentication 1
joinmarket_install ()
{
reqs=( 'base.txt' )
reqs='services'
if [[ ${with_qt} == "1" ]]; then
reqs+=( 'gui.txt' )
reqs='gui'
fi
if [[ ${develop} == "1" ]]; then
reqs+=',test'
fi
for req in "${reqs[@]}"; do
if [ "$with_jmvenv" == 1 ]; then pip_command=pip; else pip_command=pip3; fi
$pip_command install -r "requirements/${req}" || return 1
done
if [ "$with_jmvenv" == 1 ]; then pip_command=pip; else pip_command=pip3; fi
$pip_command install -e ".[${reqs}]" || return 1
if [[ ${with_qt} == "1" ]]; then
if [[ -d ~/.local/share/icons ]] && [[ -d ~/.local/share/applications ]]; then
@ -462,7 +463,9 @@ parse_flags ()
while :; do
case $1 in
--develop)
# no-op for backwards compatibility
# editable install is currently always on
# option solely triggers test dependencies installation for now
develop='1'
;;
--disable-os-deps-check)
use_os_deps_check='0'

16
jmbase/setup.py

@ -1,16 +0,0 @@
from setuptools import setup
setup(name='joinmarketbase',
version='0.9.11dev',
description='Joinmarket client library for Bitcoin coinjoins',
url='https://github.com/JoinMarket-Org/joinmarket-clientserver/tree/master/jmbase',
author='',
author_email='',
license='GPL',
packages=['jmbase'],
install_requires=['twisted==22.4.0', 'service-identity==21.1.0',
'chromalog==1.0.5', 'pyaes==1.6.1',
'txtorcon==22.0.0'],
python_requires='>=3.7',
zip_safe=False)

14
jmbitcoin/setup.py

@ -1,14 +0,0 @@
from setuptools import setup
setup(name='joinmarketbitcoin',
version='0.9.11dev',
description='Joinmarket client library for Bitcoin coinjoins',
url='https://github.com/JoinMarket-Org/joinmarket-clientserver/tree/master/jmbitcoin',
author='',
author_email='',
license='GPL',
packages=['jmbitcoin'],
python_requires='>=3.7',
install_requires=['python-bitcointx==1.1.3'],
zip_safe=False)

17
jmclient/setup.py

@ -1,17 +0,0 @@
from setuptools import setup
setup(name='joinmarketclient',
version='0.9.11dev',
description='Joinmarket client library for Bitcoin coinjoins',
url='https://github.com/JoinMarket-Org/joinmarket-clientserver/tree/master/jmclient',
author='',
author_email='',
license='GPL',
packages=['jmclient'],
install_requires=['joinmarketbase==0.9.11dev', 'mnemonic==0.20',
'argon2_cffi==21.3.0', 'bencoder.pyx==3.0.1',
'klein==20.6.0', 'pyjwt==2.4.0',
'autobahn==20.12.3', 'werkzeug==2.2.3'],
python_requires='>=3.7',
zip_safe=False)

17
jmdaemon/setup.py

@ -1,17 +0,0 @@
from setuptools import setup
setup(name='joinmarketdaemon',
version='0.9.11dev',
description='Joinmarket client library for Bitcoin coinjoins',
url='https://github.com/JoinMarket-Org/joinmarket-clientserver/tree/master/jmdaemon',
author='',
author_email='',
license='GPL',
packages=['jmdaemon'],
install_requires=['cryptography==3.3.2; platform_machine != "aarch64" and platform_machine != "amd64" and platform_machine != "x86_64"',
'cryptography==41.0.2; platform_machine == "aarch64" or platform_machine == "amd64" or platform_machine == "x86_64"',
'pyopenssl==23.2.0', 'libnacl==1.8.0',
'joinmarketbase==0.9.11dev'],
python_requires='>=3.7',
zip_safe=False)

19
jmqtui/setup.py

@ -1,19 +0,0 @@
from setuptools import setup
setup(name='joinmarketui',
version='0.9.11dev',
description='Joinmarket client library for Bitcoin coinjoins',
url='https://github.com/JoinMarket-Org/joinmarket-clientserver/tree/master/jmqtui',
author='',
author_email='',
license='GPL',
packages=['jmqtui'],
install_requires=['PyQt5!=5.15.0,!=5.15.1,!=5.15.2,!=6.0'],
python_requires='>=3.7',
zip_safe=False)
# The following command should be executed whenever `open_wallet_dialog.ui` is updated.
# We have commented out this command so that we wouldn't require every user of JoinMarket-qt
# to install the correct version of pyside2-uic.
#import os
#os.system('pyside2-uic jmqtui/open_wallet_dialog.ui -o jmqtui/open_wallet_dialog.py')

81
pyproject.toml

@ -0,0 +1,81 @@
[build-system]
requires = ["setuptools>=64", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "joinmarket"
version = "0.9.11dev"
description = "Joinmarket client library for Bitcoin coinjoins"
readme = "README.md"
requires-python = ">=3.7"
license = {file = "LICENSE"}
dependencies = [
"chromalog==1.0.5",
"pyaes==1.6.1",
"service-identity==21.1.0",
"txtorcon==22.0.0",
"twisted==22.4.0",
]
[project.optional-dependencies]
jmbitcoin = [
"python-bitcointx==1.1.3",
]
jmclient = [
"argon2_cffi==21.3.0",
"autobahn==20.12.3",
"bencoder.pyx==3.0.1",
"klein==20.6.0",
"mnemonic==0.20",
"pyjwt==2.4.0",
"werkzeug==2.2.3",
]
jmdaemon = [
"libnacl==1.8.0",
"pyopenssl==23.2.0",
'cryptography==3.3.2; platform_machine != "aarch64" and platform_machine != "amd64" and platform_machine != "x86_64"',
'cryptography==41.0.2; platform_machine == "aarch64" or platform_machine == "amd64" or platform_machine == "x86_64"',
]
jmqtui = [
"PyQt5!=5.15.0,!=5.15.1,!=5.15.2,!=6.0",
"PySide2!=5.15.0,!=5.15.1,!=5.15.2,!=6.0", # https://bugreports.qt.io/browse/QTBUG-88688
"qrcode[pil]==7.3.1",
'pywin32; platform_system == "Windows"',
"qt5reactor==0.6.3",
]
client = [
"joinmarket[jmclient]",
"joinmarket[jmbitcoin]",
]
daemon = [
"joinmarket[jmdaemon]",
]
services = [
"joinmarket[client]",
"joinmarket[daemon]",
]
test = [
"joinmarket[services]",
"coverage==5.2.1",
"flake8",
"freezegun",
"mock",
"pexpect",
"pytest-cov>=2.4.0,<2.6",
"pytest==6.2.5",
"python-coveralls",
]
gui = [
"joinmarket[services]",
"joinmarket[jmqtui]",
]
[project.urls]
repository = "https://github.com/JoinMarket-Org/joinmarket-clientserver.git"
[tool.setuptools.packages.find]
where = ["src"]
exclude = ["*.test"]
[tool.pytest.ini_options]
testpaths = ["test"]

4
requirements/base.txt

@ -1,4 +0,0 @@
-e ./jmbase
-e ./jmbitcoin
-e ./jmclient
-e ./jmdaemon

9
requirements/gui.txt

@ -1,9 +0,0 @@
-r base.txt
pywin32; platform_system == "Windows"
# https://bugreports.qt.io/browse/QTBUG-88688
PySide2!=5.15.0,!=5.15.1,!=5.15.2,!=6.0
PyQt5!=5.15.0,!=5.15.1,!=5.15.2,!=6.0
qrcode[pil]==7.3.1
https://github.com/sunu/qt5reactor/archive/58410aaead2185e9917ae9cac9c50fe7b70e4a60.zip#egg=qt5reactor
-e ./jmqtui

11
requirements/testing.txt

@ -1,11 +0,0 @@
-r base.txt
# matplotlib
# numpy
pexpect
coverage==5.2.1
pytest==6.2.5
pytest-cov>=2.4.0,<2.6
python-coveralls
mock
flake8
freezegun

5
setup.cfg

@ -1,13 +1,10 @@
# content of pytest.ini
[tool:pytest]
testpaths = jmbitcoin jmclient jmbase jmdaemon test
[flake8]
exclude =
# defaults
.svn,CVS,.bzr,.hg,.git,__pycache__,.tox,
# lots of "unused imports"
__init__.py
jmqtui
max-line-length = 79

57
setupall.py

@ -1,57 +0,0 @@
#!/usr/bin/env python
import sys, os, subprocess
"""A script to install in one of 3 modes:
(a) daemon - installs jmbase, jmdaemon
(b) client-only - installs jmbase, jmclient
(c) client-bitcoin - installs jmbase, jmclient, jmbitcoin
(d) all - installs jmbase, jmclient, jmbitcoin, jmdaemon
(e) develop - installs jmbase, jmclient, jmbitcoin, jmdaemon linked to the source directoy
Note that b and c are distinct mainly due to the fact that
the latter requires the secp256k1 (libsecp256k1 via the secp256k1-py binding),
which is something that would be an annoyance if you don't need it (wallets).
While only (a) has a similarly annoying dependency on libnacl as the binding
to libsodium.
All modes require and install twisted.
"""
if sys.version_info < (3, 7):
raise RuntimeError("This package requres Python 3.7+")
def help():
print("Usage: python setupall.py <mode>\n"
"Mode is one of:\n"
"`--all` - for the full joinmarket package with secp256k1\n"
"`--daemon` - for joinmarketd\n"
"`--client-only` - for client not using joinmarket's own bitcoin code\n"
"`--client-bitcoin` - using joinmarket bitcoin code, installs secp256k1\n"
"`--develop` - uses the local code for all packages (does not install to site-packages)."
)
sys.exit(2)
if len(sys.argv) != 2:
help()
curdir = os.getcwd()
mode = sys.argv[1]
packages = {"--all": ["jmbase", "jmbitcoin", "jmclient", "jmdaemon"],
"--daemon": ["jmbase", "jmdaemon"],
"--client-only": ["jmbase", "jmclient"],
"--client-bitcoin": ["jmbase", "jmbitcoin", "jmclient"],
"--develop": ["jmbase", "jmbitcoin", "jmclient", "jmdaemon"]}
if mode not in packages:
help()
for x in packages[mode]:
dirtorun = os.path.join(curdir, x)
cmd = ['pip', 'install', '--upgrade']
if mode == "--develop":
cmd.append('-e')
cmd.append('.')
p = subprocess.Popen(cmd, cwd=dirtorun)
p.wait()

0
jmbase/jmbase/__init__.py → src/jmbase/__init__.py

0
jmbase/jmbase/arguments.py → src/jmbase/arguments.py

0
jmbase/jmbase/bigstring.py → src/jmbase/bigstring.py

0
jmbase/jmbase/bytesprod.py → src/jmbase/bytesprod.py

0
jmbase/jmbase/commands.py → src/jmbase/commands.py

0
jmbase/jmbase/crypto.py → src/jmbase/crypto.py

0
jmbase/jmbase/proof_of_work.py → src/jmbase/proof_of_work.py

0
jmbase/jmbase/support.py → src/jmbase/support.py

0
jmbase/jmbase/twisted_utils.py → src/jmbase/twisted_utils.py

0
jmbitcoin/jmbitcoin/__init__.py → src/jmbitcoin/__init__.py

0
jmbitcoin/jmbitcoin/amount.py → src/jmbitcoin/amount.py

0
jmbitcoin/jmbitcoin/bip21.py → src/jmbitcoin/bip21.py

0
jmbitcoin/jmbitcoin/blocks.py → src/jmbitcoin/blocks.py

0
jmbitcoin/jmbitcoin/output_descriptors.py → src/jmbitcoin/output_descriptors.py

0
jmbitcoin/jmbitcoin/secp256k1_deterministic.py → src/jmbitcoin/secp256k1_deterministic.py

0
jmbitcoin/jmbitcoin/secp256k1_ecies.py → src/jmbitcoin/secp256k1_ecies.py

0
jmbitcoin/jmbitcoin/secp256k1_main.py → src/jmbitcoin/secp256k1_main.py

0
jmbitcoin/jmbitcoin/secp256k1_transaction.py → src/jmbitcoin/secp256k1_transaction.py

0
jmbitcoin/jmbitcoin/snicker.py → src/jmbitcoin/snicker.py

0
jmclient/jmclient/__init__.py → src/jmclient/__init__.py

0
jmclient/jmclient/auth.py → src/jmclient/auth.py

0
jmclient/jmclient/blockchaininterface.py → src/jmclient/blockchaininterface.py

0
jmclient/jmclient/bond_calc.py → src/jmclient/bond_calc.py

0
jmclient/jmclient/cli_options.py → src/jmclient/cli_options.py

0
jmclient/jmclient/client_protocol.py → src/jmclient/client_protocol.py

0
jmclient/jmclient/commitment_utils.py → src/jmclient/commitment_utils.py

0
jmclient/jmclient/configure.py → src/jmclient/configure.py

0
jmclient/jmclient/cryptoengine.py → src/jmclient/cryptoengine.py

0
jmclient/jmclient/fidelity_bond.py → src/jmclient/fidelity_bond.py

0
jmclient/jmclient/jsonrpc.py → src/jmclient/jsonrpc.py

0
jmclient/jmclient/maker.py → src/jmclient/maker.py

0
jmclient/jmclient/old_mnemonic.py → src/jmclient/old_mnemonic.py

0
jmclient/jmclient/output.py → src/jmclient/output.py

0
jmclient/jmclient/payjoin.py → src/jmclient/payjoin.py

0
jmclient/jmclient/podle.py → src/jmclient/podle.py

0
jmclient/jmclient/schedule.py → src/jmclient/schedule.py

0
jmclient/jmclient/snicker_receiver.py → src/jmclient/snicker_receiver.py

0
jmclient/jmclient/storage.py → src/jmclient/storage.py

0
jmclient/jmclient/support.py → src/jmclient/support.py

0
jmclient/jmclient/taker.py → src/jmclient/taker.py

0
jmclient/jmclient/taker_utils.py → src/jmclient/taker_utils.py

0
jmclient/jmclient/wallet.py → src/jmclient/wallet.py

0
jmclient/jmclient/wallet_rpc.py → src/jmclient/wallet_rpc.py

0
jmclient/jmclient/wallet_service.py → src/jmclient/wallet_service.py

0
jmclient/jmclient/wallet_utils.py → src/jmclient/wallet_utils.py

0
jmclient/jmclient/websocketserver.py → src/jmclient/websocketserver.py

0
jmclient/jmclient/yieldgenerator.py → src/jmclient/yieldgenerator.py

0
jmdaemon/jmdaemon/__init__.py → src/jmdaemon/__init__.py

0
jmdaemon/jmdaemon/daemon_protocol.py → src/jmdaemon/daemon_protocol.py

0
jmdaemon/jmdaemon/enc_wrapper.py → src/jmdaemon/enc_wrapper.py

0
jmdaemon/jmdaemon/fidelity_bond_sanity_check.py → src/jmdaemon/fidelity_bond_sanity_check.py

0
jmdaemon/jmdaemon/irc.py → src/jmdaemon/irc.py

0
jmdaemon/jmdaemon/message_channel.py → src/jmdaemon/message_channel.py

0
jmdaemon/jmdaemon/onionmc.py → src/jmdaemon/onionmc.py

0
jmdaemon/jmdaemon/orderbookwatch.py → src/jmdaemon/orderbookwatch.py

0
jmdaemon/jmdaemon/protocol.py → src/jmdaemon/protocol.py

0
jmqtui/jmqtui/__init__.py → src/jmqtui/__init__.py

7
src/jmqtui/_compile.py

@ -0,0 +1,7 @@
import os
# The following command should be executed whenever `open_wallet_dialog.ui` is updated.
# `gui-dev` dependencies must be installed prior to execution.
def compile_ui():
os.system('pyside2-uic jmqtui/open_wallet_dialog.ui -o jmqtui/open_wallet_dialog.py')

0
jmqtui/jmqtui/open_wallet_dialog.py → src/jmqtui/open_wallet_dialog.py

0
jmqtui/jmqtui/open_wallet_dialog.ui → src/jmqtui/open_wallet_dialog.ui

0
jmbase/test/test_base_support.py → test/jmbase/test_base_support.py

0
jmbase/test/test_commands.py → test/jmbase/test_commands.py

0
jmbitcoin/test/base58_keys_invalid.json → test/jmbitcoin/base58_keys_invalid.json

0
jmbitcoin/test/base58_keys_valid.json → test/jmbitcoin/base58_keys_valid.json

0
jmbitcoin/test/ecc_sigs_rfc6979_valid.json → test/jmbitcoin/ecc_sigs_rfc6979_valid.json

0
jmbitcoin/test/test_amounts.py → test/jmbitcoin/test_amounts.py

0
jmbitcoin/test/test_bip21.py → test/jmbitcoin/test_bip21.py

0
jmbitcoin/test/test_bip32.py → test/jmbitcoin/test_bip32.py

0
jmbitcoin/test/test_btc_snicker.py → test/jmbitcoin/test_btc_snicker.py

0
jmbitcoin/test/test_ecc_signing.py → test/jmbitcoin/test_ecc_signing.py

0
jmbitcoin/test/test_ecdh.py → test/jmbitcoin/test_ecdh.py

0
jmbitcoin/test/test_ecies.py → test/jmbitcoin/test_ecies.py

0
jmbitcoin/test/test_output_descriptors.py → test/jmbitcoin/test_output_descriptors.py

0
jmbitcoin/test/test_tx_signing.py → test/jmbitcoin/test_tx_signing.py

0
jmbitcoin/test/tx_valid.json → test/jmbitcoin/tx_valid.json

0
jmclient/test/base58_keys_invalid.json → test/jmclient/base58_keys_invalid.json

0
jmclient/test/base58_keys_valid.json → test/jmclient/base58_keys_valid.json

0
jmclient/test/bip341_wallet_test_vectors.json → test/jmclient/bip341_wallet_test_vectors.json

0
jmclient/test/bip39vectors.json → test/jmclient/bip39vectors.json

0
jmclient/test/commontest.py → test/jmclient/commontest.py

0
jmclient/test/taker_test_data.py → test/jmclient/taker_test_data.py

0
jmclient/test/test_argon2.py → test/jmclient/test_argon2.py

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save