Skip to content
This repository was archived by the owner on Jan 13, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 2 additions & 9 deletions iota/commands/core/broadcast_transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from iota import TransactionTrytes
from iota.commands import FilterCommand, RequestFilter
from iota.filters import Trytes
from iota.filters import StringifiedTrytesArray

__all__ = [
'BroadcastTransactionsCommand',
Expand All @@ -31,12 +31,5 @@ def get_response_filter(self):
class BroadcastTransactionsRequestFilter(RequestFilter):
def __init__(self):
super(BroadcastTransactionsRequestFilter, self).__init__({
'trytes':
f.Required |
f.Array |
f.FilterRepeater(
f.Required |
Trytes(TransactionTrytes) |
f.Unicode(encoding='ascii', normalize=False),
),
'trytes': StringifiedTrytesArray(TransactionTrytes) | f.Required,
})
25 changes: 4 additions & 21 deletions iota/commands/core/find_transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from iota import BundleHash, Tag, TransactionHash
from iota.commands import FilterCommand, RequestFilter, ResponseFilter
from iota.filters import AddressNoChecksum, Trytes
from iota.filters import AddressNoChecksum, StringifiedTrytesArray, Trytes

__all__ = [
'FindTransactionsCommand',
Expand Down Expand Up @@ -46,26 +46,9 @@ def __init__(self):
f.Unicode(encoding='ascii', normalize=False),
),

'approvees':
f.Array | f.FilterRepeater(
f.Required |
Trytes(TransactionHash) |
f.Unicode(encoding='ascii', normalize=False),
),

'bundles':
f.Array | f.FilterRepeater(
f.Required |
Trytes(BundleHash) |
f.Unicode(encoding='ascii', normalize=False),
),

'tags':
f.Array | f.FilterRepeater(
f.Required |
Trytes(Tag) |
f.Unicode(encoding='ascii', normalize=False),
),
'approvees': StringifiedTrytesArray(TransactionHash),
'bundles': StringifiedTrytesArray(BundleHash),
'tags': StringifiedTrytesArray(Tag),
},

# Technically, all of the parameters for this command are
Expand Down
9 changes: 2 additions & 7 deletions iota/commands/core/get_balances.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from iota import TransactionHash
from iota.commands import FilterCommand, RequestFilter, ResponseFilter
from iota.filters import AddressNoChecksum, Trytes
from iota.filters import AddressNoChecksum, StringifiedTrytesArray, Trytes

__all__ = [
'GetBalancesCommand',
Expand Down Expand Up @@ -46,12 +46,7 @@ def __init__(self):
f.Max(100) |
f.Optional(default=100),

'tips':
f.Array | f.FilterRepeater(
f.Required |
Trytes(TransactionHash) |
f.Unicode(encoding='ascii', normalize=False),
)
'tips': StringifiedTrytesArray(TransactionHash),
},

