Formatting: Format all python code with black.

This CL is probably not what you're looking for, it's only
automated formatting. Ignore it with
`git blame --ignore-rev <revision>` for this commit.

BUG=b:233893248
TEST=CQ

Change-Id: I66591d7a738d241aed3290138c0f68065ab10a6d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3879174
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Tested-by: Alex Klein <saklein@chromium.org>
diff --git a/scripts/loman.py b/scripts/loman.py
index 81961e3..5a96f4f 100644
--- a/scripts/loman.py
+++ b/scripts/loman.py
@@ -15,197 +15,228 @@
 
 
 class LocalManifest(object):
-  """Class which provides an abstraction for manipulating the local manifest."""
+    """Class which provides an abstraction for manipulating the local manifest."""
 
-  @classmethod
-  def FromPath(cls, path, empty_if_missing=False):
-    if os.path.isfile(path):
-      return cls(osutils.ReadFile(path))
-    elif empty_if_missing:
-      cros_build_lib.Die('Manifest file, %r, not found' % path)
-    return cls()
+    @classmethod
+    def FromPath(cls, path, empty_if_missing=False):
+        if os.path.isfile(path):
+            return cls(osutils.ReadFile(path))
+        elif empty_if_missing:
+            cros_build_lib.Die("Manifest file, %r, not found" % path)
+        return cls()
 
-  def __init__(self, text=None):
-    self._text = text or '<manifest>\n</manifest>'
-    self.nodes = ElementTree.fromstring(self._text)
+    def __init__(self, text=None):
+        self._text = text or "<manifest>\n</manifest>"
+        self.nodes = ElementTree.fromstring(self._text)
 
-  def AddNonWorkonProject(self, name, path, remote=None, revision=None):
-    """Add a new nonworkon project element to the manifest tree."""
-    element = ElementTree.Element('project', name=name, path=path,
-                                  remote=remote)
-    element.attrib['workon'] = 'False'
-    if revision is not None:
-      element.attrib['revision'] = revision
-    self.nodes.append(element)
-    return element
+    def AddNonWorkonProject(self, name, path, remote=None, revision=None):
+        """Add a new nonworkon project element to the manifest tree."""
+        element = ElementTree.Element(
+            "project", name=name, path=path, remote=remote
+        )
+        element.attrib["workon"] = "False"
+        if revision is not None:
+            element.attrib["revision"] = revision
+        self.nodes.append(element)
+        return element
 
-  def GetProject(self, name, path=None):
-    """Accessor method for getting a project node from the manifest tree.
+    def GetProject(self, name, path=None):
+        """Accessor method for getting a project node from the manifest tree.
 
-    Returns:
-      project element node from ElementTree, otherwise, None
-    """
-    if path is None:
-      # Use a unique value that can't ever match.
-      path = object()
-    for project in self.nodes.findall('project'):
-      if project.attrib['name'] == name or project.attrib['path'] == path:
-        return project
-    return None
+        Returns:
+          project element node from ElementTree, otherwise, None
+        """
+        if path is None:
+            # Use a unique value that can't ever match.
+            path = object()
+        for project in self.nodes.findall("project"):
+            if project.attrib["name"] == name or project.attrib["path"] == path:
+                return project
+        return None
 
-  def ToString(self):
-    # Reset the tail for each node, then just do a hacky replace.
-    project = None
-    for project in self.nodes.findall('project'):
-      project.tail = '\n  '
-    if project is not None:
-      # Tweak the last project to not have the trailing space.
-      project.tail = '\n'
-    # Fix manifest tag text and tail.
-    self.nodes.text = '\n  '
-    self.nodes.tail = '\n'
-    return ElementTree.tostring(self.nodes, encoding='unicode')
+    def ToString(self):
+        # Reset the tail for each node, then just do a hacky replace.
+        project = None
+        for project in self.nodes.findall("project"):
+            project.tail = "\n  "
+        if project is not None:
+            # Tweak the last project to not have the trailing space.
+            project.tail = "\n"
+        # Fix manifest tag text and tail.
+        self.nodes.text = "\n  "
+        self.nodes.tail = "\n"
+        return ElementTree.tostring(self.nodes, encoding="unicode")
 
-  def GetProjects(self):
-    return list(self.nodes.findall('project'))
+    def GetProjects(self):
+        return list(self.nodes.findall("project"))
 
 
 def _AddProjectsToManifestGroups(options, new_group):
-  """Enable the given manifest groups for the configured repository."""
+    """Enable the given manifest groups for the configured repository."""
 
-  groups_to_enable = ['name:%s' % x for x in new_group]
+    groups_to_enable = ["name:%s" % x for x in new_group]
 
-  git_config = options.git_config
+    git_config = options.git_config
 
-  cmd = ['config', '-f', git_config, '--get', 'manifest.groups']
-  enabled_groups = git.RunGit('.', cmd, check=False).stdout.rstrip().split(',')
+    cmd = ["config", "-f", git_config, "--get", "manifest.groups"]
+    enabled_groups = (
+        git.RunGit(".", cmd, check=False).stdout.rstrip().split(",")
+    )
 
