Ejemplo n.º 1
0
 def test_duplicate_names(self):
   with self.assertRaises(DuplicateNameError):
     AddressFamily.create('name/space',
                          [AddressMap('name/space/0',
                                      {'one': Thing(name='one', age=42)}),
                           AddressMap('name/space/1',
                                      {'one': Thing(name='one', age=37)})])
Ejemplo n.º 2
0
 def test_duplicate_names(self):
   with self.assertRaises(DuplicateNameError):
     AddressFamily.create('name/space',
                          [AddressMap('name/space/0',
                                      {'one': Thing(name='one', age=42)}),
                           AddressMap('name/space/1',
                                      {'one': Thing(name='one', age=37)})])
Ejemplo n.º 3
0
 def test_duplicate_names(self) -> None:
     with self.assertRaises(DuplicateNameError):
         AddressFamily.create(
             "name/space",
             [
                 AddressMap("name/space/0", {"one": Thing(name="one", age=42)}),
                 AddressMap("name/space/1", {"one": Thing(name="one", age=37)}),
             ],
         )
Ejemplo n.º 4
0
async def parse_address_family(address_mapper: AddressMapper, directory: Dir) -> AddressFamily:
  """Given an AddressMapper and a directory, return an AddressFamily.

  The AddressFamily may be empty, but it will not be None.
  """
  path_globs = PathGlobs(
    globs=(
      *(os.path.join(directory.path, p) for p in address_mapper.build_patterns),
      *(f"!{p}" for p in address_mapper.build_ignore_patterns),
    )
  )
  snapshot = await Get[Snapshot](PathGlobs, path_globs)
  files_content = await Get[FilesContent](Digest, snapshot.directory_digest)

  if not files_content:
    raise ResolveError(
      'Directory "{}" does not contain any BUILD files.'.format(directory.path)
    )
  address_maps = []
  for filecontent_product in files_content:
    address_maps.append(
      AddressMap.parse(
        filecontent_product.path, filecontent_product.content, address_mapper.parser
      )
    )
  return AddressFamily.create(directory.path, address_maps)
Ejemplo n.º 5
0
def parse_address_family(address_mapper, directory):
    """Given an AddressMapper and a directory, return an AddressFamily.

  The AddressFamily may be empty, but it will not be None.
  """
    patterns = tuple(
        join(directory.path, p) for p in address_mapper.build_patterns)
    path_globs = PathGlobs.create('',
                                  include=patterns,
                                  exclude=address_mapper.build_ignore_patterns)
    snapshot = yield Get(Snapshot, PathGlobs, path_globs)
    files_content = yield Get(FilesContent, DirectoryDigest,
                              snapshot.directory_digest)

    if not files_content:
        raise ResolveError(
            'Directory "{}" does not contain build files.'.format(
                directory.path))
    address_maps = []
    for filecontent_product in files_content.dependencies:
        address_maps.append(
            AddressMap.parse(filecontent_product.path,
                             filecontent_product.content,
                             address_mapper.parser))
    yield AddressFamily.create(directory.path, address_maps)
Ejemplo n.º 6
0
 def test_create_single(self):
   address_family = AddressFamily.create('',
                                         [AddressMap('0', {
                                           'one': Thing(name='one', age=42),
                                           'two': Thing(name='two', age=37)
                                         })])
   self.assertEqual('', address_family.namespace)
   self.assertEqual({Address.parse('//:one'): Thing(name='one', age=42),
                     Address.parse('//:two'): Thing(name='two', age=37)},
                    address_family.addressables)
Ejemplo n.º 7
0
 def test_create_single(self):
   address_family = AddressFamily.create('',
                                         [AddressMap('0', {
                                           'one': Thing(name='one', age=42),
                                           'two': Thing(name='two', age=37)
                                         })])
   self.assertEqual('', address_family.namespace)
   self.assertEqual({Address.parse('//:one'): Thing(name='one', age=42),
                     Address.parse('//:two'): Thing(name='two', age=37)},
                    address_family.addressables)