allow_missing_keys={
Expand Down
14 changes: 3 additions & 11 deletions iota/commands/core/get_inclusion_states.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from iota import TransactionHash
from iota.commands import FilterCommand, RequestFilter
from iota.filters import Trytes
from iota.filters import StringifiedTrytesArray

__all__ = [
'GetInclusionStatesCommand',
Expand Down Expand Up @@ -34,19 +34,11 @@ def __init__(self):
{
# Required parameters.
'transactions':
f.Required | f.Array | f.FilterRepeater(
f.Required |
Trytes(TransactionHash) |
f.Unicode(encoding='ascii', normalize=False),
),
StringifiedTrytesArray(TransactionHash) | f.Required,

# Optional parameters.
'tips':
f.Array | f.FilterRepeater(
f.Required |
Trytes(TransactionHash) |
f.Unicode(encoding='ascii', normalize=False),
) |
StringifiedTrytesArray(TransactionHash) |
f.Optional(default=[]),
},

Expand Down
8 changes: 2 additions & 6 deletions iota/commands/core/get_trytes.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from iota import TransactionHash
from iota.commands import FilterCommand, RequestFilter, ResponseFilter
from iota.filters import Trytes
from iota.filters import StringifiedTrytesArray, Trytes

__all__ = [
'GetTrytesCommand',
Expand All @@ -32,11 +32,7 @@ class GetTrytesRequestFilter(RequestFilter):
def __init__(self):
super(GetTrytesRequestFilter, self).__init__({
'hashes':
f.Required | f.Array | f.FilterRepeater(
f.Required |
Trytes(TransactionHash) |
f.Unicode(encoding='ascii', normalize=False),
),
StringifiedTrytesArray(TransactionHash) | f.Required,
})


Expand Down
8 changes: 2 additions & 6 deletions iota/commands/core/store_transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from iota import TransactionTrytes
from iota.commands import FilterCommand, RequestFilter
from iota.filters import Trytes
from iota.filters import StringifiedTrytesArray

__all__ = [
'StoreTransactionsCommand',
Expand All @@ -32,9 +32,5 @@ class StoreTransactionsRequestFilter(RequestFilter):
def __init__(self):
super(StoreTransactionsRequestFilter, self).__init__({
'trytes':
f.Required | f.Array | f.FilterRepeater(
f.Required |
Trytes(TransactionTrytes) |
f.Unicode(encoding='ascii', normalize=False),
),
StringifiedTrytesArray(TransactionTrytes) | f.Required,
})
9 changes: 2 additions & 7 deletions iota/commands/extended/is_reattachable.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from iota.commands import FilterCommand, RequestFilter, ResponseFilter
from iota.commands.extended import FindTransactionObjectsCommand, \
GetLatestInclusionCommand
from iota.filters import Trytes
from iota.filters import Trytes, StringifiedTrytesArray

__all__ = [
'IsReattachableCommand',
Expand Down Expand Up @@ -69,12 +69,7 @@ class IsReattachableRequestFilter(RequestFilter):
def __init__(self):
super(IsReattachableRequestFilter, self).__init__(
{
'addresses':
f.Required | f.Array | f.FilterRepeater(
f.Required |
Trytes(Address) |
f.Unicode(encoding='ascii', normalize=False),
),
'addresses': StringifiedTrytesArray(Address) | f.Required,
},
)

Expand Down
37 changes: 36 additions & 1 deletion iota/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from __future__ import absolute_import, division, print_function, \
unicode_literals

from typing import Text
from typing import Text, Type

import filters as f
from filters.macros import filter_macro
Expand All @@ -11,6 +11,15 @@
from iota import Address, TryteString, TrytesCompatible
from iota.crypto.addresses import AddressGenerator

__all__ = [
'AddressNoChecksum',
'GeneratedAddress',
'NodeUri',
'SecurityLevel',
'StringifiedTrytesArray',
'Trytes',
]


class GeneratedAddress(f.BaseFilter):
"""
Expand Down Expand Up @@ -172,6 +181,32 @@ def _apply(self, value):
)


# noinspection PyPep8Naming
@filter_macro
def StringifiedTrytesArray(trytes_type=TryteString):
# type: (Type[TryteString]) -> f.FilterChain
"""
Validates that the incoming value is an array containing tryte
strings corresponding to the specified type (e.g.,
``TransactionHash``).

.. important::
This filter will return string values, suitable for inclusion in
an API request. If you are expecting objects (e.g.,
:py:class:`Address`), then this is not the filter to use!

.. note::
This filter will allow empty arrays and `None`. If this is not
desirable, chain this filter with ``f.NotEmpty`` or
``f.Required``, respectively.
"""
return f.Array | f.FilterRepeater(
f.Required |
Trytes(trytes_type) |
f.Unicode(encoding='ascii', normalize=False),
)


class AddressNoChecksum(Trytes):
"""
Validates a sequence as an Address, then chops off the checksum if
Expand Down