-  # Note that ordering actually matters, thus why the following code
-  # is written this way.
-  # Per repo behaviour, enforce an appropriate platform group if
-  # we're converting from a default manifest group to a limited one.
-  # Finally, note we reprocess the existing groups; this is to allow
-  # us to cleanup any user screwups, or our own screwups.
-  requested_groups = (
-      ['minilayout', 'platform-%s' % (platform.system().lower(),)] +
-      enabled_groups + list(groups_to_enable))
+    # Note that ordering actually matters, thus why the following code
+    # is written this way.
+    # Per repo behaviour, enforce an appropriate platform group if
+    # we're converting from a default manifest group to a limited one.
+    # Finally, note we reprocess the existing groups; this is to allow
+    # us to cleanup any user screwups, or our own screwups.
+    requested_groups = (
+        ["minilayout", "platform-%s" % (platform.system().lower(),)]
+        + enabled_groups
+        + list(groups_to_enable)
+    )
 
-  processed_groups = set()
-  finalized_groups = []
+    processed_groups = set()
+    finalized_groups = []
 
-  for group in requested_groups:
-    if group not in processed_groups:
-      finalized_groups.append(group)
-      processed_groups.add(group)
+    for group in requested_groups:
+        if group not in processed_groups:
+            finalized_groups.append(group)
+            processed_groups.add(group)
 
-  cmd = ['config', '-f', git_config, 'manifest.groups',
-         ','.join(finalized_groups)]
-  git.RunGit('.', cmd)
+    cmd = [
+        "config",
+        "-f",
+        git_config,
+        "manifest.groups",
+        ",".join(finalized_groups),
+    ]
+    git.RunGit(".", cmd)
 
 
 def _AssertNotMiniLayout():
-  cros_build_lib.Die(
-      'Your repository checkout is using the old minilayout.xml workflow; '
-      'Autoupdate is no longer supported, reinstall your tree.')
+    cros_build_lib.Die(
+        "Your repository checkout is using the old minilayout.xml workflow; "
+        "Autoupdate is no longer supported, reinstall your tree."
+    )
 
 
 def GetParser():
-  """Return a command line parser."""
-  parser = commandline.ArgumentParser(description=__doc__)
+    """Return a command line parser."""
+    parser = commandline.ArgumentParser(description=__doc__)
 
-  # Subparsers are required by default under Python 2.  Python 3 changed to
-  # not required, but didn't include a required option until 3.7.  Setting
-  # the required member works in all versions (and setting dest name).
-  subparsers = parser.add_subparsers(dest='command')
-  subparsers.required = True
+    # Subparsers are required by default under Python 2.  Python 3 changed to
+    # not required, but didn't include a required option until 3.7.  Setting
+    # the required member works in all versions (and setting dest name).
+    subparsers = parser.add_subparsers(dest="command")
+    subparsers.required = True
 
-  subparser = subparsers.add_parser(
-      'add',
-      help='Add projects to the manifest.')
-  subparser.add_argument('-w', '--workon', action='store_true',
-                         default=False, help='Is this a workon package?')
-  subparser.add_argument('-r', '--remote',
-                         help='Remote project name (for non-workon packages).')
-  subparser.add_argument('--revision',
-                         help='Use to override the manifest defined default '
-                              'revision used for a given project.')
-  subparser.add_argument('project', help='Name of project in the manifest.')
-  subparser.add_argument('path', nargs='?', help='Local path to the project.')
+    subparser = subparsers.add_parser(
+        "add", help="Add projects to the manifest."
+    )
+    subparser.add_argument(
+        "-w",
+        "--workon",
+        action="store_true",
+        default=False,
+        help="Is this a workon package?",
+    )
+    subparser.add_argument(
+        "-r", "--remote", help="Remote project name (for non-workon packages)."
+    )
+    subparser.add_argument(
+        "--revision",
+        help="Use to override the manifest defined default "
+        "revision used for a given project.",
+    )
+    subparser.add_argument("project", help="Name of project in the manifest.")
+    subparser.add_argument("path", nargs="?", help="Local path to the project.")
 
-  return parser
+    return parser
 
 
 def main(argv):
-  parser = GetParser()
-  options = parser.parse_args(argv)
-  repo_dir = git.FindRepoDir(os.getcwd())
-  if not repo_dir:
-    parser.error('This script must be invoked from within a repository '
-                 'checkout.')
+    parser = GetParser()
+    options = parser.parse_args(argv)
+    repo_dir = git.FindRepoDir(os.getcwd())
+    if not repo_dir:
+        parser.error(
+            "This script must be invoked from within a repository " "checkout."
+        )
 
-  options.git_config = os.path.join(repo_dir, 'manifests.git', 'config')
-  options.local_manifest_path = os.path.join(repo_dir, 'local_manifest.xml')
+    options.git_config = os.path.join(repo_dir, "manifests.git", "config")
+    options.local_manifest_path = os.path.join(repo_dir, "local_manifest.xml")
 
