コード例 #1
0
def test_namespace_flatten_loop_detection():
    n1 = Namespace()
    n1.foo = n1
    n1.bar = 'baz'
    n2 = Namespace()
    n2.buzz = n1
    assert {'buzz__bar': 'baz'} == flatten(n2)
コード例 #2
0
def test_namespace_flatten_loop_detection():
    n1 = Namespace()
    n1.foo = n1
    n1.bar = 'baz'
    n2 = Namespace()
    n2.buzz = n1
    assert {'buzz__bar': 'baz'} == flatten(n2)
コード例 #3
0
ファイル: __init__.py プロジェクト: TriOptima/tri.table
    def prepare(self, request):
        if self._has_prepared:
            return

        self.request = request

        def bind_columns():
            for index, column in enumerate(self.columns):
                values = evaluate_recursive(Struct(column), table=self, column=column)
                values = setdefaults_path(
                    Struct(), self.column.get(column.name, {}), values, column=column, table=self, index=index
                )
                yield BoundColumn(**values)

        self.bound_columns = list(bind_columns())
        self.bound_column_by_name = OrderedDict(
            (bound_column.name, bound_column) for bound_column in self.bound_columns
        )

        self._has_prepared = True

        self._prepare_evaluate_members()
        self._prepare_sorting()
        headers = self._prepare_headers()

        if self.model:

            def generate_variables():
                for column in self.bound_columns:
                    if column.query.show:
                        query_kwargs = setdefaults_path(
                            Struct(),
                            column.query,
                            dict(
                                name=column.name,
                                gui__label=column.display_name,
                                attr=column.attr,
                                model=column.table.model,
                            ),
                            {"class": Variable},
                        )
                        yield query_kwargs.pop("class")(**query_kwargs)

            variables = list(generate_variables())

            self.query = Query(
                request=request,
                variables=variables,
                endpoint_dispatch_prefix="__".join(
                    part for part in [self.endpoint_dispatch_prefix, "query"] if part is not None
                ),
                **flatten(self.query_args)
            )
            self.query_form = self.query.form() if self.query.variables else None

            self.query_error = ""
            if self.query_form:
                try:
                    self.data = self.data.filter(self.query.to_q())
                except QueryException as e:
                    self.query_error = str(e)

            def generate_bulk_fields():
                for column in self.bound_columns:
                    if column.bulk.show:
                        bulk_kwargs = setdefaults_path(
                            Struct(),
                            column.bulk,
                            dict(
                                name=column.name,
                                attr=column.attr,
                                required=False,
                                empty_choice_tuple=(None, "", "---", True),
                                model=self.model,
                            ),
                            {"class": Field.from_model},
                        )
                        if bulk_kwargs["class"] == Field.from_model:
                            bulk_kwargs["field_name"] = column.attr
                        yield bulk_kwargs.pop("class")(**bulk_kwargs)

            bulk_fields = list(generate_bulk_fields())

            self.bulk_form = (
                Form(
                    data=request.POST,
                    fields=bulk_fields,
                    endpoint_dispatch_prefix="__".join(
                        part for part in [self.endpoint_dispatch_prefix, "bulk"] if part is not None
                    ),
                    **flatten(self.bulk)
                )
                if bulk_fields
                else None
            )

        self._prepare_auto_rowspan()

        return headers, self.header_levels
コード例 #4
0
def test_flatten_identity_on_namespace_should_not_trigger_loop_detection():
    foo = Namespace(show=True)
    assert dict(party1_labels__show=True, party2_labels__show=True) == flatten(Namespace(party1_labels=foo, party2_labels=foo))
コード例 #5
0
def test_flatten_broken():
    assert dict(party1_labels__show=True, party2_labels__show=True) == flatten(Namespace(party1_labels=Namespace(show=True), party2_labels=Namespace(show=True)))
コード例 #6
0
def test_namespace_funcal():
    def f(**kwargs):
        assert {'a': 1, 'b__c': 2, 'b__d': 3} == kwargs

    f(**flatten(Namespace(a=1, b=Namespace(c=2, d=3))))
コード例 #7
0
def test_namespace_flatten():
    actual = flatten(Namespace(a=1, b=2, c=Namespace(d=3, e=Namespace(f=4))))
    expected = dict(a=1, b=2, c__d=3, c__e__f=4)
    assert actual == expected
コード例 #8
0
def test_merge(a, b, expected, backward):
    if backward:
        a, b = b, a
    actual = Namespace(flatten(a), flatten(b))
    assert expected == actual
コード例 #9
0
def test_flatten_identity_on_namespace_should_not_trigger_loop_detection():
    foo = Namespace(show=True)
    assert dict(party1_labels__show=True, party2_labels__show=True) == flatten(
        Namespace(party1_labels=foo, party2_labels=foo))
コード例 #10
0
def test_flatten_broken():
    assert dict(party1_labels__show=True, party2_labels__show=True) == flatten(
        Namespace(party1_labels=Namespace(show=True),
                  party2_labels=Namespace(show=True)))
コード例 #11
0
def test_namespace_funcal():
    def f(**kwargs):
        assert {'a': 1, 'b__c': 2, 'b__d': 3} == kwargs

    f(**flatten(Namespace(a=1, b=Namespace(c=2, d=3))))
コード例 #12
0
def test_namespace_flatten():
    actual = flatten(Namespace(a=1, b=2, c=Namespace(d=3, e=Namespace(f=4))))
    expected = dict(a=1, b=2, c__d=3, c__e__f=4)
    assert actual == expected