diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index 7d60645..f0d2712 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -22,7 +22,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest] - python-version: ['3.9', '3.10', '3.11'] + python-version: ['3.9', '3.10', '3.11', '3.14'] fail-fast: true runs-on: ${{ matrix.os }} diff --git a/nxt/nxt_node.py b/nxt/nxt_node.py index 394b9f6..5ea9b68 100644 --- a/nxt/nxt_node.py +++ b/nxt/nxt_node.py @@ -40,7 +40,9 @@ class INTERNAL_ATTRS(object): CACHED_CODE = _prefix + 'cached_code' # List of python attrs that a node will have but we don't want to parse or # considering in our composite logic - BUILTINS = tuple(dir(type('NodeSpec', (object,), {}))) + class _NodeSpec(object): + pass + BUILTINS = tuple(dir(_NodeSpec)) # A list of node attrs that are used internally in our composite logic but # tracked and like user attrs with a `_source__nxt` meta attr TRACKED = (COMPUTE, EXECUTE_IN, COMMENT, START_POINT, ENABLED, diff --git a/nxt/plugin_loader.py b/nxt/plugin_loader.py index 836e8cf..18d75ad 100644 --- a/nxt/plugin_loader.py +++ b/nxt/plugin_loader.py @@ -20,6 +20,8 @@ def load_plugins(): if not os.path.isdir(plugin_dir): continue for file_name in os.listdir(plugin_dir): + if not file_name.endswith('.py'): + continue mod_name, _ = os.path.splitext(file_name) if mod_name in _nxt_loaded_plugin_module_names: continue diff --git a/setup.py b/setup.py index 71e5eb9..dd72e7d 100644 --- a/setup.py +++ b/setup.py @@ -26,7 +26,7 @@ long_description_content_type="text/markdown", url="https://github.com/nxt-dev/nxt", packages=setuptools.find_packages(), - python_requires='>=3.7, <3.12', + python_requires='>=3.7, <3.15', entry_points={ 'console_scripts': [ 'nxt=nxt.cli:main',