diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 32193c22b..aa0b1d9be 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -301,19 +301,20 @@ jobs: - if: | github.event_name == 'release' || - (github.event_name == 'workflow_dispatch' && github.event.inputs.publish-python-wrapper == 'true') - name: Publish + (github.event_name == 'workflow_dispatch' && github.event.inputs.publish-python-wrapper == 'true') || + github.event_name == 'pull_request' + name: Publish to TestPyPI env: - TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} - TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + TWINE_USERNAME: ${{ secrets.TEST_PYPI_USERNAME }} + TWINE_PASSWORD: ${{ secrets.TEST_PYPI_PASSWORD }} run: | - twine upload --skip-existing dist/* + twine upload --repository-url https://test.pypi.org/legacy/ --skip-existing dist/* working-directory: wrappers/python build-javascript: name: Build and test JavaScript wrapper needs: [build-release] - + strategy: matrix: architecture: @@ -327,7 +328,7 @@ jobs: architecture: darwin-universal runs-on: ${{ matrix.os }} - + defaults: run: working-directory: wrappers/javascript @@ -594,4 +595,4 @@ jobs: || contains(needs.*.result, 'cancelled') || contains(needs.*.result, 'skipped') }} - run: exit 1 + run: exit 1 \ No newline at end of file diff --git a/src/ffi/store.rs b/src/ffi/store.rs index b9b6fb684..d42ebbd48 100644 --- a/src/ffi/store.rs +++ b/src/ffi/store.rs @@ -470,6 +470,7 @@ pub extern "C" fn askar_store_copy( key_method: FfiStr<'_>, pass_key: FfiStr<'_>, recreate: i8, + tenant_profile: FfiStr<'_>, cb: Option, cb_id: CallbackId, ) -> ErrorCode { @@ -482,6 +483,7 @@ pub extern "C" fn askar_store_copy( None => StoreKeyMethod::default() }; let pass_key = PassKey::from(pass_key.as_opt_str()).into_owned(); + let tenant_profile_str = tenant_profile.into_opt_string(); let cb = EnsureCallback::new(move |result| match result { Ok(handle) => cb(cb_id, ErrorCode::Success, handle), @@ -491,7 +493,7 @@ pub extern "C" fn askar_store_copy( spawn_ok(async move { let result = async move { let store = handle.load().await?; - let copied = store.copy_to(target_uri.as_str(), key_method, pass_key.as_ref(), recreate != 0).await?; + let copied = store.copy_to(target_uri.as_str(), key_method, pass_key.as_ref(), recreate != 0, tenant_profile_str).await?; debug!("Copied store {}", handle); Ok(StoreHandle::create(copied).await) }.await; diff --git a/src/store.rs b/src/store.rs index e6476f381..e2fc0290a 100644 --- a/src/store.rs +++ b/src/store.rs @@ -88,16 +88,27 @@ impl Store { key_method: StoreKeyMethod, pass_key: PassKey<'_>, recreate: bool, + tenant_profile: Option, ) -> Result { - let default_profile = self.get_default_profile().await?; - let profile_ids = self.list_profiles().await?; - let target = target_url - .provision_backend(key_method, pass_key, Some(default_profile), recreate) + if tenant_profile.as_ref().map_or(false, |s| s.is_empty()) { + let tenant = tenant_profile.unwrap_or_else(|| String::from("default value")); + let tenant_copy = tenant.clone(); + let target = target_url + .provision_backend(key_method, pass_key, Some(tenant), recreate) .await?; - for profile in profile_ids { - copy_profile(&self.0, &target, &profile, &profile).await?; + copy_profile(&self.0, &target, &tenant_copy, &tenant_copy).await?; + Ok(Self::new(target)) + } else { + let default_profile = self.get_default_profile().await?; + let profile_ids = self.list_profiles().await?; + let target = target_url + .provision_backend(key_method, pass_key, Some(default_profile), recreate) + .await?; + for profile in profile_ids { + copy_profile(&self.0, &target, &profile, &profile).await?; + } + Ok(Self::new(target)) } - Ok(Self::new(target)) } /// Create a new profile with the given profile name diff --git a/tests/store_copy.rs b/tests/store_copy.rs index 41293ca5d..9eb52f82f 100644 --- a/tests/store_copy.rs +++ b/tests/store_copy.rs @@ -51,6 +51,7 @@ fn store_copy() { StoreKeyMethod::RawKey, pass_key_copy, true, + None ) .await .expect("Error copying store"); diff --git a/wrappers/python/aries_askar/bindings/__init__.py b/wrappers/python/aries_askar/bindings/__init__.py index 040175c51..6f7bf7cb5 100644 --- a/wrappers/python/aries_askar/bindings/__init__.py +++ b/wrappers/python/aries_askar/bindings/__init__.py @@ -3,12 +3,19 @@ import asyncio import json import logging - from ctypes import POINTER, byref, c_int8, c_int32, c_int64 from typing import Optional, Sequence, Union from ..types import EntryOperation, KeyAlg, KeyBackend, SeedMethod - +from .handle import ( + EntryListHandle, + KeyEntryListHandle, + LocalKeyHandle, + ScanHandle, + SessionHandle, + StoreHandle, + StringListHandle, +) from .lib import ( AeadParams, ByteBuffer, @@ -20,16 +27,6 @@ Lib, StrBuffer, ) -from .handle import ( - EntryListHandle, - KeyEntryListHandle, - LocalKeyHandle, - ScanHandle, - SessionHandle, - StoreHandle, - StringListHandle, -) - LIB = Lib() LOGGER = logging.getLogger(__name__) @@ -228,16 +225,18 @@ async def store_copy( key_method: Optional[str] = None, pass_key: Optional[str] = None, recreate: bool = False, + tenant_profile: Optional[str] = None, ) -> StoreHandle: """Copy the Store contents to a new location.""" return await invoke_async( "askar_store_copy", - (StoreHandle, FfiStr, FfiStr, FfiStr, c_int8), + (StoreHandle, FfiStr, FfiStr, FfiStr, c_int8, FfiStr), handle, target_uri, key_method and key_method.lower(), pass_key, recreate, + tenant_profile, return_type=StoreHandle, ) diff --git a/wrappers/python/aries_askar/store.py b/wrappers/python/aries_askar/store.py index 4030a9f01..1a18fbc9b 100644 --- a/wrappers/python/aries_askar/store.py +++ b/wrappers/python/aries_askar/store.py @@ -1,7 +1,6 @@ """Handling of Store instances.""" import json - from typing import Optional, Sequence, Union from cached_property import cached_property @@ -439,11 +438,12 @@ async def copy_to( pass_key: str = None, *, recreate: bool = False, + tenant_profile: str = None, ) -> "Store": """Copy the store contents to a new location.""" return Store( await bindings.store_copy( - self._handle, target_uri, key_method, pass_key, recreate + self._handle, target_uri, key_method, pass_key, recreate, tenant_profile ), target_uri, ) diff --git a/wrappers/python/aries_askar/version.py b/wrappers/python/aries_askar/version.py index 6a70b9e3e..77c664c15 100644 --- a/wrappers/python/aries_askar/version.py +++ b/wrappers/python/aries_askar/version.py @@ -1,3 +1,3 @@ """aries_askar library wrapper version.""" -__version__ = "0.3.2" +__version__ = "0.3.3b11" diff --git a/wrappers/python/setup.py b/wrappers/python/setup.py index e86c47048..eabedb2b8 100644 --- a/wrappers/python/setup.py +++ b/wrappers/python/setup.py @@ -1,13 +1,11 @@ """Module setup.""" import os -import runpy from setuptools import find_packages, setup -PACKAGE_NAME = "aries_askar" -version_meta = runpy.run_path("./{}/version.py".format(PACKAGE_NAME)) -VERSION = version_meta["__version__"] +PACKAGE_NAME = "aries_askar_jamshale" +VERSION = "0.3.3b11" with open(os.path.abspath("./README.md"), "r") as fh: long_description = fh.read()