From 5aa9a73f46f831aceec8d3aa3fe254955e3d4d0e Mon Sep 17 00:00:00 2001 From: Adamantios Date: Mon, 6 Jan 2025 16:23:14 +0200 Subject: [PATCH 1/8] chore: upgrade macos-12 to macos-latest-large in workflow The macOS 12 Actions runner image began deprecation on 7/10/24 and has been fully unsupported since 3/12/24 for GitHub. For more details, see https://github.com/actions/runner-images/issues/10721. Using macos-latest-large instead of macos-latest, as the latter is ARM-based, while we require AMD architecture (385f2dbd0ec779b584560c518b3f9da077f2c4d1). For more details, see https://github.com/actions/runner-images/issues/9741, and the table in https://github.com/actions/runner-images/blob/ubuntu24/20241117.1/README.md#available-images. --- .github/workflows/workflow.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 909d8b6d37..1042ba9e65 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -240,7 +240,7 @@ jobs: continue-on-error: False strategy: matrix: - os: [ubuntu-latest, macos-12, windows-latest] + os: [ubuntu-latest, macos-latest-large, windows-latest] python_version: ["3.10",] timeout-minutes: 10 runs-on: ${{ matrix.os }} @@ -271,7 +271,7 @@ jobs: sys: - { os: windows-latest, shell: "msys2 {0}" } - { os: ubuntu-latest, shell: bash } -# - { os: macos-12, shell: bash } +# - { os: macos-latest-large, shell: bash } python_version: ["3.10",] timeout-minutes: 15 steps: @@ -433,7 +433,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-12, windows-latest] + os: [ubuntu-latest, macos-latest-large, windows-latest] python_version: ['3.8', '3.9', '3.10', '3.11'] timeout-minutes: 120 steps: @@ -469,8 +469,8 @@ jobs: # sudo apt-get install -y protobuf-compiler # use sudo rm /var/lib/apt/lists/lock above in line above update if dependency install failures persist # use sudo apt-get dist-upgrade above in line below update if dependency install failures persist - - if: matrix.os == 'macos-12' - name: Install dependencies (macos-12) + - if: matrix.os == 'macos-latest-large' + name: Install dependencies (macos-latest-large) run: | pip install tomte[tox]==0.2.13 brew install gcc @@ -558,7 +558,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-12, windows-latest] + os: [ubuntu-latest, macos-latest-large, windows-latest] python-version: ["3.10"] timeout-minutes: 45 steps: From 72a1d894845de7afa131ef38900b2eacefd979b6 Mon Sep 17 00:00:00 2001 From: Adamantios Date: Mon, 6 Jan 2025 17:29:11 +0200 Subject: [PATCH 2/8] fix: upgrade the Go version Upgrade the Go version in order for `p2p_libp2p` to be compatible with the latest macOS versions. --- .github/workflows/workflow.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 1042ba9e65..5b35492538 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -52,9 +52,9 @@ jobs: - uses: actions/setup-python@v3 with: python-version: "3.10" - - uses: actions/setup-go@v3 + - uses: actions/setup-go@v5.2.0 with: - go-version: "1.17.7" + go-version: '1.20.0' - name: Install dependencies (ubuntu-latest) run: | sudo apt-get update --fix-missing @@ -112,9 +112,9 @@ jobs: - uses: actions/setup-python@v3 with: python-version: "3.10" - - uses: actions/setup-go@v3 + - uses: actions/setup-go@v5.2.0 with: - go-version: "1.17.7" + go-version: '1.20.0' - name: Install dependencies (ubuntu-latest) run: | sudo apt-get update --fix-missing @@ -228,9 +228,9 @@ jobs: - uses: actions/checkout@v3 with: fetch-depth: 0 - - uses: actions/setup-go@v3 + - uses: actions/setup-go@v5.2.0 with: - go-version: "1.17.7" + go-version: '1.20.0' - run: | wget https://github.com/zricethezav/gitleaks/releases/download/v8.10.1/gitleaks_8.10.1_linux_x64.tar.gz && \ tar -xzf gitleaks_8.10.1_linux_x64.tar.gz && \ @@ -311,9 +311,9 @@ jobs: - uses: actions/setup-python@v3 with: python-version: "3.10" - - uses: actions/setup-go@v3 + - uses: actions/setup-go@v5.2.0 with: - go-version: "1.17.7" + go-version: '1.20.0' - name: Install protolint (ubuntu-latest) run: | sudo apt-get update --fix-missing @@ -339,9 +339,9 @@ jobs: - uses: actions/setup-python@v3 with: python-version: "3.10" - - uses: actions/setup-go@v3 + - uses: actions/setup-go@v5.2.0 with: - go-version: "1.17.7" + go-version: '1.20.0' - name: Install dependencies (ubuntu-latest) run: | sudo apt-get update --fix-missing @@ -376,9 +376,9 @@ jobs: - uses: actions/setup-python@v3 with: python-version: "3.10" - - uses: actions/setup-go@v3 + - uses: actions/setup-go@v5.2.0 with: - go-version: "1.17.7" + go-version: '1.20.0' - name: Install dependencies (ubuntu-latest) run: | sudo apt-get update --fix-missing @@ -441,9 +441,9 @@ jobs: - uses: actions/setup-python@v3 with: python-version: ${{ matrix.python_version }} - - uses: actions/setup-go@v3 + - uses: actions/setup-go@v5.2.0 with: - go-version: "1.17.7" + go-version: '1.20.0' - if: matrix.os == 'ubuntu-latest' name: Install dependencies (ubuntu-latest) run: | @@ -566,6 +566,6 @@ jobs: - uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - - uses: actions/setup-go@v3 + - uses: actions/setup-go@v5.2.0 with: - go-version: "1.17.7" + go-version: '1.20.0' From 7e08555bfb7f43c144ee85b3738717ff0a4e2e87 Mon Sep 17 00:00:00 2001 From: Adamantios Date: Mon, 6 Jan 2025 17:47:28 +0200 Subject: [PATCH 3/8] fix: problematic standard library function mocking Resolves a bug which appeared after updating the macOS version (7e3df5fcf3213bb41f0fef68c04a6ea5e4bbc594): ``` _ TestCheckPackagesCommand.test_check_public_id_failure_wrong_public_id[test_param2] _ query = ['gym'] def search_packages_info(query: List[str]) -> Generator[_PackageInfo, None, None]: """ Gather details from installed distributions. Print distribution name, version, location, and installed files. Installed files requires a pip generated 'installed-files.txt' in the distributions '.egg-info' directory. """ > env = get_default_environment() /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/pip/_internal/commands/show.py:80: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def get_default_environment() -> BaseEnvironment: """Get the default representation for the current environment. This returns an Environment instance from the chosen backend. The default Environment instance should be built from ``sys.path`` and may use caching to share instance state accorss calls. """ > return select_backend().Environment.default() /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/pip/_internal/metadata/__init__.py:76: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ @functools.lru_cache(maxsize=None) def select_backend() -> Backend: if _should_use_importlib_metadata(): from . import importlib return cast(Backend, importlib) > from . import pkg_resources /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/pip/_internal/metadata/__init__.py:64: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ import email.message import email.parser import logging import os import zipfile from typing import ( Collection, Iterable, Iterator, List, Mapping, NamedTuple, Optional, ) > from pip._vendor import pkg_resources /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/pip/_internal/metadata/pkg_resources.py:16: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ """ Package resource API -------------------- A resource is a logical file contained within a package, or a logical subdirectory thereof. The package resource API expects resource names to have their path parts separated with ``/``, *not* whatever the local path separator is. Do not use os.path operations to manipulate resource names being passed into the API. The package resource API is designed to work with normal filesystem packages, .egg files, and unpacked .egg files. It can also work in a limited way with .zip files and with custom PEP 302 loaders that support the ``get_data()`` method. This module is deprecated. Users are directed to :mod:`importlib.resources`, :mod:`importlib.metadata` and :pypi:`packaging` instead. """ from __future__ import annotations import sys if sys.version_info < (3, 8): # noqa: UP036 # Check for unsupported versions raise RuntimeError("Python 3.8 or later is required") import os import io import time import re import types from typing import ( Any, Literal, Dict, Iterator, Mapping, MutableSequence, NamedTuple, NoReturn, Tuple, Union, TYPE_CHECKING, Protocol, Callable, Iterable, TypeVar, overload, ) import zipfile import zipimport import warnings import stat import functools import pkgutil import operator import platform import collections import plistlib import email.parser import errno import tempfile import textwrap import inspect import ntpath import posixpath import importlib import importlib.abc import importlib.machinery from pkgutil import get_importer import _imp # capture these to bypass sandboxing from os import utime from os import open as os_open from os.path import isdir, split try: from os import mkdir, rename, unlink WRITE_SUPPORT = True except ImportError: # no write support, probably under GAE WRITE_SUPPORT = False from pip._internal.utils._jaraco_text import ( yield_lines, drop_comment, join_continuation, ) from pip._vendor.packaging import markers as _packaging_markers from pip._vendor.packaging import requirements as _packaging_requirements from pip._vendor.packaging import utils as _packaging_utils from pip._vendor.packaging import version as _packaging_version from pip._vendor.platformdirs import user_cache_dir as _user_cache_dir if TYPE_CHECKING: from _typeshed import BytesPath, StrPath, StrOrBytesPath from pip._vendor.typing_extensions import Self # Patch: Remove deprecation warning from vendored pkg_resources. # Setting PYTHONWARNINGS=error to verify builds produce no warnings # causes immediate exceptions. # See https://github.com/pypa/pip/issues/12243 _T = TypeVar("_T") _DistributionT = TypeVar("_DistributionT", bound="Distribution") # Type aliases _NestedStr = Union[str, Iterable[Union[str, Iterable["_NestedStr"]]]] _InstallerTypeT = Callable[["Requirement"], "_DistributionT"] _InstallerType = Callable[["Requirement"], Union["Distribution", None]] _PkgReqType = Union[str, "Requirement"] _EPDistType = Union["Distribution", _PkgReqType] _MetadataType = Union["IResourceProvider", None] _ResolvedEntryPoint = Any # Can be any attribute in the module _ResourceStream = Any # TODO / Incomplete: A readable file-like object # Any object works, but let's indicate we expect something like a module (optionally has __loader__ or __file__) _ModuleLike = Union[object, types.ModuleType] # Any: Should be _ModuleLike but we end up with issues where _ModuleLike doesn't have _ZipLoaderModule's __loader__ _ProviderFactoryType = Callable[[Any], "IResourceProvider"] _DistFinderType = Callable[[_T, str, bool], Iterable["Distribution"]] _NSHandlerType = Callable[[_T, str, str, types.ModuleType], Union[str, None]] _AdapterT = TypeVar( "_AdapterT", _DistFinderType[Any], _ProviderFactoryType, _NSHandlerType[Any] ) # Use _typeshed.importlib.LoaderProtocol once available https://github.com/python/typeshed/pull/11890 class _LoaderProtocol(Protocol): def load_module(self, fullname: str, /) -> types.ModuleType: ... class _ZipLoaderModule(Protocol): __loader__: zipimport.zipimporter _PEP440_FALLBACK = re.compile(r"^v?(?P(?:[0-9]+!)?[0-9]+(?:\.[0-9]+)*)", re.I) class PEP440Warning(RuntimeWarning): """ Used when there is an issue with a version or specifier not complying with PEP 440. """ parse_version = _packaging_version.Version _state_vars: dict[str, str] = {} def _declare_state(vartype: str, varname: str, initial_value: _T) -> _T: _state_vars[varname] = vartype return initial_value def __getstate__() -> dict[str, Any]: state = {} g = globals() for k, v in _state_vars.items(): state[k] = g['_sget_' + v](g[k]) return state def __setstate__(state: dict[str, Any]) -> dict[str, Any]: g = globals() for k, v in state.items(): g['_sset_' + _state_vars[k]](k, g[k], v) return state def _sget_dict(val): return val.copy() def _sset_dict(key, ob, state): ob.clear() ob.update(state) def _sget_object(val): return val.__getstate__() def _sset_object(key, ob, state): ob.__setstate__(state) _sget_none = _sset_none = lambda *args: None def get_supported_platform(): """Return this platform's maximum compatible version. distutils.util.get_platform() normally reports the minimum version of macOS that would be required to *use* extensions produced by distutils. But what we want when checking compatibility is to know the version of macOS that we are *running*. To allow usage of packages that explicitly require a newer version of macOS, we must also know the current version of the OS. If this condition occurs for any other platform with a version in its platform strings, this function should be extended accordingly. """ plat = get_build_platform() m = macosVersionString.match(plat) if m is not None and sys.platform == "darwin": try: plat = 'macosx-%s-%s' % ('.'.join(_macos_vers()[:2]), m.group(3)) except ValueError: # not macOS pass return plat __all__ = [ # Basic resource access and distribution/entry point discovery 'require', 'run_script', 'get_provider', 'get_distribution', 'load_entry_point', 'get_entry_map', 'get_entry_info', 'iter_entry_points', 'resource_string', 'resource_stream', 'resource_filename', 'resource_listdir', 'resource_exists', 'resource_isdir', # Environmental control 'declare_namespace', 'working_set', 'add_activation_listener', 'find_distributions', 'set_extraction_path', 'cleanup_resources', 'get_default_cache', # Primary implementation classes 'Environment', 'WorkingSet', 'ResourceManager', 'Distribution', 'Requirement', 'EntryPoint', # Exceptions 'ResolutionError', 'VersionConflict', 'DistributionNotFound', 'UnknownExtra', 'ExtractionError', # Warnings 'PEP440Warning', # Parsing functions and string utilities 'parse_requirements', 'parse_version', 'safe_name', 'safe_version', 'get_platform', 'compatible_platforms', 'yield_lines', 'split_sections', 'safe_extra', 'to_filename', 'invalid_marker', 'evaluate_marker', # filesystem utilities 'ensure_directory', 'normalize_path', # Distribution "precedence" constants 'EGG_DIST', 'BINARY_DIST', 'SOURCE_DIST', 'CHECKOUT_DIST', 'DEVELOP_DIST', # "Provider" interfaces, implementations, and registration/lookup APIs 'IMetadataProvider', 'IResourceProvider', 'FileMetadata', 'PathMetadata', 'EggMetadata', 'EmptyProvider', 'empty_provider', 'NullProvider', 'EggProvider', 'DefaultProvider', 'ZipProvider', 'register_finder', 'register_namespace_handler', 'register_loader_type', 'fixup_namespace_packages', 'get_importer', # Warnings 'PkgResourcesDeprecationWarning', # Deprecated/backward compatibility only 'run_main', 'AvailableDistributions', ] class ResolutionError(Exception): """Abstract base for dependency resolution errors""" def __repr__(self): return self.__class__.__name__ + repr(self.args) class VersionConflict(ResolutionError): """ An already-installed version conflicts with the requested version. Should be initialized with the installed Distribution and the requested Requirement. """ _template = "{self.dist} is installed but {self.req} is required" @property def dist(self) -> Distribution: return self.args[0] @property def req(self) -> Requirement: return self.args[1] def report(self): return self._template.format(**locals()) def with_context(self, required_by: set[Distribution | str]): """ If required_by is non-empty, return a version of self that is a ContextualVersionConflict. """ if not required_by: return self args = self.args + (required_by,) return ContextualVersionConflict(*args) class ContextualVersionConflict(VersionConflict): """ A VersionConflict that accepts a third parameter, the set of the requirements that required the installed Distribution. """ _template = VersionConflict._template + ' by {self.required_by}' @property def required_by(self) -> set[str]: return self.args[2] class DistributionNotFound(ResolutionError): """A requested distribution was not found""" _template = ( "The '{self.req}' distribution was not found " "and is required by {self.requirers_str}" ) @property def req(self) -> Requirement: return self.args[0] @property def requirers(self) -> set[str] | None: return self.args[1] @property def requirers_str(self): if not self.requirers: return 'the application' return ', '.join(self.requirers) def report(self): return self._template.format(**locals()) def __str__(self): return self.report() class UnknownExtra(ResolutionError): """Distribution doesn't have an "extra feature" of the given name""" _provider_factories: dict[type[_ModuleLike], _ProviderFactoryType] = {} PY_MAJOR = '{}.{}'.format(*sys.version_info) EGG_DIST = 3 BINARY_DIST = 2 SOURCE_DIST = 1 CHECKOUT_DIST = 0 DEVELOP_DIST = -1 def register_loader_type( loader_type: type[_ModuleLike], provider_factory: _ProviderFactoryType ): """Register `provider_factory` to make providers for `loader_type` `loader_type` is the type or class of a PEP 302 ``module.__loader__``, and `provider_factory` is a function that, passed a *module* object, returns an ``IResourceProvider`` for that module. """ _provider_factories[loader_type] = provider_factory @overload def get_provider(moduleOrReq: str) -> IResourceProvider: ... @overload def get_provider(moduleOrReq: Requirement) -> Distribution: ... def get_provider(moduleOrReq: str | Requirement) -> IResourceProvider | Distribution: """Return an IResourceProvider for the named module or requirement""" if isinstance(moduleOrReq, Requirement): return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] try: module = sys.modules[moduleOrReq] except KeyError: __import__(moduleOrReq) module = sys.modules[moduleOrReq] loader = getattr(module, '__loader__', None) return _find_adapter(_provider_factories, loader)(module) @functools.lru_cache(maxsize=None) def _macos_vers(): version = platform.mac_ver()[0] # fallback for MacPorts if version == '': plist = '/System/Library/CoreServices/SystemVersion.plist' if os.path.exists(plist): with open(plist, 'rb') as fh: plist_content = plistlib.load(fh) if 'ProductVersion' in plist_content: version = plist_content['ProductVersion'] return version.split('.') def _macos_arch(machine): return {'PowerPC': 'ppc', 'Power_Macintosh': 'ppc'}.get(machine, machine) def get_build_platform(): """Return this platform's string for platform-specific distributions XXX Currently this is the same as ``distutils.util.get_platform()``, but it needs some hacks for Linux and macOS. """ from sysconfig import get_platform plat = get_platform() if sys.platform == "darwin" and not plat.startswith('macosx-'): try: version = _macos_vers() machine = os.uname()[4].replace(" ", "_") return "macosx-%d.%d-%s" % ( int(version[0]), int(version[1]), _macos_arch(machine), ) except ValueError: # if someone is running a non-Mac darwin system, this will fall # through to the default implementation pass return plat macosVersionString = re.compile(r"macosx-(\d+)\.(\d+)-(.*)") darwinVersionString = re.compile(r"darwin-(\d+)\.(\d+)\.(\d+)-(.*)") # XXX backward compat get_platform = get_build_platform def compatible_platforms(provided: str | None, required: str | None): """Can code for the `provided` platform run on the `required` platform? Returns true if either platform is ``None``, or the platforms are equal. XXX Needs compatibility checks for Linux and other unixy OSes. """ if provided is None or required is None or provided == required: # easy case return True # macOS special cases reqMac = macosVersionString.match(required) if reqMac: provMac = macosVersionString.match(provided) # is this a Mac package? if not provMac: # this is backwards compatibility for packages built before # setuptools 0.6. All packages built after this point will # use the new macOS designation. provDarwin = darwinVersionString.match(provided) if provDarwin: dversion = int(provDarwin.group(1)) macosversion = "%s.%s" % (reqMac.group(1), reqMac.group(2)) if ( dversion == 7 and macosversion >= "10.3" or dversion == 8 and macosversion >= "10.4" ): return True # egg isn't macOS or legacy darwin return False # are they the same major version and machine type? if provMac.group(1) != reqMac.group(1) or provMac.group(3) != reqMac.group(3): return False # is the required OS major update >= the provided one? if int(provMac.group(2)) > int(reqMac.group(2)): return False return True # XXX Linux and other platforms' special cases should go here return False @overload def get_distribution(dist: _DistributionT) -> _DistributionT: ... @overload def get_distribution(dist: _PkgReqType) -> Distribution: ... def get_distribution(dist: Distribution | _PkgReqType) -> Distribution: """Return a current distribution object for a Requirement or string""" if isinstance(dist, str): dist = Requirement.parse(dist) if isinstance(dist, Requirement): # Bad type narrowing, dist has to be a Requirement here, so get_provider has to return Distribution dist = get_provider(dist) # type: ignore[assignment] if not isinstance(dist, Distribution): raise TypeError("Expected str, Requirement, or Distribution", dist) return dist def load_entry_point(dist: _EPDistType, group: str, name: str) -> _ResolvedEntryPoint: """Return `name` entry point of `group` for `dist` or raise ImportError""" return get_distribution(dist).load_entry_point(group, name) @overload def get_entry_map( dist: _EPDistType, group: None = None ) -> dict[str, dict[str, EntryPoint]]: ... @overload def get_entry_map(dist: _EPDistType, group: str) -> dict[str, EntryPoint]: ... def get_entry_map(dist: _EPDistType, group: str | None = None): """Return the entry point map for `group`, or the full entry map""" return get_distribution(dist).get_entry_map(group) def get_entry_info(dist: _EPDistType, group: str, name: str): """Return the EntryPoint object for `group`+`name`, or ``None``""" return get_distribution(dist).get_entry_info(group, name) class IMetadataProvider(Protocol): def has_metadata(self, name: str) -> bool: """Does the package's distribution contain the named metadata?""" def get_metadata(self, name: str) -> str: """The named metadata resource as a string""" def get_metadata_lines(self, name: str) -> Iterator[str]: """Yield named metadata resource as list of non-blank non-comment lines Leading and trailing whitespace is stripped from each line, and lines with ``#`` as the first non-blank character are omitted.""" def metadata_isdir(self, name: str) -> bool: """Is the named metadata a directory? (like ``os.path.isdir()``)""" def metadata_listdir(self, name: str) -> list[str]: """List of metadata names in the directory (like ``os.listdir()``)""" def run_script(self, script_name: str, namespace: dict[str, Any]) -> None: """Execute the named script in the supplied namespace dictionary""" class IResourceProvider(IMetadataProvider, Protocol): """An object that provides access to package resources""" def get_resource_filename( self, manager: ResourceManager, resource_name: str ) -> str: """Return a true filesystem path for `resource_name` `manager` must be a ``ResourceManager``""" def get_resource_stream( self, manager: ResourceManager, resource_name: str ) -> _ResourceStream: """Return a readable file-like object for `resource_name` `manager` must be a ``ResourceManager``""" def get_resource_string( self, manager: ResourceManager, resource_name: str ) -> bytes: """Return the contents of `resource_name` as :obj:`bytes` `manager` must be a ``ResourceManager``""" def has_resource(self, resource_name: str) -> bool: """Does the package contain the named resource?""" def resource_isdir(self, resource_name: str) -> bool: """Is the named resource a directory? (like ``os.path.isdir()``)""" def resource_listdir(self, resource_name: str) -> list[str]: """List of resource names in the directory (like ``os.listdir()``)""" class WorkingSet: """A collection of active distributions on sys.path (or a similar list)""" def __init__(self, entries: Iterable[str] | None = None): """Create working set from list of path entries (default=sys.path)""" self.entries: list[str] = [] self.entry_keys = {} self.by_key = {} self.normalized_to_canonical_keys = {} self.callbacks = [] if entries is None: entries = sys.path for entry in entries: self.add_entry(entry) @classmethod def _build_master(cls): """ Prepare the master working set. """ ws = cls() try: from __main__ import __requires__ except ImportError: # The main program does not list any requirements return ws # ensure the requirements are met try: ws.require(__requires__) except VersionConflict: return cls._build_from_requirements(__requires__) return ws @classmethod def _build_from_requirements(cls, req_spec): """ Build a working set from a requirement spec. Rewrites sys.path. """ # try it without defaults already on sys.path # by starting with an empty path ws = cls([]) reqs = parse_requirements(req_spec) dists = ws.resolve(reqs, Environment()) for dist in dists: ws.add(dist) # add any missing entries from sys.path for entry in sys.path: if entry not in ws.entries: ws.add_entry(entry) # then copy back to sys.path sys.path[:] = ws.entries return ws def add_entry(self, entry: str): """Add a path item to ``.entries``, finding any distributions on it ``find_distributions(entry, True)`` is used to find distributions corresponding to the path entry, and they are added. `entry` is always appended to ``.entries``, even if it is already present. (This is because ``sys.path`` can contain the same value more than once, and the ``.entries`` of the ``sys.path`` WorkingSet should always equal ``sys.path``.) """ self.entry_keys.setdefault(entry, []) self.entries.append(entry) for dist in find_distributions(entry, True): self.add(dist, entry, False) def __contains__(self, dist: Distribution) -> bool: """True if `dist` is the active distribution for its project""" return self.by_key.get(dist.key) == dist def find(self, req: Requirement) -> Distribution | None: """Find a distribution matching requirement `req` If there is an active distribution for the requested project, this returns it as long as it meets the version requirement specified by `req`. But, if there is an active distribution for the project and it does *not* meet the `req` requirement, ``VersionConflict`` is raised. If there is no active distribution for the requested project, ``None`` is returned. """ dist = self.by_key.get(req.key) if dist is None: canonical_key = self.normalized_to_canonical_keys.get(req.key) if canonical_key is not None: req.key = canonical_key dist = self.by_key.get(canonical_key) if dist is not None and dist not in req: # XXX add more info raise VersionConflict(dist, req) return dist def iter_entry_points(self, group: str, name: str | None = None): """Yield entry point objects from `group` matching `name` If `name` is None, yields all entry points in `group` from all distributions in the working set, otherwise only ones matching both `group` and `name` are yielded (in distribution order). """ return ( entry for dist in self for entry in dist.get_entry_map(group).values() if name is None or name == entry.name ) def run_script(self, requires: str, script_name: str): """Locate distribution for `requires` and run `script_name` script""" ns = sys._getframe(1).f_globals name = ns['__name__'] ns.clear() ns['__name__'] = name self.require(requires)[0].run_script(script_name, ns) def __iter__(self) -> Iterator[Distribution]: """Yield distributions for non-duplicate projects in the working set The yield order is the order in which the items' path entries were added to the working set. """ seen = set() for item in self.entries: if item not in self.entry_keys: # workaround a cache issue continue for key in self.entry_keys[item]: if key not in seen: seen.add(key) yield self.by_key[key] def add( self, dist: Distribution, entry: str | None = None, insert: bool = True, replace: bool = False, ): """Add `dist` to working set, associated with `entry` If `entry` is unspecified, it defaults to the ``.location`` of `dist`. On exit from this routine, `entry` is added to the end of the working set's ``.entries`` (if it wasn't already present). `dist` is only added to the working set if it's for a project that doesn't already have a distribution in the set, unless `replace=True`. If it's added, any callbacks registered with the ``subscribe()`` method will be called. """ if insert: dist.insert_on(self.entries, entry, replace=replace) if entry is None: entry = dist.location keys = self.entry_keys.setdefault(entry, []) keys2 = self.entry_keys.setdefault(dist.location, []) if not replace and dist.key in self.by_key: # ignore hidden distros return self.by_key[dist.key] = dist normalized_name = _packaging_utils.canonicalize_name(dist.key) self.normalized_to_canonical_keys[normalized_name] = dist.key if dist.key not in keys: keys.append(dist.key) if dist.key not in keys2: keys2.append(dist.key) self._added_new(dist) @overload def resolve( self, requirements: Iterable[Requirement], env: Environment | None, installer: _InstallerTypeT[_DistributionT], replace_conflicting: bool = False, extras: tuple[str, ...] | None = None, ) -> list[_DistributionT]: ... @overload def resolve( self, requirements: Iterable[Requirement], env: Environment | None = None, *, installer: _InstallerTypeT[_DistributionT], replace_conflicting: bool = False, extras: tuple[str, ...] | None = None, ) -> list[_DistributionT]: ... @overload def resolve( self, requirements: Iterable[Requirement], env: Environment | None = None, installer: _InstallerType | None = None, replace_conflicting: bool = False, extras: tuple[str, ...] | None = None, ) -> list[Distribution]: ... def resolve( self, requirements: Iterable[Requirement], env: Environment | None = None, installer: _InstallerType | None | _InstallerTypeT[_DistributionT] = None, replace_conflicting: bool = False, extras: tuple[str, ...] | None = None, ) -> list[Distribution] | list[_DistributionT]: """List all distributions needed to (recursively) meet `requirements` `requirements` must be a sequence of ``Requirement`` objects. `env`, if supplied, should be an ``Environment`` instance. If not supplied, it defaults to all distributions available within any entry or distribution in the working set. `installer`, if supplied, will be invoked with each requirement that cannot be met by an already-installed distribution; it should return a ``Distribution`` or ``None``. Unless `replace_conflicting=True`, raises a VersionConflict exception if any requirements are found on the path that have the correct name but the wrong version. Otherwise, if an `installer` is supplied it will be invoked to obtain the correct version of the requirement and activate it. `extras` is a list of the extras to be used with these requirements. This is important because extra requirements may look like `my_req; extra = "my_extra"`, which would otherwise be interpreted as a purely optional requirement. Instead, we want to be able to assert that these requirements are truly required. """ # set up the stack requirements = list(requirements)[::-1] # set of processed requirements processed = set() # key -> dist best = {} to_activate = [] req_extras = _ReqExtras() # Mapping of requirement to set of distributions that required it; # useful for reporting info about conflicts. required_by = collections.defaultdict(set) while requirements: # process dependencies breadth-first req = requirements.pop(0) if req in processed: # Ignore cyclic or redundant dependencies continue if not req_extras.markers_pass(req, extras): continue dist = self._resolve_dist( req, best, replace_conflicting, env, installer, required_by, to_activate ) # push the new requirements onto the stack new_requirements = dist.requires(req.extras)[::-1] requirements.extend(new_requirements) # Register the new requirements needed by req for new_requirement in new_requirements: required_by[new_requirement].add(req.project_name) req_extras[new_requirement] = req.extras processed.add(req) # return list of distros to activate return to_activate def _resolve_dist( self, req, best, replace_conflicting, env, installer, required_by, to_activate ) -> Distribution: dist = best.get(req.key) if dist is None: # Find the best distribution and add it to the map dist = self.by_key.get(req.key) if dist is None or (dist not in req and replace_conflicting): ws = self if env is None: if dist is None: env = Environment(self.entries) else: # Use an empty environment and workingset to avoid # any further conflicts with the conflicting # distribution env = Environment([]) ws = WorkingSet([]) dist = best[req.key] = env.best_match( req, ws, installer, replace_conflicting=replace_conflicting ) if dist is None: requirers = required_by.get(req, None) raise DistributionNotFound(req, requirers) to_activate.append(dist) if dist not in req: # Oops, the "best" so far conflicts with a dependency dependent_req = required_by[req] raise VersionConflict(dist, req).with_context(dependent_req) return dist @overload def find_plugins( self, plugin_env: Environment, full_env: Environment | None, installer: _InstallerTypeT[_DistributionT], fallback: bool = True, ) -> tuple[list[_DistributionT], dict[Distribution, Exception]]: ... @overload def find_plugins( self, plugin_env: Environment, full_env: Environment | None = None, *, installer: _InstallerTypeT[_DistributionT], fallback: bool = True, ) -> tuple[list[_DistributionT], dict[Distribution, Exception]]: ... @overload def find_plugins( self, plugin_env: Environment, full_env: Environment | None = None, installer: _InstallerType | None = None, fallback: bool = True, ) -> tuple[list[Distribution], dict[Distribution, Exception]]: ... def find_plugins( self, plugin_env: Environment, full_env: Environment | None = None, installer: _InstallerType | None | _InstallerTypeT[_DistributionT] = None, fallback: bool = True, ) -> tuple[ list[Distribution] | list[_DistributionT], dict[Distribution, Exception], ]: """Find all activatable distributions in `plugin_env` Example usage:: distributions, errors = working_set.find_plugins( Environment(plugin_dirlist) ) # add plugins+libs to sys.path map(working_set.add, distributions) # display errors print('Could not load', errors) The `plugin_env` should be an ``Environment`` instance that contains only distributions that are in the project's "plugin directory" or directories. The `full_env`, if supplied, should be an ``Environment`` contains all currently-available distributions. If `full_env` is not supplied, one is created automatically from the ``WorkingSet`` this method is called on, which will typically mean that every directory on ``sys.path`` will be scanned for distributions. `installer` is a standard installer callback as used by the ``resolve()`` method. The `fallback` flag indicates whether we should attempt to resolve older versions of a plugin if the newest version cannot be resolved. This method returns a 2-tuple: (`distributions`, `error_info`), where `distributions` is a list of the distributions found in `plugin_env` that were loadable, along with any other distributions that are needed to resolve their dependencies. `error_info` is a dictionary mapping unloadable plugin distributions to an exception instance describing the error that occurred. Usually this will be a ``DistributionNotFound`` or ``VersionConflict`` instance. """ plugin_projects = list(plugin_env) # scan project names in alphabetic order plugin_projects.sort() error_info: dict[Distribution, Exception] = {} distributions: dict[Distribution, Exception | None] = {} if full_env is None: env = Environment(self.entries) env += plugin_env else: env = full_env + plugin_env shadow_set = self.__class__([]) # put all our entries in shadow_set list(map(shadow_set.add, self)) for project_name in plugin_projects: for dist in plugin_env[project_name]: req = [dist.as_requirement()] try: resolvees = shadow_set.resolve(req, env, installer) except ResolutionError as v: # save error info error_info[dist] = v if fallback: # try the next older version of project continue else: # give up on this project, keep going break else: list(map(shadow_set.add, resolvees)) distributions.update(dict.fromkeys(resolvees)) # success, no need to try any more versions of this project break sorted_distributions = list(distributions) sorted_distributions.sort() return sorted_distributions, error_info def require(self, *requirements: _NestedStr): """Ensure that distributions matching `requirements` are activated `requirements` must be a string or a (possibly-nested) sequence thereof, specifying the distributions and versions required. The return value is a sequence of the distributions that needed to be activated to fulfill the requirements; all relevant distributions are included, even if they were already activated in this working set. """ needed = self.resolve(parse_requirements(requirements)) for dist in needed: self.add(dist) return needed def subscribe( self, callback: Callable[[Distribution], object], existing: bool = True ): """Invoke `callback` for all distributions If `existing=True` (default), call on all existing ones, as well. """ if callback in self.callbacks: return self.callbacks.append(callback) if not existing: return for dist in self: callback(dist) def _added_new(self, dist): for callback in self.callbacks: callback(dist) def __getstate__(self): return ( self.entries[:], self.entry_keys.copy(), self.by_key.copy(), self.normalized_to_canonical_keys.copy(), self.callbacks[:], ) def __setstate__(self, e_k_b_n_c): entries, keys, by_key, normalized_to_canonical_keys, callbacks = e_k_b_n_c self.entries = entries[:] self.entry_keys = keys.copy() self.by_key = by_key.copy() self.normalized_to_canonical_keys = normalized_to_canonical_keys.copy() self.callbacks = callbacks[:] class _ReqExtras(Dict["Requirement", Tuple[str, ...]]): """ Map each requirement to the extras that demanded it. """ def markers_pass(self, req: Requirement, extras: tuple[str, ...] | None = None): """ Evaluate markers for req against each extra that demanded it. Return False if the req has a marker and fails evaluation. Otherwise, return True. """ extra_evals = ( req.marker.evaluate({'extra': extra}) for extra in self.get(req, ()) + (extras or (None,)) ) return not req.marker or any(extra_evals) > class Environment: /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/pip/_vendor/pkg_resources/__init__.py:1126: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ class Environment: """Searchable snapshot of distributions on a search path""" def __init__( self, search_path: Iterable[str] | None = None, > platform: str | None = get_supported_platform(), python: str | None = PY_MAJOR, ): /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/pip/_vendor/pkg_resources/__init__.py:1132: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def get_supported_platform(): """Return this platform's maximum compatible version. distutils.util.get_platform() normally reports the minimum version of macOS that would be required to *use* extensions produced by distutils. But what we want when checking compatibility is to know the version of macOS that we are *running*. To allow usage of packages that explicitly require a newer version of macOS, we must also know the current version of the OS. If this condition occurs for any other platform with a version in its platform strings, this function should be extended accordingly. """ > plat = get_build_platform() /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/pip/_vendor/pkg_resources/__init__.py:212: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def get_build_platform(): """Return this platform's string for platform-specific distributions XXX Currently this is the same as ``distutils.util.get_platform()``, but it needs some hacks for Linux and macOS. """ from sysconfig import get_platform > plat = get_platform() /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/pip/_vendor/pkg_resources/__init__.py:459: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def get_platform(): """Return a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by 'os.uname()'), although the exact information included depends on the OS; on Linux, the kernel version isn't particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u Windows will return one of: win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) win32 (all others - specifically, sys.platform is returned) For other non-POSIX platforms, currently just returns 'sys.platform'. """ if os.name == 'nt': if 'amd64' in sys.version.lower(): return 'win-amd64' if '(arm)' in sys.version.lower(): return 'win-arm32' if '(arm64)' in sys.version.lower(): return 'win-arm64' return sys.platform if os.name != "posix" or not hasattr(os, 'uname'): # XXX what about the architecture? NT is Intel or Alpha return sys.platform # Set for cross builds explicitly if "_PYTHON_HOST_PLATFORM" in os.environ: return os.environ["_PYTHON_HOST_PLATFORM"] # Try to distinguish various flavours of Unix osname, host, release, version, machine = os.uname() # Convert the OS name to lowercase, remove '/' characters, and translate # spaces (for "Power Macintosh") osname = osname.lower().replace('/', '') machine = machine.replace(' ', '_') machine = machine.replace('/', '-') if osname[:5] == "linux": # At least on Linux/Intel, 'machine' is the processor -- # i386, etc. # XXX what about Alpha, SPARC, etc? return "%s-%s" % (osname, machine) elif osname[:5] == "sunos": if release[0] >= "5": # SunOS 5 == Solaris 2 osname = "solaris" release = "%d.%s" % (int(release[0]) - 3, release[2:]) # We can't use "platform.architecture()[0]" because a # bootstrap problem. We use a dict to get an error # if some suspicious happens. bitness = {2147483647:"32bit", 9223372036854775807:"64bit"} machine += ".%s" % bitness[sys.maxsize] # fall through to standard osname-release-machine representation elif osname[:3] == "aix": return "%s-%s.%s" % (osname, version, release) elif osname[:6] == "cygwin": osname = "cygwin" import re rel_re = re.compile(r'[\d.]+') m = rel_re.match(release) if m: release = m.group() elif osname[:6] == "darwin": import _osx_support > osname, release, machine = _osx_support.get_platform_osx( get_config_vars(), osname, release, machine) /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/sysconfig.py:691: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _config_vars = {'ABIFLAGS': '', 'AC_APPLE_UNIVERSAL_BUILD': 0, 'AIX_GENUINE_CPLUSPLUS': 0, 'ALT_SOABI': 0, ...} osname = 'macosx', release = '11', machine = 'fat' def get_platform_osx(_config_vars, osname, release, machine): """Filter values for get_platform()""" # called from get_platform() in sysconfig and distutils.util # # For our purposes, we'll assume that the system version from # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set # to. This makes the compatibility story a bit more sane because the # machine is going to compile and link as if it were # MACOSX_DEPLOYMENT_TARGET. macver = _config_vars.get('MACOSX_DEPLOYMENT_TARGET', '') macrelease = _get_system_version() or macver macver = macver or macrelease if macver: release = macver osname = "macosx" # Use the original CFLAGS value, if available, so that we # return the same machine type for the platform string. # Otherwise, distutils may consider this a cross-compiling # case and disallow installs. cflags = _config_vars.get(_INITPRE+'CFLAGS', _config_vars.get('CFLAGS', '')) if macrelease: try: macrelease = tuple(int(i) for i in macrelease.split('.')[0:2]) except ValueError: macrelease = (10, 0) else: # assume no universal support macrelease = (10, 0) if (macrelease >= (10, 4)) and '-arch' in cflags.strip(): # The universal build will build fat binaries, but not on # systems before 10.4 machine = 'fat' > archs = re.findall(r'-arch\s+(\S+)', cflags) /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/_osx_support.py:539: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ('-arch\\s+(\\S+)', '-Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g') kwargs = {} def __call__(self, /, *args, **kwargs): # can't use self in-case a function / method we are mocking uses self # in the signature self._mock_check_sig(*args, **kwargs) self._increment_mock_call(*args, **kwargs) > return self._mock_call(*args, **kwargs) /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/unittest/mock.py:1081: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ('-arch\\s+(\\S+)', '-Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g') kwargs = {} def _mock_call(self, /, *args, **kwargs): > return self._execute_mock_call(*args, **kwargs) /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/unittest/mock.py:1085: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ('-arch\\s+(\\S+)', '-Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g') kwargs = {}, effect = def _execute_mock_call(self, /, *args, **kwargs): # separate from _increment_mock_call so that awaited functions are # executed separately from their call, also AsyncMock overrides this method effect = self.side_effect if effect is not None: if _is_exception(effect): raise effect elif not _callable(effect): > result = next(effect) E StopIteration /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/unittest/mock.py:1142: StopIteration The above exception was the direct cause of the following exception: self = test_param = _TestPublicIdParameters(side_effect=[[(None,)], [], [('fetchai', 'gym', '0.19.0')]], exit_code=0, message='OK!') @pytest.mark.parametrize( "test_param", [ _TestPublicIdParameters( side_effect=[ [(None,)], [(None, None, None)], ], exit_code=1, message="found 'None'", ), _TestPublicIdParameters( side_effect=[ [(None,)], [], [(None, None, None)], ], exit_code=1, message="found 'None/None:None'", ), _TestPublicIdParameters( side_effect=[ [(None,)], [], [("fetchai", "gym", "0.19.0")], ], exit_code=0, message="OK!", ), _TestPublicIdParameters( side_effect=[ [(None,)], [], ["", ()], ], exit_code=1, message="found ''", ), ], ) def test_check_public_id_failure_wrong_public_id( self, test_param: _TestPublicIdParameters ) -> None: """Test `check_public_id` failure.""" with mock.patch( "re.findall", side_effect=test_param.side_effect, ), _find_all_configuration_files_patch( [self.test_connection_config] ), check_dependencies_patch: > result = self.invoke( "--registry-path", str(self.packages_dir_path), "check-packages", ) /Users/runner/work/open-aea/open-aea/tests/test_cli/test_check_packages.py:237: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /Users/runner/work/open-aea/open-aea/aea/test_tools/test_cases.py:944: in invoke result = cls.runner.invoke( /Users/runner/work/open-aea/open-aea/aea/test_tools/click_testing.py:103: in invoke cli.main(args=args or (), prog_name=prog_name, **extra) /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/click/core.py:1078: in main rv = self.invoke(ctx) /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/click/core.py:1688: in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/click/core.py:1434: in invoke return ctx.invoke(self.callback, **ctx.params) /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/click/core.py:783: in invoke return __callback(*args, **kwargs) /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/click/decorators.py:92: in new_func return ctx.invoke(f, obj, *args, **kwargs) /Users/runner/work/open-aea/open-aea/.tox/py3.8/lib/python3.8/site-packages/click/core.py:783: in invoke return __callback(*args, **kwargs) /Users/runner/work/open-aea/open-aea/aea/cli/check_packages.py:621: in check_packages check_pypi_dependencies(file) /Users/runner/work/open-aea/open-aea/aea/cli/check_packages.py:601: in check_pypi_dependencies PyPIDependenciesCheckTool(configuration_file).run() /Users/runner/work/open-aea/open-aea/aea/cli/check_packages.py:549: in run package_dependencies = self.get_dependencies() /Users/runner/work/open-aea/open-aea/aea/cli/check_packages.py:541: in get_dependencies result[dep] = DependenciesTool.get_package_files(dep) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ package_name = 'gym' @staticmethod def get_package_files(package_name: str) -> List[Path]: """Get package files list.""" > packages_info = list(search_packages_info([package_name])) E RuntimeError: generator raised StopIteration ``` The issue occurs because of the following reasons: - https://github.com/python/cpython/blob/v3.13.1/Lib/_osx_support.py#L537-L543 - https://github.com/valory-xyz/open-aea/blob/v1.60.0/tests/test_cli/test_check_packages.py#L231-L233 To put it short, now that we updated the macOS version (7e3df5fcf3213bb41f0fef68c04a6ea5e4bbc594), the condition in the first link is entered. In this condition, the `re.findall` is used, which is however mocked by the test as seen in the second link. In general, mocking standard library functions is a terrible idea. This commit refactors the whole `check_public_id` function and the corresponding tests to simplify, separate concerns, and fix the issue by removing the mock of the `re.findall` standard library function. --- aea/cli/check_packages.py | 57 +++++++++----- tests/test_cli/test_check_packages.py | 108 ++++++++++++++++++-------- 2 files changed, 114 insertions(+), 51 deletions(-) diff --git a/aea/cli/check_packages.py b/aea/cli/check_packages.py index 5a8e4b3b00..385df44e92 100644 --- a/aea/cli/check_packages.py +++ b/aea/cli/check_packages.py @@ -361,45 +361,62 @@ def check_public_id(configuration_file: Path) -> None: content = module_path_to_load.read_text() # check number of definitions of PUBLIC_ID. Required exactly one match. - assignments_to_public_id = re.findall("^PUBLIC_ID = (.*)", content, re.MULTILINE) + assignments_to_public_id = find_public_id_assignments(content) if len(assignments_to_public_id) != 1: raise PublicIdDefinitionError( package_type, expected_public_id, len(assignments_to_public_id) ) - # check first pattern of public id: PublicId.from_str(...) + # check for valid PUBLIC_ID patterns + public_id_match = find_public_id_from_str(content) + if public_id_match: + if str(expected_public_id) != public_id_match: + raise WrongPublicIdError(package_type, expected_public_id, public_id_match) + return + + public_id_components = find_public_id_components(content) + if public_id_components: + author, name, version = public_id_components + actual_public_id_str = f"{author}/{name}:{version}" + if str(expected_public_id) != actual_public_id_str: + raise WrongPublicIdError( + package_type, expected_public_id, actual_public_id_str + ) + return + + # if no valid pattern is found + raise WrongPublicIdError(package_type, expected_public_id, content) + + +def find_public_id_assignments(content: str) -> list: + """Find assignments to PUBLIC_ID.""" + return re.findall(r"^PUBLIC_ID = (.*)", content, re.MULTILINE) + + +def find_public_id_from_str(content: str) -> Optional[str]: + """Find public_id using the `PublicId.from_str` pattern.""" matches = re.findall( r"^PUBLIC_ID = PublicId.from_str\( *(\"(.*)\"|'(.*)') *\)$", content, re.MULTILINE, ) if len(matches) == 1: - # process the result _, match1, match2 = matches[0] - match = match1 if match1 != "" else match2 - if str(expected_public_id) != match: - raise WrongPublicIdError(package_type, expected_public_id, match) - return + # return the non-empty match + return match1 or match2 + return None - # check second pattern of public id: PublicId('...', '...', '...') + +def find_public_id_components(content: str) -> Optional[tuple]: + """Find public_id components using the `PublicId('...', '...', '...')` pattern.""" matches = re.findall( r"^PUBLIC_ID = PublicId\( *['\"](.*)['\"] *, *['\"](.*)['\"] *, *['\"](.*)['\"] *\)$", content, re.MULTILINE, ) if len(matches) == 1: - # process the result - author, name, version = matches[0] - actual_public_id_str = f"{author}/{name}:{version}" - if str(expected_public_id) != actual_public_id_str: - raise WrongPublicIdError( - package_type, expected_public_id, actual_public_id_str - ) - return - - public_id_code = matches[0] - if str(expected_public_id) not in public_id_code: - raise WrongPublicIdError(package_type, expected_public_id, public_id_code) + return matches[0] + return None class DependenciesTool: diff --git a/tests/test_cli/test_check_packages.py b/tests/test_cli/test_check_packages.py index 86747cd420..f7f94e73df 100644 --- a/tests/test_cli/test_check_packages.py +++ b/tests/test_cli/test_check_packages.py @@ -20,14 +20,21 @@ """Test check packages command module.""" +from contextlib import ExitStack from dataclasses import dataclass from pathlib import Path -from typing import Any, List +from typing import Any, Dict, List, Union from unittest import mock import pytest -from aea.cli.check_packages import find_all_configuration_files, get_public_id_from_yaml +from aea.cli.check_packages import ( + find_all_configuration_files, + find_public_id_assignments, + find_public_id_components, + find_public_id_from_str, + get_public_id_from_yaml, +) from aea.test_tools.test_cases import BaseAEATestCase @@ -56,7 +63,7 @@ def _find_all_configuration_files_patch(config_files: List) -> Any: class _TestPublicIdParameters: """Dataclass to store parameters for a public id check test.""" - side_effect: List + mocked_values: Dict[str, Union[List, str, None]] exit_code: int message: str @@ -187,39 +194,54 @@ def test_check_public_id_failure( "test_param", [ _TestPublicIdParameters( - side_effect=[ - [(None,)], - [(None, None, None)], - ], + mocked_values={ + "find_public_id_assignments": "", + }, exit_code=1, - message="found 'None'", + message="expected unique definition of PUBLIC_ID for package fetchai/gym:0.19.0 of type connection; found 0", ), _TestPublicIdParameters( - side_effect=[ - [(None,)], - [], - [(None, None, None)], - ], + mocked_values={ + "find_public_id_assignments": [None], + "find_public_id_from_str": "match", + }, exit_code=1, - message="found 'None/None:None'", + message="expected fetchai/gym:0.19.0 for package of type connection; found 'match'", ), _TestPublicIdParameters( - side_effect=[ - [(None,)], - [], - [("fetchai", "gym", "0.19.0")], - ], + mocked_values={ + "find_public_id_assignments": [None], + "find_public_id_from_str": "fetchai/gym:0.19.0", + }, exit_code=0, message="OK!", ), _TestPublicIdParameters( - side_effect=[ - [(None,)], - [], - ["", ()], - ], + mocked_values={ + "find_public_id_assignments": [None], + "find_public_id_from_str": None, + "find_public_id_components": [None, None, None], + }, + exit_code=1, + message="expected fetchai/gym:0.19.0 for package of type connection; found 'None/None:None'", + ), + _TestPublicIdParameters( + mocked_values={ + "find_public_id_assignments": [None], + "find_public_id_from_str": None, + "find_public_id_components": ["fetchai", "gym", "0.19.0"], + }, + exit_code=0, + message="OK!", + ), + _TestPublicIdParameters( + mocked_values={ + "find_public_id_assignments": [None], + "find_public_id_from_str": None, + "find_public_id_components": None, + }, exit_code=1, - message="found ''", + message="expected fetchai/gym:0.19.0 for package of type connection; found ", ), ], ) @@ -228,12 +250,18 @@ def test_check_public_id_failure_wrong_public_id( ) -> None: """Test `check_public_id` failure.""" - with mock.patch( - "re.findall", - side_effect=test_param.side_effect, - ), _find_all_configuration_files_patch( - [self.test_connection_config] - ), check_dependencies_patch: + patches = [ + mock.patch(f"aea.cli.check_packages.{method}", return_value=mocked_value) + for method, mocked_value in test_param.mocked_values.items() + ] + patches.extend( + [ + _find_all_configuration_files_patch([self.test_connection_config]), + check_dependencies_patch, + ] + ) + with ExitStack() as stack: + [stack.enter_context(patch) for patch in patches] result = self.invoke( "--registry-path", str(self.packages_dir_path), @@ -243,6 +271,24 @@ def test_check_public_id_failure_wrong_public_id( assert result.exit_code == test_param.exit_code, result.output assert test_param.message in result.output + def test_find_public_id_assignments(self): + """Test `find_public_id_assignments`.""" + content = "PUBLIC_ID = PublicId('author', 'name', '0.1.0')" + result = find_public_id_assignments(content) + assert result == ["PublicId('author', 'name', '0.1.0')"] + + def test_find_public_id_from_str(self): + """Test `find_public_id_from_str`.""" + content = "PUBLIC_ID = PublicId.from_str('author/name:0.1.0')" + result = find_public_id_from_str(content) + assert result == "author/name:0.1.0" + + def test_find_public_id_components(self): + """Test `find_public_id_components`.""" + content = "PUBLIC_ID = PublicId('author', 'name', '0.1.0')" + result = find_public_id_components(content) + assert result == ("author", "name", "0.1.0") + def test_check_pypi_dependencies_failure( self, ) -> None: From 2638c9d12e2c34c5b095cb1b2c7bd707cce91fe5 Mon Sep 17 00:00:00 2001 From: Adamantios Date: Thu, 2 Jan 2025 17:54:50 +0200 Subject: [PATCH 4/8] chore: bump certificate date range --- packages/valory/connections/p2p_libp2p/connection.yaml | 4 ++-- packages/valory/connections/p2p_libp2p/consts.py | 4 ++-- .../valory/connections/p2p_libp2p_client/connection.yaml | 8 ++++---- .../valory/connections/p2p_libp2p_mailbox/connection.yaml | 8 ++++---- tests/data/dummy_connection/connection.yaml | 8 ++++---- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/valory/connections/p2p_libp2p/connection.yaml b/packages/valory/connections/p2p_libp2p/connection.yaml index 6d85cca364..f7657d5ee3 100644 --- a/packages/valory/connections/p2p_libp2p/connection.yaml +++ b/packages/valory/connections/p2p_libp2p/connection.yaml @@ -82,8 +82,8 @@ cert_requests: - identifier: acn ledger_id: ethereum message_format: '{public_key}' - not_after: '2025-01-01' - not_before: '2024-01-01' + not_after: '2026-01-01' + not_before: '2025-01-01' public_key: cosmos save_path: .certs/conn_cert.txt excluded_protocols: [] diff --git a/packages/valory/connections/p2p_libp2p/consts.py b/packages/valory/connections/p2p_libp2p/consts.py index 0e105b2340..5d3e147bc0 100644 --- a/packages/valory/connections/p2p_libp2p/consts.py +++ b/packages/valory/connections/p2p_libp2p/consts.py @@ -22,8 +22,8 @@ import platform -LIBP2P_CERT_NOT_BEFORE = "2024-01-01" -LIBP2P_CERT_NOT_AFTER = "2025-01-01" +LIBP2P_CERT_NOT_BEFORE = "2025-01-01" +LIBP2P_CERT_NOT_AFTER = "2026-01-01" LIBP2P_NODE_MODULE_NAME = "libp2p_node" diff --git a/packages/valory/connections/p2p_libp2p_client/connection.yaml b/packages/valory/connections/p2p_libp2p_client/connection.yaml index 5058f5969e..dc4f4d7ce6 100644 --- a/packages/valory/connections/p2p_libp2p_client/connection.yaml +++ b/packages/valory/connections/p2p_libp2p_client/connection.yaml @@ -30,15 +30,15 @@ cert_requests: - identifier: acn ledger_id: ethereum message_format: '{public_key}' - not_after: '2025-01-01' - not_before: '2024-01-01' + not_after: '2026-01-01' + not_before: '2025-01-01' public_key: 02d3a830c9d6ea1ae91936951430dee11f4662f33118b02190693be835359a9d77 save_path: .certs/acn_cosmos_9005.txt - identifier: acn ledger_id: ethereum message_format: '{public_key}' - not_after: '2025-01-01' - not_before: '2024-01-01' + not_after: '2026-01-01' + not_before: '2025-01-01' public_key: 02e741c62d706e1dcf6986bf37fa74b98681bc32669623ac9ee6ff72488d4f59e8 save_path: .certs/acn_cosmos_9006.txt excluded_protocols: [] diff --git a/packages/valory/connections/p2p_libp2p_mailbox/connection.yaml b/packages/valory/connections/p2p_libp2p_mailbox/connection.yaml index 2b2257b094..d27066128a 100644 --- a/packages/valory/connections/p2p_libp2p_mailbox/connection.yaml +++ b/packages/valory/connections/p2p_libp2p_mailbox/connection.yaml @@ -27,15 +27,15 @@ cert_requests: - identifier: acn ledger_id: ethereum message_format: '{public_key}' - not_after: '2025-01-01' - not_before: '2024-01-01' + not_after: '2026-01-01' + not_before: '2025-01-01' public_key: 02d3a830c9d6ea1ae91936951430dee11f4662f33118b02190693be835359a9d77 save_path: .certs/acn_cosmos_9005.txt - identifier: acn ledger_id: ethereum message_format: '{public_key}' - not_after: '2025-01-01' - not_before: '2024-01-01' + not_after: '2026-01-01' + not_before: '2025-01-01' public_key: 02e741c62d706e1dcf6986bf37fa74b98681bc32669623ac9ee6ff72488d4f59e8 save_path: .certs/acn_cosmos_9006.txt excluded_protocols: [] diff --git a/tests/data/dummy_connection/connection.yaml b/tests/data/dummy_connection/connection.yaml index 9c4a659769..7ebd6c70c9 100644 --- a/tests/data/dummy_connection/connection.yaml +++ b/tests/data/dummy_connection/connection.yaml @@ -31,14 +31,14 @@ cert_requests: - identifier: cert_id_1 ledger_id: some_ledger_id message_format: '{public_key}' - not_after: '2025-01-01' - not_before: '2024-01-01' + not_after: '2026-01-01' + not_before: '2025-01-01' public_key: key_id save_path: /source/some/path_1 - identifier: cert_id_2 ledger_id: some_ledger_id message_format: '{public_key}' - not_after: '2025-01-01' - not_before: '2024-01-01' + not_after: '2026-01-01' + not_before: '2025-01-01' public_key: '0xABCDEF123456' save_path: /source/some/path_2 From 6443e4508f6c678629781b4e3a1c8b4b723aa4a9 Mon Sep 17 00:00:00 2001 From: Adamantios Date: Mon, 6 Jan 2025 18:11:20 +0200 Subject: [PATCH 5/8] chore: run generators --- aea/cli/check_packages.py | 2 +- docs/p2p-connection.md | 4 ++-- docs/package_list.md | 8 ++++---- packages/fetchai/protocols/default/__init__.py | 2 +- packages/fetchai/protocols/default/dialogues.py | 2 +- packages/fetchai/protocols/default/message.py | 2 +- packages/fetchai/protocols/default/protocol.yaml | 8 ++++---- packages/fetchai/protocols/default/serialization.py | 2 +- packages/fetchai/protocols/fipa/__init__.py | 2 +- packages/fetchai/protocols/fipa/dialogues.py | 2 +- packages/fetchai/protocols/fipa/message.py | 2 +- packages/fetchai/protocols/fipa/protocol.yaml | 8 ++++---- packages/fetchai/protocols/fipa/serialization.py | 2 +- packages/fetchai/protocols/gym/__init__.py | 2 +- packages/fetchai/protocols/gym/dialogues.py | 2 +- packages/fetchai/protocols/gym/message.py | 2 +- packages/fetchai/protocols/gym/protocol.yaml | 8 ++++---- packages/fetchai/protocols/gym/serialization.py | 2 +- packages/fetchai/protocols/oef_search/__init__.py | 2 +- packages/fetchai/protocols/oef_search/dialogues.py | 2 +- packages/fetchai/protocols/oef_search/message.py | 2 +- packages/fetchai/protocols/oef_search/protocol.yaml | 8 ++++---- packages/fetchai/protocols/oef_search/serialization.py | 2 +- packages/fetchai/protocols/state_update/__init__.py | 2 +- packages/fetchai/protocols/state_update/dialogues.py | 2 +- packages/fetchai/protocols/state_update/message.py | 2 +- packages/fetchai/protocols/state_update/protocol.yaml | 8 ++++---- packages/fetchai/protocols/state_update/serialization.py | 2 +- packages/fetchai/protocols/tac/__init__.py | 2 +- packages/fetchai/protocols/tac/dialogues.py | 2 +- packages/fetchai/protocols/tac/message.py | 2 +- packages/fetchai/protocols/tac/protocol.yaml | 8 ++++---- packages/fetchai/protocols/tac/serialization.py | 2 +- packages/open_aea/protocols/signing/__init__.py | 2 +- packages/open_aea/protocols/signing/dialogues.py | 2 +- packages/open_aea/protocols/signing/message.py | 2 +- packages/open_aea/protocols/signing/protocol.yaml | 8 ++++---- packages/open_aea/protocols/signing/serialization.py | 2 +- packages/packages.json | 8 ++++---- packages/valory/connections/p2p_libp2p/connection.yaml | 2 +- packages/valory/connections/p2p_libp2p/consts.py | 2 +- packages/valory/connections/test_libp2p/connection.yaml | 6 +++--- packages/valory/protocols/acn/__init__.py | 2 +- packages/valory/protocols/acn/dialogues.py | 2 +- packages/valory/protocols/acn/message.py | 2 +- packages/valory/protocols/acn/protocol.yaml | 8 ++++---- packages/valory/protocols/acn/serialization.py | 2 +- packages/valory/protocols/contract_api/__init__.py | 2 +- packages/valory/protocols/contract_api/dialogues.py | 2 +- packages/valory/protocols/contract_api/message.py | 2 +- packages/valory/protocols/contract_api/protocol.yaml | 8 ++++---- packages/valory/protocols/contract_api/serialization.py | 2 +- packages/valory/protocols/http/__init__.py | 2 +- packages/valory/protocols/http/dialogues.py | 2 +- packages/valory/protocols/http/message.py | 2 +- packages/valory/protocols/http/protocol.yaml | 8 ++++---- packages/valory/protocols/http/serialization.py | 2 +- packages/valory/protocols/ledger_api/__init__.py | 2 +- packages/valory/protocols/ledger_api/dialogues.py | 2 +- packages/valory/protocols/ledger_api/message.py | 2 +- packages/valory/protocols/ledger_api/protocol.yaml | 8 ++++---- packages/valory/protocols/ledger_api/serialization.py | 2 +- .../packages/fetchai/protocols/t_protocol/__init__.py | 2 +- .../packages/fetchai/protocols/t_protocol/dialogues.py | 2 +- .../data/packages/fetchai/protocols/t_protocol/message.py | 2 +- .../packages/fetchai/protocols/t_protocol/protocol.yaml | 8 ++++---- .../fetchai/protocols/t_protocol/serialization.py | 2 +- .../fetchai/protocols/t_protocol_no_ct/__init__.py | 2 +- .../fetchai/protocols/t_protocol_no_ct/dialogues.py | 2 +- .../fetchai/protocols/t_protocol_no_ct/message.py | 2 +- .../fetchai/protocols/t_protocol_no_ct/protocol.yaml | 8 ++++---- .../fetchai/protocols/t_protocol_no_ct/serialization.py | 2 +- tests/test_cli/test_check_packages.py | 2 +- 73 files changed, 121 insertions(+), 121 deletions(-) diff --git a/aea/cli/check_packages.py b/aea/cli/check_packages.py index 385df44e92..f81cc68d53 100644 --- a/aea/cli/check_packages.py +++ b/aea/cli/check_packages.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2022-2024 Valory AG +# Copyright 2022-2025 Valory AG # Copyright 2018-2021 Fetch.AI Limited # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/docs/p2p-connection.md b/docs/p2p-connection.md index 94db0615e3..92cd93491c 100644 --- a/docs/p2p-connection.md +++ b/docs/p2p-connection.md @@ -26,7 +26,7 @@ Create one AEA as follows: ``` bash aea create my_genesis_aea cd my_genesis_aea -aea add connection valory/p2p_libp2p:0.1.0:bafybeic2u7azbwjny2nhaltqnbohlvysx3x6ectzbege7sxwrbzcz4lcma --remote +aea add connection valory/p2p_libp2p:0.1.0:bafybeids2klbqpy4jthkicihe2pqhod4auhn5jky7lrmb67if2sbzfmlii --remote aea config set agent.default_connection valory/p2p_libp2p:0.1.0 aea install aea build @@ -58,7 +58,7 @@ Create a second AEA: ``` bash aea create my_other_aea cd my_other_aea -aea add connection valory/p2p_libp2p:0.1.0:bafybeic2u7azbwjny2nhaltqnbohlvysx3x6ectzbege7sxwrbzcz4lcma --remote +aea add connection valory/p2p_libp2p:0.1.0:bafybeids2klbqpy4jthkicihe2pqhod4auhn5jky7lrmb67if2sbzfmlii --remote aea config set agent.default_connection valory/p2p_libp2p:0.1.0 aea install aea build diff --git a/docs/package_list.md b/docs/package_list.md index ccfd4f30b5..4093c3a46f 100644 --- a/docs/package_list.md +++ b/docs/package_list.md @@ -16,12 +16,12 @@ | connection/fetchai/stub/0.21.0 | `bafybeibybboiwgklfiqpkkcw6rwj65s5jalzfzf6mh6fstxdlt6habzwvy` | | connection/valory/ledger/0.19.0 | `bafybeigntoericenpzvwejqfuc3kqzo2pscs76qoygg5dbj6f4zxusru5e` | | connection/valory/http_server/0.22.0 | `bafybeihpgu56ovmq4npazdbh6y6ru5i7zuv6wvdglpxavsckyih56smu7m` | -| connection/valory/p2p_libp2p/0.1.0 | `bafybeic2u7azbwjny2nhaltqnbohlvysx3x6ectzbege7sxwrbzcz4lcma` | -| connection/valory/p2p_libp2p_client/0.1.0 | `bafybeihs5zlwa5wlozct3rjlxsirm3ve3e4buse5nfehiky6ymnnfrobne` | -| connection/valory/p2p_libp2p_mailbox/0.1.0 | `bafybeiecclc65ogngs3piaxpwhiyl77mlpqun5ejlyv4kamwzrrh746guq` | +| connection/valory/p2p_libp2p/0.1.0 | `bafybeids2klbqpy4jthkicihe2pqhod4auhn5jky7lrmb67if2sbzfmlii` | +| connection/valory/p2p_libp2p_client/0.1.0 | `bafybeih7pvq77opagofmt2xfhjgbbxl2y7woyggwkymcbozzmwckniek3u` | +| connection/valory/p2p_libp2p_mailbox/0.1.0 | `bafybeieixcoi3ubueert4byn6tpqesz2b4jnpyn6xz2nieo5ejmrm4qat4` | | connection/fetchai/local/0.20.0 | `bafybeiema4rnxi54luhzbrccb27pfrwlohemka45eqf4nidgmtkwwmxeyi` | | connection/valory/http_client/0.23.0 | `bafybeihi772xgzpqeipp3fhmvpct4y6e6tpjp4sogwqrnf3wqspgeilg4u` | -| connection/valory/test_libp2p/0.1.0 | `bafybeiasj7ppsmn24mes2yw3o72nlmcircscalpl3j5ujzxstknlassa3q` | +| connection/valory/test_libp2p/0.1.0 | `bafybeibor47gcoarv7njyr5zhcgqst3xc6ffbnxpc7rmjixs45oqdvupva` | | skill/fetchai/echo/0.19.0 | `bafybeicoawiackcbgqo3na3e56tpdc62atag4yxknur77py37caqq4mmya` | | skill/fetchai/error_test_skill/0.1.0 | `bafybeihsbtlpe7h6fsvoxban5rilkmwviwkokul5cqym6atoolirontiyu` | | skill/fetchai/gym/0.20.0 | `bafybeie7y2fsxfuhsqxqcaluo5exskmrm5q3a6e2hfcskcuvzvxjjhijh4` | diff --git a/packages/fetchai/protocols/default/__init__.py b/packages/fetchai/protocols/default/__init__.py index 72a457dfb2..f45904c7e2 100644 --- a/packages/fetchai/protocols/default/__init__.py +++ b/packages/fetchai/protocols/default/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/default/dialogues.py b/packages/fetchai/protocols/default/dialogues.py index 818267a9bb..c15163d276 100644 --- a/packages/fetchai/protocols/default/dialogues.py +++ b/packages/fetchai/protocols/default/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/default/message.py b/packages/fetchai/protocols/default/message.py index 7e73e1c8c7..ce1584a443 100644 --- a/packages/fetchai/protocols/default/message.py +++ b/packages/fetchai/protocols/default/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/default/protocol.yaml b/packages/fetchai/protocols/default/protocol.yaml index 0c7797d231..c6a786250d 100644 --- a/packages/fetchai/protocols/default/protocol.yaml +++ b/packages/fetchai/protocols/default/protocol.yaml @@ -8,13 +8,13 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeiaalfafx7ky4iejqpyvm6pm44shf42v2r4ho7xqwm2cr4pym2ujqy - __init__.py: bafybeialwjhitz3luzmjz6dirgwsh4zx7wrab2m3vcetwaioe4ljhkey6q + __init__.py: bafybeia3wtn6pup76kgz73qfpwfib3kkc2b7hytc7il4rdgqgl6grybzky custom_types.py: bafybeidl4g4c5dcouqmhiiv7vcrftx3d6at7ljkhcp5a7rgruphz4gkrxq default.proto: bafybeid2a3fq62vzd7no6bfcq6adpt55kcqpzhktw3fag6s2mp2qajx6te default_pb2.py: bafybeifpgd7it3r45wcpjlu3taitspaq35ayif5cgxubto37rdasarjrl4 - dialogues.py: bafybeicqnskvjkbz44ohv76so54mmef72tfikt5hmhww2hefsy65zkuvyy - message.py: bafybeiaqmdytehxptsg5kktycv2d2hyu23rufv2soyq7by4qwxnf4igzw4 - serialization.py: bafybeifldbauso3lnpanoyguzfg7cmlgmruuizttwxa4aoqapmsx2giu4e + dialogues.py: bafybeihvtcwybnxgaagm5t23zptdflmztgjwa4jrsmbb5dnsl6h7b6pqtm + message.py: bafybeigtffag75tmeqkewcheaaxuo3r5q6picr6nz5hjmlbncjmp5b5p7a + serialization.py: bafybeihcvisidpae6jnz4xjfrwd7w4ymvbwhmcnqba4zh5qnwctvdi27wq tests/__init__.py: bafybeibkpidjsf6nzsd7fgkjzj2mf63xcwb5kua5esbo35x3ojef7dyhm4 tests/test_default.py: bafybeiedwbugubenec4cebkqsbdmwqiggljzj27z4uydhwvekhrf7fuw4e tests/test_default_dialogues.py: bafybeidbeizy46jbnh5imujtscbuhoaafr52lipwpll6jogqb3qckgnlpu diff --git a/packages/fetchai/protocols/default/serialization.py b/packages/fetchai/protocols/default/serialization.py index ea940c8af8..c260bd9212 100644 --- a/packages/fetchai/protocols/default/serialization.py +++ b/packages/fetchai/protocols/default/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/fipa/__init__.py b/packages/fetchai/protocols/fipa/__init__.py index fabbfc50ea..c1f4c803b1 100644 --- a/packages/fetchai/protocols/fipa/__init__.py +++ b/packages/fetchai/protocols/fipa/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/fipa/dialogues.py b/packages/fetchai/protocols/fipa/dialogues.py index e6fc5e713e..8359099aae 100644 --- a/packages/fetchai/protocols/fipa/dialogues.py +++ b/packages/fetchai/protocols/fipa/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/fipa/message.py b/packages/fetchai/protocols/fipa/message.py index 94f9831f0f..b0b2afb7ee 100644 --- a/packages/fetchai/protocols/fipa/message.py +++ b/packages/fetchai/protocols/fipa/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/fipa/protocol.yaml b/packages/fetchai/protocols/fipa/protocol.yaml index 81973977e6..e6988dc7dc 100644 --- a/packages/fetchai/protocols/fipa/protocol.yaml +++ b/packages/fetchai/protocols/fipa/protocol.yaml @@ -8,13 +8,13 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeih776npzene2jytmixiwgq7xmla7yicp5qzqohbk74eewv6c5banu - __init__.py: bafybeibvmrfe36b2kdia3nbyz3y6aut2a7aul3rxshf62kzaxebjkjaxrm + __init__.py: bafybeieof3o7nfckp4jxzmcbhacmse7ksu37matcpuv57ad7c4bp2wfng4 custom_types.py: bafybeihzdd5m6h7y6xghpyzp54ddd6b2id7mj5qeafnnrg23tim45g6b2e - dialogues.py: bafybeiedwxxxvoozzvsei74eypmsxpt7li5pznoomzupzpavyo75jfffei + dialogues.py: bafybeig75dpfj42vqf2kwxn3qhku6qizo6o2omuz4hx7aoa43rb47hikle fipa.proto: bafybeibycv37qg5eesvmptehsg2uydyxh34fa2xiqgtjfqevhn2fg622ca fipa_pb2.py: bafybeiduuzmhzytgq4yktpj4hvrhq626cuur56ic7tayqeu7r6itlxwmse - message.py: bafybeic3bgz7a2zgosgbzmdujv6phbdkv5hho6xigtwqcibabyrcmrdsby - serialization.py: bafybeigbuolf3jjjwybpqfncbfrbwggnxvo4l2pvraylda6v7r6izo72xe + message.py: bafybeid46ldjgzbz3o5bwcspcu2lefc75rnkn4osa24p73eovmueuo7h4q + serialization.py: bafybeie5qeeemqtay7qldshysrojnwxpwk3ccwr643h4vul3peqnvbbc4e tests/__init__.py: bafybeiejmbkzylap7xuv3wbduwwewybasdt6bxq3l3fkaoxazij2rgfre4 tests/test_fipa.py: bafybeihh37hqvueezb56enmpxbithkmboomitt3cxaent6lnlin7ijq5py tests/test_fipa_dialogues.py: bafybeifw4ux7p5o7fxlbj2vhi4wbfrav3xcvtixnattdulthrmqhviiadi diff --git a/packages/fetchai/protocols/fipa/serialization.py b/packages/fetchai/protocols/fipa/serialization.py index 0b45b901a6..bcbe7a5fba 100644 --- a/packages/fetchai/protocols/fipa/serialization.py +++ b/packages/fetchai/protocols/fipa/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/gym/__init__.py b/packages/fetchai/protocols/gym/__init__.py index f42859902e..05e8db4ff4 100644 --- a/packages/fetchai/protocols/gym/__init__.py +++ b/packages/fetchai/protocols/gym/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/gym/dialogues.py b/packages/fetchai/protocols/gym/dialogues.py index c114a3fdee..d46944cdf7 100644 --- a/packages/fetchai/protocols/gym/dialogues.py +++ b/packages/fetchai/protocols/gym/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/gym/message.py b/packages/fetchai/protocols/gym/message.py index 3a55a3fef8..4178b42fc5 100644 --- a/packages/fetchai/protocols/gym/message.py +++ b/packages/fetchai/protocols/gym/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/gym/protocol.yaml b/packages/fetchai/protocols/gym/protocol.yaml index 3290b812b0..e6fbb9b263 100644 --- a/packages/fetchai/protocols/gym/protocol.yaml +++ b/packages/fetchai/protocols/gym/protocol.yaml @@ -8,13 +8,13 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeie6ybbxlmpqad7pgwbeljnw4fmeee7cjipdk52dahnzskwwplknam - __init__.py: bafybeibnxocarwrmndxqe3hppexrlwpbjxwv5f3urcvvhhu46z3f3u23k4 + __init__.py: bafybeia7t46kmgfmmo65bvaleufmsnxpjewbtwavtfw6gvvm7k42h27uqq custom_types.py: bafybeiclim2o6bqe35sbkjpd3y43iokghvytrrh662jenj3ri5ri2p5rpi - dialogues.py: bafybeiap2b3t5lntf3ocjdmk44itp4yantajn22pu5inbi36hvqpuwsoum + dialogues.py: bafybeifvlkpadyzjer3vnsha6o323x7ffmnle336ia7vwtbxw6x452nvue gym.proto: bafybeicnwpnryy7afgbimi5yppie7kdcgiephutu5maxjk63ltg7o77gay gym_pb2.py: bafybeic5acuh4pxo5q33z4vv6ziwwpxkg5cyn2e2a6f2loobj5sikbfwji - message.py: bafybeicdw5oomkznemseczbaqougvxdz6bis7zilfia5xgjev75ffadxlm - serialization.py: bafybeicymbctqkedohktwnpnl6n3xpzu3j37sgw2j3txaf5levhmhj2f4i + message.py: bafybeihbipperk3e6hsjrq6b4bcf7dt6z66chv5qe4ut6ql57yu5tcoyz4 + serialization.py: bafybeieym2hhoqustnwxxa2rsg4e7wregh7yay6wielr6ybglsdcke7jei tests/__init__.py: bafybeidoxwwkwljoz2xsmv7pif3tksdyhl7tgf4s4aao5ypjg4o4hefk7e tests/test_gym.py: bafybeih7jqhs3exvqfbo5et55pdksp6q44q2tq6edjx7mnesm44mgzmnrq tests/test_gym_dialogues.py: bafybeidvzax3rg2y7nyvaxghraqkfbqw4t5rz2dg4gxsfn2v4mkljd6z4q diff --git a/packages/fetchai/protocols/gym/serialization.py b/packages/fetchai/protocols/gym/serialization.py index 14b93d12b8..4e86705b19 100644 --- a/packages/fetchai/protocols/gym/serialization.py +++ b/packages/fetchai/protocols/gym/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/oef_search/__init__.py b/packages/fetchai/protocols/oef_search/__init__.py index 1bf84e87b7..eebddf9263 100644 --- a/packages/fetchai/protocols/oef_search/__init__.py +++ b/packages/fetchai/protocols/oef_search/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/oef_search/dialogues.py b/packages/fetchai/protocols/oef_search/dialogues.py index d7d5403a0a..ec15df4339 100644 --- a/packages/fetchai/protocols/oef_search/dialogues.py +++ b/packages/fetchai/protocols/oef_search/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/oef_search/message.py b/packages/fetchai/protocols/oef_search/message.py index 8377fff122..0e2f5d4a4f 100644 --- a/packages/fetchai/protocols/oef_search/message.py +++ b/packages/fetchai/protocols/oef_search/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/oef_search/protocol.yaml b/packages/fetchai/protocols/oef_search/protocol.yaml index 749d420d8b..6941b3fdb7 100644 --- a/packages/fetchai/protocols/oef_search/protocol.yaml +++ b/packages/fetchai/protocols/oef_search/protocol.yaml @@ -8,13 +8,13 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeibwimlpsr55jdty46gmhzvptw3g4rvmcyobdogdsirwwnglcycw6u - __init__.py: bafybeid6nqidrzeocsravsa7z54uhlkydxm5zt4pu5gf6lat4un7xh6sou + __init__.py: bafybeihxjbwdczfaygeq2elhvfwqjctshzi3qu6bdlijhcx2hd27lfzcby custom_types.py: bafybeihxd2m5g4fi5yr3t2zyvjem7qzu6tyuelecr6siinaur2cqxn4xky - dialogues.py: bafybeigdqzmglfkgvy472t76rfkh6ip4bbqtwon7zzsjte3bl4sibparcu - message.py: bafybeibvelkmc3kipimtm57slhmhtxnqqfrxv5ztf6tcdlzren3nasghx4 + dialogues.py: bafybeifo4qmgkwerfeff2j5q3yagcu44jqkiqcqpm6gciyajqibscajjdm + message.py: bafybeigb3ueji6cxualkbafdefc27o2yspvl6q6ptgx6moqoccdcaooula oef_search.proto: bafybeifvmxnxg4cuxkj64iqeifyv7jl4ihxgsope7p4j74yotedboai7jm oef_search_pb2.py: bafybeiht3pt2xgqmz4tptqlkzf2bus4gqcqkrv7e4was6egbyfydxrbr24 - serialization.py: bafybeiaa66mm3vgcwgbgkbbuvrqryrn7kx7jtofpi6aida6trqgufc2sey + serialization.py: bafybeibdg3awkkpu5yjotvm7mkqrkdkun2gsr3mwjkddqapkfbt7j2z3ya tests/__init__.py: bafybeiebv7wlew4kejoreeddxek6tq3qzejxkxc5kbch5pm4ojvykgd2om tests/test_oef_search.py: bafybeiahbytplglft6nyko3pzufhu4fvjtu2uat5ok5ogzrmdfic6ipaaa tests/test_oef_search_dialogues.py: bafybeidtatsgbixbhvln4jfhbkdvyo6kdq2lec7hagp5vmnqwlpckbgqpe diff --git a/packages/fetchai/protocols/oef_search/serialization.py b/packages/fetchai/protocols/oef_search/serialization.py index 7642c916c7..8da1540cba 100644 --- a/packages/fetchai/protocols/oef_search/serialization.py +++ b/packages/fetchai/protocols/oef_search/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/state_update/__init__.py b/packages/fetchai/protocols/state_update/__init__.py index cebc0d13c2..74db639849 100644 --- a/packages/fetchai/protocols/state_update/__init__.py +++ b/packages/fetchai/protocols/state_update/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/state_update/dialogues.py b/packages/fetchai/protocols/state_update/dialogues.py index b5521037b4..5022992b80 100644 --- a/packages/fetchai/protocols/state_update/dialogues.py +++ b/packages/fetchai/protocols/state_update/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/state_update/message.py b/packages/fetchai/protocols/state_update/message.py index 8808cefefb..53b4e38a6d 100644 --- a/packages/fetchai/protocols/state_update/message.py +++ b/packages/fetchai/protocols/state_update/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/state_update/protocol.yaml b/packages/fetchai/protocols/state_update/protocol.yaml index 3c47da67e0..722cf20953 100644 --- a/packages/fetchai/protocols/state_update/protocol.yaml +++ b/packages/fetchai/protocols/state_update/protocol.yaml @@ -8,10 +8,10 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeieh3nvfgvwdybc7dz44ac3qhleeleaojmwo32o3nticdw24ltdekq - __init__.py: bafybeihg5xposbfnpqkm7jhzafsztnizzw6plxtdxpvds4nzd5m3l7ieuu - dialogues.py: bafybeiet4icgzq3ast2cdkca3t2sdlslvkerpet2ml236xegrsgn5lrtvi - message.py: bafybeiebwe4jw7s7aoyj2ffmm3pqhkshdje7qcenlkyutzjy5gem5kr62u - serialization.py: bafybeihmj2i6c2etiaqo3u2yv4mogdbx6slzfxvjjooikxlaacmku3a45u + __init__.py: bafybeieg4ggjg3r2whylvvktwusukcvlxlqubccpwdzyuk2al46jz45llm + dialogues.py: bafybeif5ltsix2yu6v4xl4leubq77d2wur2r3jx6zu3um54qmxjj7zpoiy + message.py: bafybeih4uurpjzth2sxrqbbgayuvy5d7ilzgprkphdjyhwtzwiokqtlriy + serialization.py: bafybeihdkvucl2mief25dgdu76d3ptfvayhjaaixsy6uy4s2t245llh3tu state_update.proto: bafybeifb4w4hhbfulbsj3uoazthtcywhqkxabhtztwycsx3dtsmq6x43re state_update_pb2.py: bafybeigxg6dl2sgh2ivlu6my5osijmkkd6rl4ntrdzwd5tv7dwf5zdl73m tests/__init__.py: bafybeicf4p3m6qv3qkvd3ahxemeslvkrzjegetayjwrvjoch4ajoqezgpq diff --git a/packages/fetchai/protocols/state_update/serialization.py b/packages/fetchai/protocols/state_update/serialization.py index ba5ca57322..7b7ecde8db 100644 --- a/packages/fetchai/protocols/state_update/serialization.py +++ b/packages/fetchai/protocols/state_update/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/tac/__init__.py b/packages/fetchai/protocols/tac/__init__.py index 6bba9b0130..1d6d86983d 100644 --- a/packages/fetchai/protocols/tac/__init__.py +++ b/packages/fetchai/protocols/tac/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/tac/dialogues.py b/packages/fetchai/protocols/tac/dialogues.py index 9b827235c1..706e2e5cb9 100644 --- a/packages/fetchai/protocols/tac/dialogues.py +++ b/packages/fetchai/protocols/tac/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/tac/message.py b/packages/fetchai/protocols/tac/message.py index 7c634d8a5a..342f407294 100644 --- a/packages/fetchai/protocols/tac/message.py +++ b/packages/fetchai/protocols/tac/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/fetchai/protocols/tac/protocol.yaml b/packages/fetchai/protocols/tac/protocol.yaml index 0e59858eb6..f1a6e02bbf 100644 --- a/packages/fetchai/protocols/tac/protocol.yaml +++ b/packages/fetchai/protocols/tac/protocol.yaml @@ -9,11 +9,11 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeibmlti3bag4zk4o7nhjglt7nrrujpstfudd7pje4qfgofoxq5vbea - __init__.py: bafybeibehidmoismz7u4j465jdodk74xvzd7cmnfigh73prfioi67g3634 + __init__.py: bafybeih3fvms3ym26v3tf5yydqex3xaxn2qwhmblh34oipqeyhjvcqvuzy custom_types.py: bafybeiajzip37odvfonxcalejaxua3un3lzfepk74mltev5jxil4l6t5ae - dialogues.py: bafybeief4svvk7man4vwd3o2ewslu4ax7gkhdvme5qsgxr7htjk5ucqfby - message.py: bafybeieaaldotjxtz6qap54ztiaj755eet7dgb2iyztbdkvw3qydzrknp4 - serialization.py: bafybeiaccxbqcnuuz4hdectqalnky2h7mz6iyc43es55arkizku2r3doyy + dialogues.py: bafybeichvrgqgjztlr6lmvzk2ximvpcrekhk2n6ctj6pchzdgc5lebdzxu + message.py: bafybeiesvw5dqg7vb6vpsawxq2jsw7oh4gzefvotm3gm2irrf2rz7rinfe + serialization.py: bafybeidi7yzsopptepdfa7qn7zhllhfooktlzexhcz6kxdqtlxpzqdphnu tac.proto: bafybeig5yaqdqk5vzxibwbfkmd2oqsty4nsyhjihphjtq6q3ht7lyc334u tac_pb2.py: bafybeialt4qutqgzcmqbvc7puewz5usf7gl3mewpyn5ren4ocz2odrqkdi tests/__init__.py: bafybeigio4dcbzdb4zxbycaredo4l4a72z4rk6wt5bbvubhu6fdj73t6oe diff --git a/packages/fetchai/protocols/tac/serialization.py b/packages/fetchai/protocols/tac/serialization.py index 96d2a38bf8..666051d5b6 100644 --- a/packages/fetchai/protocols/tac/serialization.py +++ b/packages/fetchai/protocols/tac/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/open_aea/protocols/signing/__init__.py b/packages/open_aea/protocols/signing/__init__.py index f202d96566..453a8a89e2 100644 --- a/packages/open_aea/protocols/signing/__init__.py +++ b/packages/open_aea/protocols/signing/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 open_aea +# Copyright 2025 open_aea # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/open_aea/protocols/signing/dialogues.py b/packages/open_aea/protocols/signing/dialogues.py index 49fc21248c..4870dfe03e 100644 --- a/packages/open_aea/protocols/signing/dialogues.py +++ b/packages/open_aea/protocols/signing/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 open_aea +# Copyright 2025 open_aea # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/open_aea/protocols/signing/message.py b/packages/open_aea/protocols/signing/message.py index c11b7ea249..9732ffb41e 100644 --- a/packages/open_aea/protocols/signing/message.py +++ b/packages/open_aea/protocols/signing/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 open_aea +# Copyright 2025 open_aea # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/open_aea/protocols/signing/protocol.yaml b/packages/open_aea/protocols/signing/protocol.yaml index 67aa31c87f..d127463d11 100644 --- a/packages/open_aea/protocols/signing/protocol.yaml +++ b/packages/open_aea/protocols/signing/protocol.yaml @@ -8,11 +8,11 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeictzqfrs3zlpmirbelejsenkupesqh7nkjncbopkmamk7dkersmrm - __init__.py: bafybeiarl4y6yah6cypjp2jqvlcpexpkt6zcgtcs67a6wsur7ncqa6u7d4 + __init__.py: bafybeicf7hlkwenhd4l4ezz4emrhzn22oi54fo6oyoc23ivrkznlz6m3za custom_types.py: bafybeicbmroddjj6xvtoi6k6d2mt7iqr3uwxvhwt3ecpy5ze52ffc6i7bq - dialogues.py: bafybeiblb6pmkl3rluy27rn5525yvmkitcdpkb2a52byn2l7jsafsnnye4 - message.py: bafybeibwldxym64enuo55bzlhb64i34e4hnncstyj2tpnei5gcyrrww3h4 - serialization.py: bafybeialbbd7zxf6e2jekr6lev5gznux5wf3ivbiqsangwznkjyozfep2a + dialogues.py: bafybeihp66yugpu3gohrj7vwkghmy2di3wy2nzfveczenhebp7egfksa5m + message.py: bafybeibjq6sl4tjr4cgczzjoawm7aprv6t4obp56y7obegu4aknjxtyrku + serialization.py: bafybeicnwsu3ria24eagidoai6sb776xpedesed6se5auy6dbsou7p2ijq signing.proto: bafybeigbzr6x5wdmqzc7eanlz5xmvaoiwb4kwozgg3cugq63b7esicusra signing_pb2.py: bafybeig5sfgd3zkclg4fwfpkq7mfh2vtv27jjgpmlzrnk2ti2po5ciysiq tests/__init__.py: bafybeiaraxpv2z6r4e5rgmvnvdfv5rlrjdwbhqyjocxm2z2wkzpluezdey diff --git a/packages/open_aea/protocols/signing/serialization.py b/packages/open_aea/protocols/signing/serialization.py index 5526c6bbf1..23dac5402f 100644 --- a/packages/open_aea/protocols/signing/serialization.py +++ b/packages/open_aea/protocols/signing/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 open_aea +# Copyright 2025 open_aea # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/packages.json b/packages/packages.json index 80e2f7747d..ff499482d5 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -16,12 +16,12 @@ "connection/fetchai/stub/0.21.0": "bafybeibybboiwgklfiqpkkcw6rwj65s5jalzfzf6mh6fstxdlt6habzwvy", "connection/valory/ledger/0.19.0": "bafybeigntoericenpzvwejqfuc3kqzo2pscs76qoygg5dbj6f4zxusru5e", "connection/valory/http_server/0.22.0": "bafybeihpgu56ovmq4npazdbh6y6ru5i7zuv6wvdglpxavsckyih56smu7m", - "connection/valory/p2p_libp2p/0.1.0": "bafybeic2u7azbwjny2nhaltqnbohlvysx3x6ectzbege7sxwrbzcz4lcma", - "connection/valory/p2p_libp2p_client/0.1.0": "bafybeihs5zlwa5wlozct3rjlxsirm3ve3e4buse5nfehiky6ymnnfrobne", - "connection/valory/p2p_libp2p_mailbox/0.1.0": "bafybeiecclc65ogngs3piaxpwhiyl77mlpqun5ejlyv4kamwzrrh746guq", + "connection/valory/p2p_libp2p/0.1.0": "bafybeids2klbqpy4jthkicihe2pqhod4auhn5jky7lrmb67if2sbzfmlii", + "connection/valory/p2p_libp2p_client/0.1.0": "bafybeih7pvq77opagofmt2xfhjgbbxl2y7woyggwkymcbozzmwckniek3u", + "connection/valory/p2p_libp2p_mailbox/0.1.0": "bafybeieixcoi3ubueert4byn6tpqesz2b4jnpyn6xz2nieo5ejmrm4qat4", "connection/fetchai/local/0.20.0": "bafybeiema4rnxi54luhzbrccb27pfrwlohemka45eqf4nidgmtkwwmxeyi", "connection/valory/http_client/0.23.0": "bafybeihi772xgzpqeipp3fhmvpct4y6e6tpjp4sogwqrnf3wqspgeilg4u", - "connection/valory/test_libp2p/0.1.0": "bafybeiasj7ppsmn24mes2yw3o72nlmcircscalpl3j5ujzxstknlassa3q", + "connection/valory/test_libp2p/0.1.0": "bafybeibor47gcoarv7njyr5zhcgqst3xc6ffbnxpc7rmjixs45oqdvupva", "skill/fetchai/echo/0.19.0": "bafybeicoawiackcbgqo3na3e56tpdc62atag4yxknur77py37caqq4mmya", "skill/fetchai/error_test_skill/0.1.0": "bafybeihsbtlpe7h6fsvoxban5rilkmwviwkokul5cqym6atoolirontiyu", "skill/fetchai/gym/0.20.0": "bafybeie7y2fsxfuhsqxqcaluo5exskmrm5q3a6e2hfcskcuvzvxjjhijh4", diff --git a/packages/valory/connections/p2p_libp2p/connection.yaml b/packages/valory/connections/p2p_libp2p/connection.yaml index f7657d5ee3..abd69ec72e 100644 --- a/packages/valory/connections/p2p_libp2p/connection.yaml +++ b/packages/valory/connections/p2p_libp2p/connection.yaml @@ -12,7 +12,7 @@ fingerprint: __init__.py: bafybeibtknmpggpj77fflwndllcqvvbolpds7doymdp4fjd277metq6oxy check_dependencies.py: bafybeiglc4wx26doygocmmaqfy6xgcbbmhaznr5gbngiv4p2e34zhjwrwa connection.py: bafybeifc2mkdsnyeygnri3xp52fgq475rmpqqlhbfsfjaef5uvhaduutvu - consts.py: bafybeia3ye6my7hgpmaz2km55brhae6qbkgnqo2wniao4hflgzanfda3rq + consts.py: bafybeianqdeyebcbjik346lpecmjxc4rnmunvmygx3xpct6m5laniog5ui libp2p_node/Makefile: bafybeieuy4mut3oz2aqhtgt3dtky23do7g7tjg6fni4e256i3zg2onzmim libp2p_node/README.md: bafybeibke3cczx7lh4cmu4w6ofggrkm32mdzj6isjq4xo7isjproqg3y4y libp2p_node/acn/utils.go: bafybeiaftfq27ykd5kc3qauchb3vmnt6pt5jxzmsfykes4b4wptojtdhb4 diff --git a/packages/valory/connections/p2p_libp2p/consts.py b/packages/valory/connections/p2p_libp2p/consts.py index 5d3e147bc0..436b077735 100644 --- a/packages/valory/connections/p2p_libp2p/consts.py +++ b/packages/valory/connections/p2p_libp2p/consts.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2022-2024 Valory AG +# Copyright 2022-2025 Valory AG # Copyright 2018-2021 Fetch.AI Limited # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/packages/valory/connections/test_libp2p/connection.yaml b/packages/valory/connections/test_libp2p/connection.yaml index e8df596ec9..fe6ff297a4 100644 --- a/packages/valory/connections/test_libp2p/connection.yaml +++ b/packages/valory/connections/test_libp2p/connection.yaml @@ -34,9 +34,9 @@ fingerprint: tests/test_p2p_libp2p_mailbox/test_mailbox_service.py: bafybeibp3bkwkrw57qahvuysjdlumywtlk3te5gsvusgrvhsc75k7rrk4u fingerprint_ignore_patterns: [] connections: -- valory/p2p_libp2p:0.1.0:bafybeic2u7azbwjny2nhaltqnbohlvysx3x6ectzbege7sxwrbzcz4lcma -- valory/p2p_libp2p_client:0.1.0:bafybeihs5zlwa5wlozct3rjlxsirm3ve3e4buse5nfehiky6ymnnfrobne -- valory/p2p_libp2p_mailbox:0.1.0:bafybeiecclc65ogngs3piaxpwhiyl77mlpqun5ejlyv4kamwzrrh746guq +- valory/p2p_libp2p:0.1.0:bafybeids2klbqpy4jthkicihe2pqhod4auhn5jky7lrmb67if2sbzfmlii +- valory/p2p_libp2p_client:0.1.0:bafybeih7pvq77opagofmt2xfhjgbbxl2y7woyggwkymcbozzmwckniek3u +- valory/p2p_libp2p_mailbox:0.1.0:bafybeieixcoi3ubueert4byn6tpqesz2b4jnpyn6xz2nieo5ejmrm4qat4 protocols: - fetchai/default:1.0.0:bafybeihdvtmnz7fzy7kwi3wlo6rfl27f6q3g5entplgvq7y23i3v5uoz24 - valory/acn:1.1.0:bafybeidluaoeakae3exseupaea4i3yvvk5vivyt227xshjlffywwxzcxqe diff --git a/packages/valory/protocols/acn/__init__.py b/packages/valory/protocols/acn/__init__.py index 6d72792dc4..280d0ba3ba 100644 --- a/packages/valory/protocols/acn/__init__.py +++ b/packages/valory/protocols/acn/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/acn/dialogues.py b/packages/valory/protocols/acn/dialogues.py index 90b88ea30f..17ade518b7 100644 --- a/packages/valory/protocols/acn/dialogues.py +++ b/packages/valory/protocols/acn/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/acn/message.py b/packages/valory/protocols/acn/message.py index 5ef50253ed..2ed199c3d2 100644 --- a/packages/valory/protocols/acn/message.py +++ b/packages/valory/protocols/acn/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/acn/protocol.yaml b/packages/valory/protocols/acn/protocol.yaml index 2062cfb934..1a42304be8 100644 --- a/packages/valory/protocols/acn/protocol.yaml +++ b/packages/valory/protocols/acn/protocol.yaml @@ -8,13 +8,13 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeie7paijucvzemlfhwfmmhorypwuhzbeimgoitlkokdio5c3ne4pjq - __init__.py: bafybeicqlp4gkeeef5osp6zopjztlgat24nxrzq43cy7wbwxk5omf2sc2m + __init__.py: bafybeifb7xujieda2zxji2foegdiz4o2px7egjqi6vil23vto6f6s44epm acn.proto: bafybeidkun7o75sxpyk2sixt7dsykgty62f6dnixnes2irbunyamilqsh4 acn_pb2.py: bafybeialafz3yomunwa3g5xgrdqwodzl7zg5dncvzuetv7xoew4zhw76ni custom_types.py: bafybeigpueuq6mdeyjyayzv3menkmemutfgfiwlozlpl64t67cfnnom24q - dialogues.py: bafybeidjpyk7s3getyfegjdrgrt5blf2yutzqclohaktjehwcj3sqx2ole - message.py: bafybeiai7kond3rcbtwnr5xgpwzuauf5tusuep6ikopi4cqvp2wa5qfz3e - serialization.py: bafybeidu7fzixk6sm3iprhph4shbiq5qgvg56lg4yiryfaf3unuqk34bwi + dialogues.py: bafybeigvdruaxbl263wzl4xejt755rcnrzslt42ljrnofkvnh7ff4mw3ea + message.py: bafybeicdmrtggkocgwullfs66rywaoaj7oy25psbutnp56bx4u5e4hml3y + serialization.py: bafybeidc2tdzom2v52prplkxfwu5ylty7n26kxo6uupvplddqsz4k3keae tests/__init__.py: bafybeidteufp2npjd77ekcftk5e4gbaquq3gike5nxtk5xfmnusls56keu tests/test_acn.py: bafybeignjgdtlfdnj25hc5necmg7zl3kvngsmzkjgcwfm5qg36liqa63ki tests/test_acn_dialogues.py: bafybeia2kndutaokjpogo4wlb5pf4gkqacvcbngqromf4g4mzu6wyetz7q diff --git a/packages/valory/protocols/acn/serialization.py b/packages/valory/protocols/acn/serialization.py index 4bf68c3218..6ef1b72fbe 100644 --- a/packages/valory/protocols/acn/serialization.py +++ b/packages/valory/protocols/acn/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/contract_api/__init__.py b/packages/valory/protocols/contract_api/__init__.py index 700b8ef278..b79a29dab6 100644 --- a/packages/valory/protocols/contract_api/__init__.py +++ b/packages/valory/protocols/contract_api/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/contract_api/dialogues.py b/packages/valory/protocols/contract_api/dialogues.py index 5b9f534f64..1c8b9d52db 100644 --- a/packages/valory/protocols/contract_api/dialogues.py +++ b/packages/valory/protocols/contract_api/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/contract_api/message.py b/packages/valory/protocols/contract_api/message.py index 1b68bc22e9..6ecde7bd32 100644 --- a/packages/valory/protocols/contract_api/message.py +++ b/packages/valory/protocols/contract_api/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/contract_api/protocol.yaml b/packages/valory/protocols/contract_api/protocol.yaml index 8938192bda..17706735d3 100644 --- a/packages/valory/protocols/contract_api/protocol.yaml +++ b/packages/valory/protocols/contract_api/protocol.yaml @@ -8,13 +8,13 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeigaihpzixjv56vbuch6yqk5shzevt3rlpvchgqudmztid5mgchlqy - __init__.py: bafybeifxn7w75gxufl4ekvk27qo3tkxetdvxxnqmhq5gtnhjyvlhn3i6yu + __init__.py: bafybeibgimc4jrl3q5smgq62fq6vpiinihhsrhlp67cjjrqldtjfxp4owm contract_api.proto: bafybeiafpnyivdogs7omw2bxxxkmnbqcl3n32oqbzug65p7jimbeubgljy contract_api_pb2.py: bafybeibjspkls7zjf7x4on2sm2274r355xzodgv3e54ueopz4vgpvg5owa custom_types.py: bafybeiawof5bblaefwui5wgsou2ohvrxi2zrkdthehiet57qguplzsgrhu - dialogues.py: bafybeictadz75pczogizyglzklbk4mf76zoh6we66ras4stntz5dwzi7du - message.py: bafybeid75ybjywwslz7jwsng4aosfejutesj6jffkmrpdy5jg4oluwn5hm - serialization.py: bafybeie56ahly26zco47a7dg6umysqy6ygle65lebmwekstbiwmym62p7i + dialogues.py: bafybeicoda7fvthowpv5wq642u7l6fawxeg4vz4ss4upszfynbzphxu3mq + message.py: bafybeifjgcyrhosn4ki6oo3425yetjiolkqkoilir3vngpfjhhboff5nvy + serialization.py: bafybeiel5h3vawmscxhtxvumrewaxvyuw7xktlayl3imc7q65t5edkmoii tests/__init__.py: bafybeicc5zmsziu4r5dwjnhckfbgnwbgydn7ekeyqsestutq2tusajqzmu tests/test_contract_api.py: bafybeigszksq7bxi3skvw3zvpatkltgbnvnfatofjn63xnd5xds33iyni4 tests/test_contract_api_dialogues.py: bafybeifalicqk4g44sl5dpeuvls5dqtyfdgc6nwyuf5cl4fofis7fr3mnq diff --git a/packages/valory/protocols/contract_api/serialization.py b/packages/valory/protocols/contract_api/serialization.py index c8aeaad9d8..cb06c3035d 100644 --- a/packages/valory/protocols/contract_api/serialization.py +++ b/packages/valory/protocols/contract_api/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/http/__init__.py b/packages/valory/protocols/http/__init__.py index 73442b6760..0c4cd563d5 100644 --- a/packages/valory/protocols/http/__init__.py +++ b/packages/valory/protocols/http/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/http/dialogues.py b/packages/valory/protocols/http/dialogues.py index c8b68e4166..0527b34e5e 100644 --- a/packages/valory/protocols/http/dialogues.py +++ b/packages/valory/protocols/http/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/http/message.py b/packages/valory/protocols/http/message.py index 44dcec3b15..1e1ff5b845 100644 --- a/packages/valory/protocols/http/message.py +++ b/packages/valory/protocols/http/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/http/protocol.yaml b/packages/valory/protocols/http/protocol.yaml index 0246138d03..0aa8b19b26 100644 --- a/packages/valory/protocols/http/protocol.yaml +++ b/packages/valory/protocols/http/protocol.yaml @@ -8,12 +8,12 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeihkatpicz56ofrvu5fgks7ecrsfzw5toz23o23yvoymhk6l6hl7dy - __init__.py: bafybeidjcefjfitptbesnqxuq2yyl3v6eh3ng7qx3xk5wlpjbg6pzoca7q - dialogues.py: bafybeiepab5wdmdfevelxcpaky6znmc3wjb6kezwe7c55dp6d4lpiw7zuy + __init__.py: bafybeiaunocsisejjcb7uae7fh5xgiuyvr7rtixpew7qlp2tz442zhxhcu + dialogues.py: bafybeigo4wsehjjuppdo75fyb33r6ykuwxjsdfjrlhz6kfmh3py2yqoguq http.proto: bafybeigq6ykgxdqi4m65x3rcj4ehdm3usaisejzl2oisn6kzkjits3fzkq http_pb2.py: bafybeibvqp664j4iaozk2hyotmd7gzsyknk4dt3mcddniuzdvdxhtkjcoq - message.py: bafybeifnffq6yjisyew6oodtbpaiqsmiruiljr4ihydhlqvlhgwl2hx7qe - serialization.py: bafybeidujjt46tdrooo6fjppax7b2qstmb62gfafd6r6uydb7mpnw6ukyi + message.py: bafybeialkadryevi2xfny4ijfe6ecg37lt72gqa666sn3sk727fxpkcmsi + serialization.py: bafybeie2g2yb3asbvkpfa5zgpm4is2hejx6ypj3yqzciav6xowb6njtaou tests/__init__.py: bafybeifitr3wqclw3kammd2fw5zww6gvzbvu6s72di2p7544qfisuslhpq tests/test_http.py: bafybeibbz5zcqmqsvtwp2rucj2ubbbazmqt3shpjnkt5bdhnlclqy4fseq tests/test_http_dialogues.py: bafybeic22z3aatytdx3cxrtzt3hqwwhxlnaal6sn7grm3cn5k7ycq5v46y diff --git a/packages/valory/protocols/http/serialization.py b/packages/valory/protocols/http/serialization.py index 7dd42a23d3..da3252b161 100644 --- a/packages/valory/protocols/http/serialization.py +++ b/packages/valory/protocols/http/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/ledger_api/__init__.py b/packages/valory/protocols/ledger_api/__init__.py index 21b4d25925..9c87c35136 100644 --- a/packages/valory/protocols/ledger_api/__init__.py +++ b/packages/valory/protocols/ledger_api/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/ledger_api/dialogues.py b/packages/valory/protocols/ledger_api/dialogues.py index d086502748..80199189de 100644 --- a/packages/valory/protocols/ledger_api/dialogues.py +++ b/packages/valory/protocols/ledger_api/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/ledger_api/message.py b/packages/valory/protocols/ledger_api/message.py index 37e5606a73..0d99cff392 100644 --- a/packages/valory/protocols/ledger_api/message.py +++ b/packages/valory/protocols/ledger_api/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/valory/protocols/ledger_api/protocol.yaml b/packages/valory/protocols/ledger_api/protocol.yaml index 5d767dca8c..2effb430df 100644 --- a/packages/valory/protocols/ledger_api/protocol.yaml +++ b/packages/valory/protocols/ledger_api/protocol.yaml @@ -8,13 +8,13 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeieviyxw7rq2fxq74c2fq2vv4qsyvxvioyke6wlz3m7ubfgxvebica - __init__.py: bafybeigxgphnez54c6elal3mfgdxwv3el36srmvblkec6sfpt6hcrcexsq + __init__.py: bafybeibfvmxy5raxuvodfvgzwavcdcr6zvmvvivi5gxjaph2tcvsyqhb6e custom_types.py: bafybeiefoqbszkmctw6fep4pot6rdlm4irfy2dydoihlcb7g6i3v47gu4m - dialogues.py: bafybeiaeulvhvizadautscwbf2mi4uw6gdyh3fe36mixgoyy4wnofexebu + dialogues.py: bafybeigpoxtmrbctfktm2focxqui3grn7ovfhu73neblux5wxhc3bzsluu ledger_api.proto: bafybeidsmls6jcbeqv4kokizh3kvwzrlae2penr7ntungtosk6m4lxzd4u ledger_api_pb2.py: bafybeib6kxlzndw5766nxmwfaqurybwjkw3u3uvowe7vn5h4ljsik2l3xu - message.py: bafybeietvabblvsj4nd3zkf2wtnyt2a7bijjygtjxbzndf3h7ng4sfvb44 - serialization.py: bafybeicbpsrxxk5zohsm642gtryhyebdn7lvrfrgika74lg3w6vxns7afq + message.py: bafybeibotc3vvrddwuovuhnbh6oam5dd5nuilbp6cqaybg2dxitncendym + serialization.py: bafybeie35edrilqyduj6lvn2dkp7xfcxza5is3zsj2uagm3zefs4qgamqq tests/__init__.py: bafybeih2pvd62uql4qcvrrzqx6evsuu3apqok6wu63qq4r5qm3rikbfsmy tests/test_ledger_api.py: bafybeiayvznmhqqy66rfqffyurysjc5jfp3bywhcv4zfvwr7kdwj25qjpa tests/test_ledger_api_dialogues.py: bafybeiaq4ia6kvbwblyyuq7l64vwlluf57lpdkfddohbkbf2osiolrjeku diff --git a/packages/valory/protocols/ledger_api/serialization.py b/packages/valory/protocols/ledger_api/serialization.py index ebc2e6132a..90df6b3d6a 100644 --- a/packages/valory/protocols/ledger_api/serialization.py +++ b/packages/valory/protocols/ledger_api/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 valory +# Copyright 2025 valory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tests/data/packages/fetchai/protocols/t_protocol/__init__.py b/tests/data/packages/fetchai/protocols/t_protocol/__init__.py index 47ecf34f85..ef7c3d0be0 100644 --- a/tests/data/packages/fetchai/protocols/t_protocol/__init__.py +++ b/tests/data/packages/fetchai/protocols/t_protocol/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tests/data/packages/fetchai/protocols/t_protocol/dialogues.py b/tests/data/packages/fetchai/protocols/t_protocol/dialogues.py index dc90598864..b594ff1089 100644 --- a/tests/data/packages/fetchai/protocols/t_protocol/dialogues.py +++ b/tests/data/packages/fetchai/protocols/t_protocol/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tests/data/packages/fetchai/protocols/t_protocol/message.py b/tests/data/packages/fetchai/protocols/t_protocol/message.py index a24a4a4a49..44f08ea405 100644 --- a/tests/data/packages/fetchai/protocols/t_protocol/message.py +++ b/tests/data/packages/fetchai/protocols/t_protocol/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tests/data/packages/fetchai/protocols/t_protocol/protocol.yaml b/tests/data/packages/fetchai/protocols/t_protocol/protocol.yaml index 9e1e77a72e..8649a465ad 100644 --- a/tests/data/packages/fetchai/protocols/t_protocol/protocol.yaml +++ b/tests/data/packages/fetchai/protocols/t_protocol/protocol.yaml @@ -8,11 +8,11 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeib74jwgkmfjbcpson5lbh2gefkybu23bm46j7jkzeep4rbe5x276m - __init__.py: bafybeihfrjpz2pqkox3m44zz6lcfk7rtg6vozbliuptp3zcukmir5sqvni + __init__.py: bafybeieib4mc5uuee4kvdrbiine7cetpx3gvqqngvfzscbf3vs3rixiagi custom_types.py: bafybeiaqxtoq6b4xnve3p2uiw55povolzg3yon3ptvzxbeg2wtssiumxkq - dialogues.py: bafybeidtme5fqmciwdfqm7ilw6p74bahlmtsetp26lx2pzaqr32fmq7j7m - message.py: bafybeifjhdnxtci6fxuuwwm4unwcluu7mpv4n75utg6j6w4c2hdros7tce - serialization.py: bafybeiarjk2lfqcgjbpyuow3zzfwsujx6dgjseryobor2qc66sy6lmfh7y + dialogues.py: bafybeiam6ebctbk7liv3tyfzk7lgmhthpxjnmbgpf7ladmhyn3d3z76mca + message.py: bafybeihtw7zyb5kcez6hvyxiogdjaynrztat7bjs5fawbij5qshdckmluy + serialization.py: bafybeib2ogtr4m3zirbcmrlgqm6xdvyj4kd47t5wh5hq7mddyhhwayyt3y t_protocol.proto: bafybeiapaievom3jzw3vjdzcoo3bok7tecznwgccbbjc6thmseeww5fp2m t_protocol_pb2.py: bafybeicbg2hmmd776v3m7bir5iwm6rtmawei54vwcvaf2ozmp4shza4sra tests/test_t_protocol_dialogues.py: bafybeidxzkiqbbyo5zu37udk6v6jcwrvwsm6eqznurvmljxjia7xk3qgcy diff --git a/tests/data/packages/fetchai/protocols/t_protocol/serialization.py b/tests/data/packages/fetchai/protocols/t_protocol/serialization.py index efeba4c801..1433278290 100644 --- a/tests/data/packages/fetchai/protocols/t_protocol/serialization.py +++ b/tests/data/packages/fetchai/protocols/t_protocol/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tests/data/packages/fetchai/protocols/t_protocol_no_ct/__init__.py b/tests/data/packages/fetchai/protocols/t_protocol_no_ct/__init__.py index e04620769e..f9d2f9914b 100644 --- a/tests/data/packages/fetchai/protocols/t_protocol_no_ct/__init__.py +++ b/tests/data/packages/fetchai/protocols/t_protocol_no_ct/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tests/data/packages/fetchai/protocols/t_protocol_no_ct/dialogues.py b/tests/data/packages/fetchai/protocols/t_protocol_no_ct/dialogues.py index c2d5f29d4c..501e130724 100644 --- a/tests/data/packages/fetchai/protocols/t_protocol_no_ct/dialogues.py +++ b/tests/data/packages/fetchai/protocols/t_protocol_no_ct/dialogues.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tests/data/packages/fetchai/protocols/t_protocol_no_ct/message.py b/tests/data/packages/fetchai/protocols/t_protocol_no_ct/message.py index e2a2108c2d..1c5081f870 100644 --- a/tests/data/packages/fetchai/protocols/t_protocol_no_ct/message.py +++ b/tests/data/packages/fetchai/protocols/t_protocol_no_ct/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tests/data/packages/fetchai/protocols/t_protocol_no_ct/protocol.yaml b/tests/data/packages/fetchai/protocols/t_protocol_no_ct/protocol.yaml index 9b800dbecd..ee7de87507 100644 --- a/tests/data/packages/fetchai/protocols/t_protocol_no_ct/protocol.yaml +++ b/tests/data/packages/fetchai/protocols/t_protocol_no_ct/protocol.yaml @@ -8,10 +8,10 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: README.md: bafybeiapuowiqkverwcuzbdbqf2u3aixc3vgcfzsy6ckl27m5dxwtmaz3e - __init__.py: bafybeiaw2xv64eo5vrkgzuseotzkzciaos7ai5whwqrne357wcjn3wxnli - dialogues.py: bafybeiheegdd4plet6w2qs4spyyf4757glckd4d55vp5ihyie3hrtjewii - message.py: bafybeihvnaglqsg5ovzjcqfn6cbn2lg47qbwjdusdlx6x6wzfa2bkhtai4 - serialization.py: bafybeibaejybksikjc4ydq5xdrmp5xnarz34nghbbudhj26zbeigqdghaa + __init__.py: bafybeihbj3lbm5o7i4xvkig5vh5pfyxbnkehwl2vzrie6tz73sagkdipva + dialogues.py: bafybeihtlklqgnmtwl5dgryer3cygzg2r6lpbpad2wr2cu4i5loxxa5lle + message.py: bafybeih53jdc4q6rmiviyjo6x5py6rcl4vd4yj4m5yuwo5cl5sjfdloqlm + serialization.py: bafybeiauj2bfuxjzalgh75yjzrrha45gbxkaif572o4ztv55ppdyj5qfc4 t_protocol_no_ct.proto: bafybeietptuflcrk6bh3zc4kn5efqt2ygpmtmpv66m7pmkmf3renn3yujy t_protocol_no_ct_pb2.py: bafybeicpanqktvtfjkigvgp65qja7xewlxsuxqcrkximns3nsiry5bqmmy tests/test_t_protocol_no_ct_dialogues.py: bafybeiaxlzdqlexxvdexe6kjom3zgweqe4yofl55fvnff2ym6a5ourbaxa diff --git a/tests/data/packages/fetchai/protocols/t_protocol_no_ct/serialization.py b/tests/data/packages/fetchai/protocols/t_protocol_no_ct/serialization.py index 3f3c6a4f17..fae0161180 100644 --- a/tests/data/packages/fetchai/protocols/t_protocol_no_ct/serialization.py +++ b/tests/data/packages/fetchai/protocols/t_protocol_no_ct/serialization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2024 fetchai +# Copyright 2025 fetchai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tests/test_cli/test_check_packages.py b/tests/test_cli/test_check_packages.py index f7f94e73df..3efec45a36 100644 --- a/tests/test_cli/test_check_packages.py +++ b/tests/test_cli/test_check_packages.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2021-2023 Valory AG +# Copyright 2021-2025 Valory AG # Copyright 2018-2019 Fetch.AI Limited # # Licensed under the Apache License, Version 2.0 (the "License"); From 4722ed9cb96be27d9f8d991c7507584c338a285c Mon Sep 17 00:00:00 2001 From: Adamantios Date: Tue, 7 Jan 2025 18:02:39 +0200 Subject: [PATCH 6/8] fix: license check's false positive Here is the license: https://github.com/python-attrs/attrs/blob/24.3.0/LICENSE However, the tool was reporting `UNKNOWN` license before authorizing it explicitly in the `strategy.ini`: ``` gathering licenses... 34 packages and dependencies. check authorized packages... 33 packages. check unknown packages... 1 package. attrs (24.3.0): UNKNOWN dependencies: attrs << jsonschema << open-aea attrs << pytest ``` --- strategy.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/strategy.ini b/strategy.ini index df1e24b1fe..81228813a6 100644 --- a/strategy.ini +++ b/strategy.ini @@ -91,3 +91,5 @@ filelock: >=3.0.12 fetchai-ledger-api: >=0.0.1 chardet: >=3.0.4 certifi: >=2019.11.28 +; licence is MIT, but the tool does not detect it +attrs: ==24.3.0 From 4a05271e0414d4ce884282174811850536d1a173 Mon Sep 17 00:00:00 2001 From: Adamantios Date: Tue, 7 Jan 2025 19:12:31 +0200 Subject: [PATCH 7/8] fix: downgrade go version for the `aealite` style check --- .github/workflows/workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 5b35492538..d3d11dbd57 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -54,7 +54,7 @@ jobs: python-version: "3.10" - uses: actions/setup-go@v5.2.0 with: - go-version: '1.20.0' + go-version: '1.17.7' - name: Install dependencies (ubuntu-latest) run: | sudo apt-get update --fix-missing From 98eb89855992f7d8c25053baa68316115684ce4d Mon Sep 17 00:00:00 2001 From: Adamantios Date: Tue, 7 Jan 2025 20:18:17 +0200 Subject: [PATCH 8/8] chore: update version in `test_click_version` --- tests/test_test_tools/test_click_testing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_test_tools/test_click_testing.py b/tests/test_test_tools/test_click_testing.py index fb7c1594a2..729902bfbe 100644 --- a/tests/test_test_tools/test_click_testing.py +++ b/tests/test_test_tools/test_click_testing.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # -# Copyright 2022-2024 Valory AG +# Copyright 2022-2025 Valory AG # Copyright 2018-2020 Fetch.AI Limited # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -105,7 +105,7 @@ def test_click_version(): When this tests fails you need to ensure that the current versions implementation of the click.testing.CliRunner remains compatible with our monkey-patched version """ - assert click.__version__ == "8.1.7", message + assert click.__version__ == "8.1.8", message @pytest.mark.parametrize("mix_stderr", [True, False])