-  manifest_sym_path = os.path.join(repo_dir, 'manifest.xml')
-  if os.path.basename(os.path.realpath(manifest_sym_path)) == 'minilayout.xml':
-    _AssertNotMiniLayout()
+    manifest_sym_path = os.path.join(repo_dir, "manifest.xml")
+    if (
+        os.path.basename(os.path.realpath(manifest_sym_path))
+        == "minilayout.xml"
+    ):
+        _AssertNotMiniLayout()
 
-  # For now, we only support the add command.
-  assert options.command == 'add'
-  if options.workon:
-    if options.path is not None:
-      parser.error('Adding workon projects do not set project.')
-  else:
-    if options.remote is None:
-      parser.error('Adding non-workon projects requires a remote.')
-    if options.path is None:
-      parser.error('Adding non-workon projects requires a path.')
-  name = options.project
-  path = options.path
-  revision = options.revision
-  if revision is not None:
-    if (not git.IsRefsTags(revision) and
-        not git.IsSHA1(revision)):
-      revision = git.StripRefsHeads(revision, False)
-
-  main_manifest = git.ManifestCheckout(os.getcwd())
-  main_element = main_manifest.FindCheckouts(name)
-  if path is not None:
-    main_element_from_path = main_manifest.FindCheckoutFromPath(
-        path, strict=False)
-    if main_element_from_path is not None:
-      main_element.append(main_element_from_path)
-
-  local_manifest = LocalManifest.FromPath(options.local_manifest_path)
-
-  if options.workon:
-    if not main_element:
-      parser.error('No project named %r in the default manifest.' % name)
-    _AddProjectsToManifestGroups(
-        options, [checkout['name'] for checkout in main_element])
-
-  elif main_element:
-    if options.remote is not None:
-      # Likely this project wasn't meant to be remote, so workon main element
-      print('Project already exists in manifest. Using that as workon project.')
-      _AddProjectsToManifestGroups(
-          options, [checkout['name'] for checkout in main_element])
+    # For now, we only support the add command.
+    assert options.command == "add"
+    if options.workon:
+        if options.path is not None:
+            parser.error("Adding workon projects do not set project.")
     else:
-      # Conflict will occur; complain.
-      parser.error('Requested project name=%r path=%r will conflict with '
-                   'your current manifest %s' % (
-                       name, path, main_manifest.manifest_path))
+        if options.remote is None:
+            parser.error("Adding non-workon projects requires a remote.")
+        if options.path is None:
+            parser.error("Adding non-workon projects requires a path.")
+    name = options.project
+    path = options.path
+    revision = options.revision
+    if revision is not None:
+        if not git.IsRefsTags(revision) and not git.IsSHA1(revision):
+            revision = git.StripRefsHeads(revision, False)
 
-  elif local_manifest.GetProject(name, path=path) is not None:
-    parser.error('Requested project name=%r path=%r conflicts with '
-                 'your local_manifest.xml' % (name, path))
+    main_manifest = git.ManifestCheckout(os.getcwd())
+    main_element = main_manifest.FindCheckouts(name)
+    if path is not None:
+        main_element_from_path = main_manifest.FindCheckoutFromPath(
+            path, strict=False
+        )
+        if main_element_from_path is not None:
+            main_element.append(main_element_from_path)
 
-  else:
-    element = local_manifest.AddNonWorkonProject(name=name, path=path,
-                                                 remote=options.remote,
-                                                 revision=revision)
-    _AddProjectsToManifestGroups(options, [element.attrib['name']])
+    local_manifest = LocalManifest.FromPath(options.local_manifest_path)
 
-    with open(options.local_manifest_path, 'w') as f:
-      f.write(local_manifest.ToString())
-  return 0
+    if options.workon:
+        if not main_element:
+            parser.error("No project named %r in the default manifest." % name)
+        _AddProjectsToManifestGroups(
+            options, [checkout["name"] for checkout in main_element]
+        )
+
+    elif main_element:
+        if options.remote is not None:
+            # Likely this project wasn't meant to be remote, so workon main element
+            print(
+                "Project already exists in manifest. Using that as workon project."
+            )
+            _AddProjectsToManifestGroups(
+                options, [checkout["name"] for checkout in main_element]
+            )
+        else:
+            # Conflict will occur; complain.
+            parser.error(
+                "Requested project name=%r path=%r will conflict with "
+                "your current manifest %s"
+                % (name, path, main_manifest.manifest_path)
+            )
+
+    elif local_manifest.GetProject(name, path=path) is not None:
+        parser.error(
+            "Requested project name=%r path=%r conflicts with "
+            "your local_manifest.xml" % (name, path)
+        )
+
+    else:
+        element = local_manifest.AddNonWorkonProject(
+            name=name, path=path, remote=options.remote, revision=revision
+        )
+        _AddProjectsToManifestGroups(options, [element.attrib["name"]])
+
+        with open(options.local_manifest_path, "w") as f:
+            f.write(local_manifest.ToString())
+    return 0