Skip to content
This repository has been archived by the owner on Jan 13, 2023. It is now read-only.

Commit

Permalink
Merge pull request #243 from iotaledger/filter-macro
Browse files Browse the repository at this point in the history
Refactored repeated filter logic into macro.
  • Loading branch information
lzpap committed Oct 10, 2019
2 parents 50251cb + 31f8707 commit bc8f1d8
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 68 deletions.
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

0 comments on commit bc8f1d8

Please sign in to comment.