コード例 #1
0
    def test_is_flagged(self) -> None:
        ob = OptionValueContainerBuilder()

        ob.foo = RankedValue(Rank.NONE, 11)
        assert not ob.build().is_flagged("foo")

        ob.foo = RankedValue(Rank.CONFIG, 11)
        assert not ob.build().is_flagged("foo")

        ob.foo = RankedValue(Rank.ENVIRONMENT, 11)
        assert not ob.build().is_flagged("foo")

        ob.foo = RankedValue(Rank.FLAG, 11)
        assert ob.build().is_flagged("foo")
コード例 #2
0
ファイル: options.py プロジェクト: gatesn/pants
    def for_scope(
        self,
        scope: str,
        inherit_from_enclosing_scope: bool = True,
    ) -> OptionValueContainer:
        """Return the option values for the given scope.

        Values are attributes of the returned object, e.g., options.foo.
        Computed lazily per scope.

        :API: public
        """

        # First get enclosing scope's option values, if any.
        if scope == GLOBAL_SCOPE or not inherit_from_enclosing_scope:
            values_builder = OptionValueContainerBuilder()
        else:
            values_builder = self.for_scope(
                enclosing_scope(scope)).to_builder()

        # Now add our values.
        flags_in_scope = self._scope_to_flags.get(scope, [])
        parse_args_request = self._make_parse_args_request(
            flags_in_scope, values_builder)
        values = self._parser_hierarchy.get_parser_by_scope(scope).parse_args(
            parse_args_request)

        # Check for any deprecation conditions, which are evaluated using `self._flag_matchers`.
        if inherit_from_enclosing_scope:
            values_builder = values.to_builder()
            self._check_and_apply_deprecations(scope, values_builder)
            values = values_builder.build()

        return values
コード例 #3
0
    def test_unknown_values(self) -> None:
        ob = OptionValueContainerBuilder()
        ob.foo = RankedValue(Rank.HARDCODED, 1)
        o = ob.build()
        assert 1 == o.foo

        with pytest.raises(AttributeError):
            o.bar
コード例 #4
0
    def test_unknown_values(self) -> None:
        ob = OptionValueContainerBuilder()
        ob.foo = RankedValue(Rank.HARDCODED, 1)
        o = ob.build()
        self.assertEqual(1, o.foo)

        with self.assertRaises(AttributeError):
            o.bar
コード例 #5
0
ファイル: option_util.py プロジェクト: zomglings/pants
def create_option_value_container(
    default_rank: Rank = Rank.NONE, **options: RankedValue | Value
) -> OptionValueContainer:
    scoped_options = OptionValueContainerBuilder()
    for key, value in options.items():
        if not isinstance(value, RankedValue):
            value = RankedValue(default_rank, value)
        setattr(scoped_options, key, value)
    return scoped_options.build()
コード例 #6
0
    def test_iterator(self) -> None:
        ob = OptionValueContainerBuilder()
        ob.a = RankedValue(Rank.FLAG, 3)
        ob.b = RankedValue(Rank.FLAG, 2)
        ob.c = RankedValue(Rank.FLAG, 1)
        o = ob.build()

        names = list(iter(o))
        assert ["a", "b", "c"] == names
コード例 #7
0
 def test_value_ranking(self) -> None:
     ob = OptionValueContainerBuilder()
     ob.foo = RankedValue(Rank.CONFIG, 11)
     o = ob.build()
     assert 11 == o.foo
     assert Rank.CONFIG == o.get_rank("foo")
     ob.foo = RankedValue(Rank.HARDCODED, 22)
     o = ob.build()
     assert 11 == o.foo
     assert Rank.CONFIG == o.get_rank("foo")
     ob.foo = RankedValue(Rank.ENVIRONMENT, 33)
     o = ob.build()
     assert 33 == o.foo
     assert Rank.ENVIRONMENT == o.get_rank("foo")
     ob.foo = RankedValue(Rank.FLAG, 44)
     o = ob.build()
     assert 44 == o.foo
     assert Rank.FLAG == o.get_rank("foo")
