fixed bug introduced by aggr strat refac: singleton lists are now unpacked before upload via default merge function

This commit is contained in:
Matthias Bisping 2022-06-20 16:36:40 +02:00
parent d52ac8fd74
commit 2362619bef
2 changed files with 9 additions and 3 deletions

View File

@ -1,7 +1,7 @@
from collections import deque from collections import deque
from typing import Callable from typing import Callable
from funcy import omit, filter from funcy import omit, filter, first
from more_itertools import peekable from more_itertools import peekable
from pyinfra.server.dispatcher.dispatcher import Nothing, is_not_nothing from pyinfra.server.dispatcher.dispatcher import Nothing, is_not_nothing
@ -10,10 +10,16 @@ from pyinfra.visitor.strategies.response.response import ResponseStrategy
from pyinfra.visitor.utils import build_storage_upload_info from pyinfra.visitor.utils import build_storage_upload_info
def default_merge(items):
merged = list(items)
merged = first(merged) if len(merged) == 1 else merged
return merged
class AggregationStorageStrategy(ResponseStrategy): class AggregationStorageStrategy(ResponseStrategy):
def __init__(self, storage, merger: Callable = None): def __init__(self, storage, merger: Callable = None):
self.storage = storage self.storage = storage
self.merger = merger or list self.merger = merger or default_merge
self.buffer = deque() self.buffer = deque()
self.response_files = deque() self.response_files = deque()

View File

@ -4,7 +4,7 @@ from itertools import starmap, repeat, chain
from operator import itemgetter from operator import itemgetter
import pytest import pytest
from funcy import compose, lpluck, first, second, pluck, lflatten from funcy import compose, first, second, pluck, lflatten
from pyinfra.default_objects import ( from pyinfra.default_objects import (
get_callback, get_callback,