1 # Copyright 2020 The Pigweed Authors
3 # Licensed under the Apache License, Version 2.0 (the "License"); you may not
4 # use this file except in compliance with the License. You may obtain a copy of
7 # https://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 # License for the specific language governing permissions and limitations under
14 """The env module defines the environment variables used by Pigweed."""
16 from typing import Optional
18 from pw_cli import envparse
21 def pigweed_environment_parser() -> envparse.EnvironmentParser:
22 """Defines Pigweed's environment variables on an EnvironmentParser."""
23 parser = envparse.EnvironmentParser(prefix='PW_')
25 parser.add_var('PW_BOOTSTRAP_PYTHON')
26 parser.add_var('PW_ENABLE_PRESUBMIT_HOOK_WARNING', default=False)
27 parser.add_var('PW_EMOJI', type=envparse.strict_bool, default=False)
28 parser.add_var('PW_ENVSETUP')
29 parser.add_var('PW_ENVSETUP_FULL')
30 parser.add_var('PW_ENVSETUP_NO_BANNER',
31 type=envparse.strict_bool,
33 parser.add_var('PW_ENVSETUP_QUIET',
34 type=envparse.strict_bool,
36 parser.add_var('PW_ENVIRONMENT_ROOT')
37 parser.add_var('PW_PROJECT_ROOT')
38 parser.add_var('PW_ROOT')
39 parser.add_var('PW_SKIP_BOOTSTRAP')
40 parser.add_var('PW_SUBPROCESS', type=envparse.strict_bool, default=False)
41 parser.add_var('PW_USE_COLOR', type=envparse.strict_bool, default=False)
42 parser.add_var('PW_USE_GCS_ENVSETUP', type=envparse.strict_bool)
44 parser.add_allowed_suffix('_CIPD_INSTALL_DIR')
46 parser.add_var('PW_ENVSETUP_DISABLE_SPINNER',
47 type=envparse.strict_bool,
49 parser.add_var('PW_DOCTOR_SKIP_CIPD_CHECKS')
50 parser.add_var('PW_ACTIVATE_SKIP_CHECKS',
51 type=envparse.strict_bool,
54 # TODO(pwbug/274) Remove after some transition time. These are no longer
55 # used but may be set by users or downstream projects, or just in currently
57 parser.add_var('PW_CIPD_PACKAGE_FILES')
58 parser.add_var('PW_VIRTUALENV_REQUIREMENTS')
59 parser.add_var('PW_VIRTUALENV_REQUIREMENTS_APPEND_DEFAULT')
60 parser.add_var('PW_VIRTUALENV_SETUP_PY_ROOTS')
61 parser.add_var('PW_CARGO_PACKAGE_FILES')
62 parser.add_var('PW_CARGO_SETUP', type=envparse.strict_bool, default=False)
63 parser.add_var('PW_VIRTUALENV_REQUIREMENTS_APPEND_DEFAULT')
65 parser.add_var('PW_BANNER_FUNC')
66 parser.add_var('PW_BRANDING_BANNER')
67 parser.add_var('PW_BRANDING_BANNER_COLOR', default='magenta')
72 # Internal: memoize environment parsing to avoid unnecessary computation in
73 # multiple calls to pigweed_environment().
74 _memoized_environment: Optional[envparse.EnvNamespace] = None
77 def pigweed_environment() -> envparse.EnvNamespace:
78 """Returns Pigweed's parsed environment."""
79 global _memoized_environment # pylint: disable=global-statement
81 if _memoized_environment is None:
82 _memoized_environment = pigweed_environment_parser().parse_env()
84 return _memoized_environment