1
0
mirror of https://github.com/gryf/fs-uae-wrapper.git synced 2026-02-02 14:15:45 +01:00

5 Commits

Author SHA1 Message Date
7b0ef15eae Added dummy message class for systems with python without tk 2026-01-10 18:48:41 +01:00
59bd1b6029 Make tempfile prefixed with fs-uae-wrapper string.
Also, included test requirements into tox file, and fixed docs.
2025-09-25 18:50:28 +02:00
f5e6471555 Removed license classifier in favor of SPDX entry. 2025-04-18 16:05:37 +02:00
4c61c3d7ea Fix user provided whdload options 2024-09-14 17:00:28 +02:00
7e3d68624f Fixed packages find in pyproject 2024-09-14 15:59:25 +02:00
10 changed files with 54 additions and 21 deletions

View File

@@ -331,8 +331,6 @@ Options used:
* ``wrapper_archive`` (optional) path to the whdload archive, defaults to same * ``wrapper_archive`` (optional) path to the whdload archive, defaults to same
name as configuration file with some detected archive extension. Note, that name as configuration file with some detected archive extension. Note, that
name is case sensitive name is case sensitive
* ``wrapper_archiver`` (optional) archiver to use for storage save state -
default ``7z``.
This module is solely used with whdload distributed games (not just whdload This module is solely used with whdload distributed games (not just whdload
slave files, but whole games, which can be found on several places on the slave files, but whole games, which can be found on several places on the
@@ -365,7 +363,7 @@ where the minimum dependences are:
- `WHDLoad`_ 18.9 - `WHDLoad`_ 18.9
- `SetPatch`_ 43.6 - `SetPatch`_ 43.6
and the ``S/startup-sequence`` should at east contain: and the ``S/startup-sequence`` should at least contain:
.. code:: .. code::
@@ -379,8 +377,8 @@ To leverage more pleasant UX, additionally those bits should be installed (or -
copied into base image filesystem): copied into base image filesystem):
- ``Assign`` and whatever commands you'll be use in scripts from your copy of - ``Assign`` and whatever commands you'll be use in scripts from your copy of
- `uaequit`_ - this will allow to quit emulator, after quiting game
Workbench Workbench
- `uaequit`_ - this will allow to quit emulator, after quiting game
- `kgiconload`_ - tool for reading icon and executing *default tool* with - `kgiconload`_ - tool for reading icon and executing *default tool* with
optionally defined tool types as parameters (in this case: WHDLoad) optionally defined tool types as parameters (in this case: WHDLoad)
- `SKick`_ optionally - for kickstart relocations. Also images of corresponding - `SKick`_ optionally - for kickstart relocations. Also images of corresponding
@@ -509,7 +507,7 @@ And execution is as usual:
Now, similar to the archive module, it will create temporary directory, unpack Now, similar to the archive module, it will create temporary directory, unpack
base image there, unpack WHDLoad game archive, search for slave file, and base image there, unpack WHDLoad game archive, search for slave file, and
preapre ``s:whdload-startup``, and finally pass all the configuration to prepare ``s:whdload-startup``, and finally pass all the configuration to
fs-uae. fs-uae.

View File

@@ -44,7 +44,7 @@ class Base(object):
if not self._validate_options(): if not self._validate_options():
return False return False
self.dir = tempfile.mkdtemp() self.dir = tempfile.mkdtemp(prefix='fs-uae-wrapper-')
self._normalize_options() self._normalize_options()
self._set_assets_paths() self._set_assets_paths()

View File

@@ -0,0 +1,18 @@
"""
Display message as simple text on console
"""
import sys
class Message:
"""Just a fake message window for systems without TK"""
def __init__(self, msg):
self.msg = msg
self._process = None
def show(self):
sys.stdout.write(self.msg + "\n")
def close(self):
return None

View File

@@ -8,7 +8,11 @@ import pathlib
import shutil import shutil
import subprocess import subprocess
from fs_uae_wrapper import file_archive, message from fs_uae_wrapper import file_archive
try:
from fs_uae_wrapper.message import Message
except ModuleNotFoundError:
from fs_uae_wrapper.nogui_message import Message
class CmdOption(dict): class CmdOption(dict):
@@ -64,7 +68,7 @@ def operate_archive(arch_name, operation, text, params):
if archiver is None: if archiver is None:
return False return False
msg = message.Message(text) msg = Message(text)
if text: if text:
msg.show() msg.show()

View File

@@ -114,10 +114,10 @@ class Wrapper(base.ArchiveBase):
# find proper way to handle slave # find proper way to handle slave
# 1. check if there are user provided params # 1. check if there are user provided params
contents = f"cd {slave_path}\n" contents = f"cd {slave_path}\n"
if self.fsuae_options.get('wrapper_whdload_options'): if self.all_options.get('wrapper_whdload_options'):
contents = (f"{contents}" contents = (f"{contents}"
f"C:whdload " f"C:whdload "
f"{self.fsuae_options['wrapper_whdload_options']} " f"{self.all_options['wrapper_whdload_options']} "
f"Slave={slave_fname}\n") f"Slave={slave_fname}\n")
else: else:
# no params, find if kgiconload is available # no params, find if kgiconload is available

View File

@@ -1,11 +1,11 @@
[build-system] [build-system]
requires = ["setuptools >= 61.0", "wheel", "setuptools-git-versioning"] requires = ["setuptools >= 77.0", "wheel", "setuptools-git-versioning"]
build-backend = "setuptools.build_meta" build-backend = "setuptools.build_meta"
[project] [project]
name = "fs-uae-wrapper" name = "fs-uae-wrapper"
authors = [{name = "Roman Dobosz", email = "gryf73@gmail.com"}] authors = [{name = "Roman Dobosz", email = "gryf73@gmail.com"}]
license = {text = "BSD"} license = "BSD-3-Clause"
description = "Automate archives support and state saves for fs-uae" description = "Automate archives support and state saves for fs-uae"
readme = "README.rst" readme = "README.rst"
requires-python = ">=3.8" requires-python = ">=3.8"
@@ -15,7 +15,6 @@ classifiers = [
"Development Status :: 5 - Production/Stable", "Development Status :: 5 - Production/Stable",
"Environment :: Console", "Environment :: Console",
"Intended Audience :: End Users/Desktop", "Intended Audience :: End Users/Desktop",
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent", "Operating System :: OS Independent",
"Programming Language :: Python :: 3", "Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.8",
@@ -34,7 +33,7 @@ Homepage = "https://github.com/gryf/fs-uae-wrapper"
fs-uae-wrapper = "fs_uae_wrapper.wrapper:run" fs-uae-wrapper = "fs_uae_wrapper.wrapper:run"
[tool.setuptools] [tool.setuptools]
py-modules = ["fs_uae_wrapper"] packages = ["fs_uae_wrapper"]
[tool.distutils.bdist_wheel] [tool.distutils.bdist_wheel]
universal = true universal = true

View File

@@ -1,5 +0,0 @@
pytest
pytest-cov
pytest-pep8
coverage
flake8

View File

@@ -2,6 +2,7 @@ import os
from unittest import TestCase, mock from unittest import TestCase, mock
from fs_uae_wrapper import message from fs_uae_wrapper import message
from fs_uae_wrapper import nogui_message
if os.environ.get('DISPLAY'): if os.environ.get('DISPLAY'):
import tkinter as tk import tkinter as tk
@@ -38,6 +39,19 @@ class TestMessage(TestCase):
msg._process.join.assert_called_once() msg._process.join.assert_called_once()
class TestNOPMessage(TestCase):
@mock.patch('sys.stdout.write')
def test_show(self, stdout_write):
msg = nogui_message.Message('display that')
msg.show()
stdout_write.assert_called_once()
def test_close(self):
msg = nogui_message.Message('display that')
self.assertIsNone(msg.close())
if os.environ.get('DISPLAY'): if os.environ.get('DISPLAY'):
# Tkinter needs graphic environment for the widgets # Tkinter needs graphic environment for the widgets
class TestSpawn(TestCase): class TestSpawn(TestCase):

View File

@@ -225,7 +225,7 @@ class TestWHDLoad(TestCase):
listdir.return_value = contents listdir.return_value = contents
wrapper = whdload.Wrapper('Config.fs-uae', utils.CmdOption(), {}) wrapper = whdload.Wrapper('Config.fs-uae', utils.CmdOption(), {})
whdl_opts = 'Preload SplashDelay=0 MMU PAL' whdl_opts = 'Preload SplashDelay=0 MMU PAL'
wrapper.fsuae_options['wrapper_whdload_options'] = whdl_opts wrapper.all_options['wrapper_whdload_options'] = whdl_opts
with mock.patch('builtins.open', _open): with mock.patch('builtins.open', _open):
self.assertTrue(wrapper._find_slave()) self.assertTrue(wrapper._find_slave())
handle = _open() handle = _open()

View File

@@ -8,7 +8,12 @@ usedevelop=True
setenv = COVERAGE_FILE = .coverage setenv = COVERAGE_FILE = .coverage
commands = py.test --cov=fs_uae_wrapper --cov-report=term-missing commands = py.test --cov=fs_uae_wrapper --cov-report=term-missing
deps = -r{toxinidir}/test-requirements.txt deps =
pytest
pytest-cov
pytest-pep8
coverage
flake8
[testenv:py3-flake8] [testenv:py3-flake8]
basepython = python3 basepython = python3