Skip to content

Commit 219f047

Browse files
philogicaehoh
authored andcommitted
Add NFT payment-type (fallbacking to hold-tier) + Fix helpers + format
1 parent cba19c4 commit 219f047

File tree

3 files changed

+38
-25
lines changed

3 files changed

+38
-25
lines changed

src/aleph_client/commands/help_strings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
Example: --immutable-volume ref=25a393222692c2f73489dc6710ae87605a96742ceef7b91de4d7ec34bb688d94,mount=/lib/python3.8/site-packages"""
2020
ASK_FOR_CONFIRMATION = "Prompt user for confirmation"
2121
IPFS_CATCH_ALL_PATH = "Choose a relative path to catch all unmatched route or a 404 error"
22-
PAYMENT_TYPE = "Payment method, either holding tokens or Pay-As-You-Go via token streaming"
22+
PAYMENT_TYPE = "Payment method, either holding tokens, NFTs, or Pay-As-You-Go via token streaming"
2323
HYPERVISOR = "Hypervisor to use to launch your instance. Defaults to QEMU"
2424
INSTANCE_NAME = "Name of your new instance"
2525
ROOTFS = (

src/aleph_client/commands/instance/__init__.py

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,21 @@
7373

7474
@app.command()
7575
async def create(
76-
payment_type: PaymentType = typer.Option(None, help=help_strings.PAYMENT_TYPE),
77-
payment_chain: Chain = typer.Option(None, help=help_strings.PAYMENT_CHAIN),
78-
hypervisor: HypervisorType = typer.Option(None, help=help_strings.HYPERVISOR),
76+
payment_type: Optional[str] = typer.Option(
77+
None,
78+
help=help_strings.PAYMENT_TYPE,
79+
callback=lambda pt: None if pt is None else PaymentType.hold if pt == "nft" else PaymentType(pt),
80+
metavar=f"[{'|'.join(PaymentType)}|nft]",
81+
),
82+
payment_chain: Optional[Chain] = typer.Option(
83+
None, help=help_strings.PAYMENT_CHAIN, metavar=f"[{'|'.join([Chain.ETH, Chain.AVAX, Chain.BASE])}]"
84+
),
85+
hypervisor: Optional[HypervisorType] = typer.Option(None, help=help_strings.HYPERVISOR),
7986
name: Optional[str] = typer.Option(None, help=help_strings.INSTANCE_NAME),
80-
rootfs: str = typer.Option(None, help=help_strings.ROOTFS),
81-
rootfs_size: int = typer.Option(None, help=help_strings.ROOTFS_SIZE),
82-
vcpus: int = typer.Option(None, help=help_strings.VCPUS),
83-
memory: int = typer.Option(None, help=help_strings.MEMORY),
87+
rootfs: Optional[str] = typer.Option(None, help=help_strings.ROOTFS),
88+
rootfs_size: Optional[int] = typer.Option(None, help=help_strings.ROOTFS_SIZE),
89+
vcpus: Optional[int] = typer.Option(None, help=help_strings.VCPUS),
90+
memory: Optional[int] = typer.Option(None, help=help_strings.MEMORY),
8491
timeout_seconds: float = typer.Option(
8592
settings.DEFAULT_VM_TIMEOUT,
8693
help=help_strings.TIMEOUT_SECONDS,
@@ -136,13 +143,12 @@ def validate_ssh_pubkey_file(file: Union[str, Path]) -> Path:
136143
account: AccountFromPrivateKey = _load_account(private_key, private_key_file)
137144

138145
if payment_type is None:
139-
payment_type = PaymentType(
140-
Prompt.ask(
141-
"Which payment type do you want to use?",
142-
choices=[ptype.value for ptype in PaymentType],
143-
default=PaymentType.superfluid.value,
144-
)
146+
payment_type = Prompt.ask(
147+
"Which payment type do you want to use?",
148+
choices=[ptype.value for ptype in PaymentType] + ["nft"],
149+
default=PaymentType.superfluid.value,
145150
)
151+
payment_type = PaymentType(payment_type) if payment_type != "nft" else PaymentType.hold
146152
is_stream = payment_type != PaymentType.hold
147153

148154
super_token_chains = get_chains_with_super_token()
@@ -1011,16 +1017,23 @@ async def confidential(
10111017
firmware_hash: str = typer.Option(
10121018
settings.DEFAULT_CONFIDENTIAL_FIRMWARE_HASH, help=help_strings.CONFIDENTIAL_FIRMWARE_HASH
10131019
),
1014-
firmware_file: str = typer.Option(None, help=help_strings.PRIVATE_KEY),
1015-
keep_session: bool = typer.Option(None, help=help_strings.KEEP_SESSION),
1016-
vm_secret: str = typer.Option(None, help=help_strings.VM_SECRET),
1017-
payment_type: PaymentType = typer.Option(None, help=help_strings.PAYMENT_TYPE),
1018-
payment_chain: Optional[Chain] = typer.Option(None, help=help_strings.PAYMENT_CHAIN),
1020+
firmware_file: Optional[str] = typer.Option(None, help=help_strings.PRIVATE_KEY),
1021+
keep_session: Optional[bool] = typer.Option(None, help=help_strings.KEEP_SESSION),
1022+
vm_secret: Optional[str] = typer.Option(None, help=help_strings.VM_SECRET),
1023+
payment_type: Optional[str] = typer.Option(
1024+
None,
1025+
help=help_strings.PAYMENT_TYPE,
1026+
callback=lambda pt: None if pt is None else PaymentType.hold if pt == "nft" else PaymentType(pt),
1027+
metavar=f"[{'|'.join(PaymentType)}|nft]",
1028+
),
1029+
payment_chain: Optional[Chain] = typer.Option(
1030+
None, help=help_strings.PAYMENT_CHAIN, metavar=f"[{'|'.join([Chain.ETH, Chain.AVAX, Chain.BASE])}]"
1031+
),
10191032
name: Optional[str] = typer.Option(None, help=help_strings.INSTANCE_NAME),
1020-
rootfs: str = typer.Option("ubuntu22", help=help_strings.ROOTFS),
1021-
rootfs_size: int = typer.Option(None, help=help_strings.ROOTFS_SIZE),
1022-
vcpus: int = typer.Option(None, help=help_strings.VCPUS),
1023-
memory: int = typer.Option(None, help=help_strings.MEMORY),
1033+
rootfs: Optional[str] = typer.Option(None, help=help_strings.ROOTFS),
1034+
rootfs_size: Optional[int] = typer.Option(None, help=help_strings.ROOTFS_SIZE),
1035+
vcpus: Optional[int] = typer.Option(None, help=help_strings.VCPUS),
1036+
memory: Optional[int] = typer.Option(None, help=help_strings.MEMORY),
10241037
timeout_seconds: float = typer.Option(
10251038
settings.DEFAULT_VM_TIMEOUT,
10261039
help=help_strings.TIMEOUT_SECONDS,

src/aleph_client/commands/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,13 +256,13 @@ async def wait_for_confirmed_flow(account: ETHAccount, receiver: str):
256256

257257

258258
async def filter_only_valid_messages(messages: List[AlephMessage]):
259-
"""Iteratively check the status of each message from the API and only return
259+
"""Iteratively check the status of each message from the API and only return
260260
messages whose status is processed.
261261
"""
262262
filtered_messages = []
263263
async with AlephHttpClient(api_server=settings.API_HOST) as client:
264264
for message in messages:
265-
item_hash: ItemHash = message.item_hash
265+
item_hash: ItemHash = message.item_hash
266266
try:
267267
msg = await client.get_message(ItemHash(item_hash))
268268
filtered_messages.append(msg)

0 commit comments

Comments
 (0)