Ejemplo n.º 8
0
  def test_create_multiple(self):
    address_family = AddressFamily.create('name/space',
                                          [AddressMap('name/space/0',
                                                      {'one': Thing(name='one', age=42)}),
                                           AddressMap('name/space/1',
                                                      {'two': Thing(name='two', age=37)})])

    self.assertEqual('name/space', address_family.namespace)
    self.assertEqual({Address.parse('name/space:one'): Thing(name='one', age=42),
                      Address.parse('name/space:two'): Thing(name='two', age=37)},
                     address_family.addressables)
Ejemplo n.º 9
0
  def test_create_multiple(self):
    address_family = AddressFamily.create('name/space',
                                          [AddressMap('name/space/0',
                                                      {'one': Thing(name='one', age=42)}),
                                           AddressMap('name/space/1',
                                                      {'two': Thing(name='two', age=37)})])

    self.assertEqual('name/space', address_family.namespace)
    self.assertEqual({Address.parse('name/space:one'): Thing(name='one', age=42),
                      Address.parse('name/space:two'): Thing(name='two', age=37)},
                     address_family.addressables)
Ejemplo n.º 10
0
def parse_address_family(address_mapper, path, build_files_content):
    """Given the contents of the build files in one directory, return an AddressFamily.

  The AddressFamily may be empty, but it will not be None.
  """
    address_maps = []
    for filepath, filecontent in build_files_content.dependencies:
        address_maps.append(
            AddressMap.parse(filepath, filecontent,
                             address_mapper.symbol_table_cls,
                             address_mapper.parser_cls))
    return AddressFamily.create(path.path, address_maps)
Ejemplo n.º 11
0
def parse_address_family(address_mapper, path, build_files_content):
  """Given the contents of the build files in one directory, return an AddressFamily.

  The AddressFamily may be empty, but it will not be None.
  """
  address_maps = []
  for filepath, filecontent in build_files_content.dependencies:
    address_maps.append(AddressMap.parse(filepath,
                                         filecontent,
                                         address_mapper.symbol_table_cls,
                                         address_mapper.parser_cls))
  return AddressFamily.create(path.path, address_maps)
Ejemplo n.º 12
0
 def test_create_single(self) -> None:
     address_family = AddressFamily.create(
         "",
         [AddressMap("0", {"one": Thing(name="one", age=42), "two": Thing(name="two", age=37)})],
     )
     self.assertEqual("", address_family.namespace)
     self.assertEqual(
         {
             Address.parse("//:one"): Thing(name="one", age=42),
             Address.parse("//:two"): Thing(name="two", age=37),
         },
         address_family.addressables,
     )
Ejemplo n.º 13
0
def parse_address_family(address_mapper, path, build_files):
  """Given the contents of the build files in one directory, return an AddressFamily.

  The AddressFamily may be empty, but it will not be None.
  """
  files_content = build_files.files_content.dependencies
  if not files_content:
    raise ResolveError('Directory "{}" does not contain build files.'.format(path))
  address_maps = []
  for filecontent_product in files_content:
    address_maps.append(AddressMap.parse(filecontent_product.path,
                                         filecontent_product.content,
                                         address_mapper.parser))
  return AddressFamily.create(path.path, address_maps)
Ejemplo n.º 14
0
    def test_create_multiple(self) -> None:
        address_family = AddressFamily.create(
            "name/space",
            [
                AddressMap("name/space/0", {"one": Thing(name="one", age=42)}),
                AddressMap("name/space/1", {"two": Thing(name="two", age=37)}),
            ],
        )

        self.assertEqual("name/space", address_family.namespace)
        self.assertEqual(
            {
                Address.parse("name/space:one"): Thing(name="one", age=42),
                Address.parse("name/space:two"): Thing(name="two", age=37),
            },
            address_family.addressables,
        )
Ejemplo n.º 15
0
def parse_address_family(address_mapper, path, build_files):
  """Given the contents of the build files in one directory, return an AddressFamily.

  The AddressFamily may be empty, but it will not be None.
  """
  files_content = build_files.files_content.dependencies
  if not files_content:
    raise ResolveError('Directory "{}" does not contain build files.'.format(path))
  address_maps = []
  paths = (f.path for f in files_content)
  ignored_paths = set(address_mapper.build_ignore_patterns.match_files(paths))
  for filecontent_product in files_content:
    if filecontent_product.path in ignored_paths:
      continue
    address_maps.append(AddressMap.parse(filecontent_product.path,
                                         filecontent_product.content,
                                         address_mapper.parser))
  return AddressFamily.create(path.path, address_maps)
