from com.my_lovely_company.my_lovely_team.my_lovely_project.my_lovely_component import (
    MyLovelyCompanyTeamProjectComponent,  # NOT DRY
)
from com.my_lovely_company.my_lovely_team.my_lovely_project.my_lovely_component import (
    MyLovelyCompanyTeamProjectComponent as component,  # DRY
)


class C:
    @pytest.mark.parametrize(
        ("post_data", "message"),
        [
            # metadata_version errors.
            (
                {},
                "None is an invalid value for Metadata-Version. "
                "Error: This field is required. "
                "see "
                "https://packaging.python.org/specifications/core-metadata",
            ),
            (
                {"metadata_version": "-1"},
                "'-1' is an invalid value for Metadata-Version. "
                "Error: Unknown Metadata Version "
                "see "
                "https://packaging.python.org/specifications/core-metadata",
            ),
            # name errors.
            (
                {"metadata_version": "1.2"},
                "'' is an invalid value for Name. "
                "Error: This field is required. "
                "see "
                "https://packaging.python.org/specifications/core-metadata",
            ),
            (
                {"metadata_version": "1.2", "name": "foo-"},
                "'foo-' is an invalid value for Name. "
                "Error: Must start and end with a letter or numeral and "
                "contain only ascii numeric and '.', '_' and '-'. "
                "see "
                "https://packaging.python.org/specifications/core-metadata",
            ),
            # version errors.
            (
                {"metadata_version": "1.2", "name": "example"},
                "'' is an invalid value for Version. "
                "Error: This field is required. "
                "see "
                "https://packaging.python.org/specifications/core-metadata",
            ),
            (
                {"metadata_version": "1.2", "name": "example", "version": "dog"},
                "'dog' is an invalid value for Version. "
                "Error: Must start and end with a letter or numeral and "
                "contain only ascii numeric and '.', '_' and '-'. "
                "see "
                "https://packaging.python.org/specifications/core-metadata",
            ),
        ],
    )
    def test_fails_invalid_post_data(
        self, pyramid_config, db_request, post_data, message
    ):
        pyramid_config.testing_securitypolicy(userid=1)
        db_request.POST = MultiDict(post_data)


def foo(list_a, list_b):
    results = (
        User.query.filter(User.foo == "bar")
        .filter(  # Because foo.
            db.or_(User.field_a.astext.in_(list_a), User.field_b.astext.in_(list_b))
        )
        .filter(User.xyz.is_(None))
        # Another comment about the filtering on is_quux goes here.
        .filter(db.not_(User.is_pending.astext.cast(db.Boolean).is_(True)))
        .order_by(User.created_at.desc())
        .with_for_update(key_share=True)
        .all()
    )
    return results


def foo2(list_a, list_b):
    # Standalone comment reasonably placed.
    return (
        User.query.filter(User.foo == "bar")
        .filter(
            db.or_(User.field_a.astext.in_(list_a), User.field_b.astext.in_(list_b))
        )
        .filter(User.xyz.is_(None))
    )


def foo3(list_a, list_b):
    return (
        # Standlone comment but weirdly placed.
        User.query.filter(User.foo == "bar")
        .filter(
            db.or_(User.field_a.astext.in_(list_a), User.field_b.astext.in_(list_b))
        )
        .filter(User.xyz.is_(None))
    )
