/
options_parsing.py
43 lines (32 loc) · 1.36 KB
/
options_parsing.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# coding=utf-8
# Copyright 2018 Pants project contributors (see CONTRIBUTORS.md).
# Licensed under the Apache License, Version 2.0 (see LICENSE).
from __future__ import absolute_import, division, print_function, unicode_literals
from pants.build_graph.build_configuration import BuildConfiguration
from pants.engine.rules import RootRule, rule
from pants.engine.selectors import Select
from pants.init.options_initializer import OptionsInitializer
from pants.option.options_bootstrapper import OptionsBootstrapper
from pants.util.objects import datatype
class OptionsParseRequest(datatype(['args', 'env'])):
"""Represents a request for Options computation."""
@classmethod
def create(cls, args, env):
assert isinstance(args, (list, tuple))
return cls(
tuple(args),
tuple(sorted(env.items() if isinstance(env, dict) else env))
)
class Options(datatype(['options', 'build_config'])):
"""Represents the result of an Options computation."""
# TODO: Accommodate file_option, dir_option, etc.
@rule(Options, [Select(OptionsBootstrapper), Select(BuildConfiguration)])
def parse_options(options_bootstrapper, build_config):
options = OptionsInitializer.create(options_bootstrapper, build_config)
options.freeze()
return Options(options, build_config)
def create_options_parsing_rules():
return [
parse_options,
RootRule(OptionsBootstrapper),
]