Ejemplo n.º 16
0
def parse_address_family(address_mapper, directory):
  """Given an AddressMapper and a directory, return an AddressFamily.

  The AddressFamily may be empty, but it will not be None.
  """
  patterns = tuple(join(directory.path, p) for p in address_mapper.build_patterns)
  path_globs = PathGlobs(include=patterns,
                         exclude=address_mapper.build_ignore_patterns)
  snapshot = yield Get(Snapshot, PathGlobs, path_globs)
  files_content = yield Get(FilesContent, DirectoryDigest, snapshot.directory_digest)

  if not files_content:
    raise ResolveError('Directory "{}" does not contain any BUILD files.'.format(directory.path))
  address_maps = []
  for filecontent_product in files_content.dependencies:
    address_maps.append(AddressMap.parse(filecontent_product.path,
                                         filecontent_product.content,
                                         address_mapper.parser))
  yield AddressFamily.create(directory.path, address_maps)
Ejemplo n.º 17
0
def parse_address_family(address_mapper, path, build_files_content):
    """Given the contents of the build files in one directory, return an AddressFamily.

  The AddressFamily may be empty, but it will not be None.
  """
    if not build_files_content.dependencies:
        raise ResolveError('Directory "{}" does not contain build files.'.format(path))
    address_maps = []
    for filecontent_product in build_files_content.dependencies:
        address_maps.append(
            AddressMap.parse(
                filecontent_product.path,
                filecontent_product.content,
                address_mapper.symbol_table_cls,
                address_mapper.parser_cls,
                address_mapper.exclude_patterns,
            )
        )
    return AddressFamily.create(path.path, address_maps)
Ejemplo n.º 18
0
def parse_address_family(address_mapper, path, build_files):
  """Given the contents of the build files in one directory, return an AddressFamily.

  The AddressFamily may be empty, but it will not be None.
  """
  files_content = build_files.files_content.dependencies
  if not files_content:
    raise ResolveError('Directory "{}" does not contain build files.'.format(path))
  address_maps = []
  paths = (f.path for f in files_content)
  ignored_paths = set(address_mapper.build_ignore_patterns.match_files(paths))
  for filecontent_product in files_content:
    if filecontent_product.path in ignored_paths:
      continue
    address_maps.append(AddressMap.parse(filecontent_product.path,
                                         filecontent_product.content,
                                         address_mapper.symbol_table_cls,
                                         address_mapper.parser_cls,
                                         address_mapper.exclude_patterns))
  return AddressFamily.create(path.path, address_maps)
Ejemplo n.º 19
0
 def test_mismatching_paths(self) -> None:
     with self.assertRaises(DifferingFamiliesError):
         AddressFamily.create(
             "one", [AddressMap("/dev/null/one/0", {}), AddressMap("/dev/null/two/0", {})]
         )
Ejemplo n.º 20
0
 def test_mismatching_paths(self):
   with self.assertRaises(DifferingFamiliesError):
     AddressFamily.create('one',
                          [AddressMap('/dev/null/one/0', {}),
                           AddressMap('/dev/null/two/0', {})])
Ejemplo n.º 21
0
 def test_create_empty(self):
   # Case where directory exists but is empty.
   address_family = AddressFamily.create('name/space', [])
   self.assertEquals(dict(), address_family.addressables)
Ejemplo n.º 22
0
 def test_create_empty(self):
   # Case where directory exists but is empty.
   address_family = AddressFamily.create('name/space', [])
   self.assertEquals(dict(), address_family.addressables)
Ejemplo n.º 23
0
 def test_mismatching_paths(self):
   with self.assertRaises(DifferingFamiliesError):
     AddressFamily.create('one',
                          [AddressMap('/dev/null/one/0', {}),
                           AddressMap('/dev/null/two/0', {})])