Chromium Code Reviews| Index: tools/cr/cr/base/context.py |
| diff --git a/tools/cr/cr/context.py b/tools/cr/cr/base/context.py |
| similarity index 89% |
| rename from tools/cr/cr/context.py |
| rename to tools/cr/cr/base/context.py |
| index 176961edb29447bd6b305df5035996fe63793f08..efdb7b1658fa148cf0f20474ecaedace154cbef5 100644 |
| --- a/tools/cr/cr/context.py |
| +++ b/tools/cr/cr/base/context.py |
| @@ -12,7 +12,6 @@ import argparse |
| import os |
| import cr |
| - |
| class _DumpVisitor(cr.visitor.ExportVisitor): |
| """A visitor that prints all variables in a config hierarchy.""" |
| @@ -57,9 +56,9 @@ class _ShowHelp(argparse.Action): |
| """ |
| def __call__(self, parser, namespace, values, option_string=None): |
| - if parser.context.speculative: |
| + if cr.context.speculative: |
| return |
| - command = cr.Command.GetActivePlugin(parser.context) |
| + command = cr.Command.GetActivePlugin() |
| if command: |
| command.parser.print_help() |
| else: |
| @@ -76,12 +75,12 @@ class _ArgumentParser(argparse.ArgumentParser): |
| """ |
| def error(self, message): |
| - if self.context.speculative: |
| + if cr.context.speculative: |
| return |
| super(_ArgumentParser, self).error(message) |
| def parse_args(self): |
| - if self.context.speculative: |
| + if cr.context.speculative: |
| result = self.parse_known_args() |
| if result: |
| return result[0] |
| @@ -95,7 +94,11 @@ class _ArgumentParser(argparse.ArgumentParser): |
| return result |
| -class Context(cr.config.Config, cr.loader.AutoExport): |
| +# The context stack |
| +_stack = [] |
| + |
| + |
| +class _Context(cr.config.Config): |
| """The base context holder for the cr system. |
| This is passed to almost all methods in the cr system, and holds the common |
|
Andrew Hayden (chromium.org)
2014/03/19 18:20:06
No longer passed at all.
iancottrell
2014/03/19 22:17:11
Done.
|
| @@ -104,7 +107,7 @@ class Context(cr.config.Config, cr.loader.AutoExport): |
| """ |
| def __init__(self, description='', epilog=''): |
| - super(Context, self).__init__('Context') |
| + super(_Context, self).__init__('Context') |
| self._args = None |
| self._arguments = cr.config.Config('ARGS') |
| self._derived = cr.config.Config('DERIVED') |
| @@ -118,17 +121,25 @@ class Context(cr.config.Config, cr.loader.AutoExport): |
| # Build the command line argument parser |
| self._parser = _ArgumentParser(add_help=False, description=description, |
| epilog=epilog) |
| - self._parser.context = self |
| self._subparsers = self.parser.add_subparsers() |
| # Add the global arguments |
| self.AddCommonArguments(self._parser) |
| self._gclient = {} |
| - # Try to detect the current client information |
| - cr.base.client.DetectClient(self) |
| + |
| + def __enter__(self): |
| + """ To support using 'with cr.base.context.Create():'""" |
| + _stack.append(self) |
| + cr.context = self |
| + return self |
| + |
| + def __exit__(self, *_): |
| + _stack.pop() |
| + if _stack: |
| + cr.context = _stack[-1] |
| + return False |
| def AddSubParser(self, source): |
| parser = source.AddArguments(self._subparsers) |
| - parser.context = self |
| @classmethod |
| def AddCommonArguments(cls, parser): |
| @@ -202,13 +213,9 @@ class Context(cr.config.Config, cr.loader.AutoExport): |
| @property |
| def gclient(self): |
| if not self._gclient: |
| - self._gclient = cr.base.client.ReadGClient(self) |
| + self._gclient = cr.base.client.ReadGClient() |
| return self._gclient |
| - def WriteGClient(self): |
| - if self._gclient: |
| - cr.base.client.WriteGClient(self) |
| - |
| def ParseArgs(self, speculative=False): |
| cr.plugin.DynamicChoices.only_active = not speculative |
| self._speculative = speculative |
| @@ -221,3 +228,5 @@ class Context(cr.config.Config, cr.loader.AutoExport): |
| def DumpValues(self, with_source): |
| _DumpVisitor(with_source).VisitNode(self) |
| +def Create(description='', epilog=''): |
| + return _Context(description=description, epilog=epilog) |