コード例 #8
0
def _create_scoped_options(
    default_rank: Rank, **options: Union[RankedValue, Value]
) -> OptionValueContainer:
    scoped_options = OptionValueContainerBuilder()
    for key, value in options.items():
        if not isinstance(value, RankedValue):
            value = RankedValue(default_rank, value)
        setattr(scoped_options, key, value)
    return scoped_options.build()
コード例 #9
0
 def test_value_ranking(self) -> None:
     ob = OptionValueContainerBuilder()
     ob.foo = RankedValue(Rank.CONFIG, 11)
     o = ob.build()
     self.assertEqual(11, o.foo)
     self.assertEqual(Rank.CONFIG, o.get_rank("foo"))
     ob.foo = RankedValue(Rank.HARDCODED, 22)
     o = ob.build()
     self.assertEqual(11, o.foo)
     self.assertEqual(Rank.CONFIG, o.get_rank("foo"))
     ob.foo = RankedValue(Rank.ENVIRONMENT, 33)
     o = ob.build()
     self.assertEqual(33, o.foo)
     self.assertEqual(Rank.ENVIRONMENT, o.get_rank("foo"))
     ob.foo = RankedValue(Rank.FLAG, 44)
     o = ob.build()
     self.assertEqual(44, o.foo)
     self.assertEqual(Rank.FLAG, o.get_rank("foo"))
コード例 #10
0
    def test_indexing(self) -> None:
        ob = OptionValueContainerBuilder()
        ob.foo = RankedValue(Rank.CONFIG, 1)
        o = ob.build()

        assert 1 == o["foo"]
        assert 1 == o.get("foo")
        assert 1 == o.get("foo", 2)
        assert o.get("unknown") is None
        assert 2 == o.get("unknown", 2)

        with pytest.raises(AttributeError):
            o["bar"]
コード例 #11
0
    def test_indexing(self) -> None:
        ob = OptionValueContainerBuilder()
        ob.foo = RankedValue(Rank.CONFIG, 1)
        o = ob.build()

        self.assertEqual(1, o["foo"])
        self.assertEqual(1, o.get("foo"))
        self.assertEqual(1, o.get("foo", 2))
        self.assertIsNone(o.get("unknown"))
        self.assertEqual(2, o.get("unknown", 2))

        with self.assertRaises(AttributeError):
            o["bar"]
コード例 #12
0
    def test_copy(self) -> None:
        # copy semantics can get hairy when overriding __setattr__/__getattr__, so we test them.
        ob = OptionValueContainerBuilder()
        ob.foo = RankedValue(Rank.FLAG, 1)
        ob.bar = RankedValue(Rank.FLAG, {"a": 111})

        p = ob.build()
        z = ob.build()

        # Verify that the result is in fact a copy.
        assert 1 == p.foo  # Has original attribute.
        ob.baz = RankedValue(Rank.FLAG, 42)
        assert not hasattr(
            p, "baz")  # Does not have attribute added after the copy.

        # Verify that it's a shallow copy by modifying a referent in o and reading it in p.
        p.bar["b"] = 222
        assert {"a": 111, "b": 222} == z.bar
コード例 #13
0
    def for_scope(self, scope: str, check_deprecations: bool = True) -> OptionValueContainer:
        """Return the option values for the given scope.

        Values are attributes of the returned object, e.g., options.foo.
        Computed lazily per scope.

        :API: public
        """

        values_builder = OptionValueContainerBuilder()
        flags_in_scope = self._scope_to_flags.get(scope, [])
        parse_args_request = self._make_parse_args_request(flags_in_scope, values_builder)
        values = self.get_parser(scope).parse_args(parse_args_request)

        # Check for any deprecation conditions, which are evaluated using `self._flag_matchers`.
        if check_deprecations:
            values_builder = values.to_builder()
            self._check_and_apply_deprecations(scope, values_builder)
            values = values_builder.build()

        return values