forked from tern-tools/tern
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
First commit in a string of code refactoring commits to move some utility modules into classes in an attempt to decouple the process of extracting or formatting data from the actual data - Layer is now renamed ImageLayer for clarity - Image layer property sha is now diff_id for clarity - Added property tar_file to point to location of the diff filesystem tarball - Added property created_by which is not an OCI specification but is used in images created by Docker - Added getters for the new properties - Added setter for created_by - Modified the unit tests to reflect the changes in the class Note: This change will break the build Signed-off-by: Nisha K <[email protected]>
- Loading branch information
Nisha K
committed
Jan 13, 2018
1 parent
9e8202b
commit 877c0d5
Showing
4 changed files
with
140 additions
and
105 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
''' | ||
Copyright (c) 2017 VMware, Inc. All Rights Reserved. | ||
SPDX-License-Identifier: BSD-2-Clause | ||
''' | ||
|
||
|
||
class ImageLayer(object): | ||
'''A representation of a container filesystem layer | ||
attributes: | ||
sha: the sha256 of the layer filesystem | ||
packages: list of objects of type Package (package.py) | ||
tar_file: the path to the layer filesystem tarball | ||
created_by: sometimes the metadata will contain a created_by | ||
key containing the command that created the filesystem layer | ||
methods: | ||
add_package: adds a package to the layer | ||
remove_package: removes a package from the layer | ||
to_dict: returns a dict representation of the instance | ||
get_package_names: returns a list of package names''' | ||
def __init__(self, diff_id, tar_file, created_by=None): | ||
self.__diff_id = diff_id | ||
self.__tar_file = tar_file | ||
self.__created_by = created_by | ||
self.__packages = [] | ||
|
||
@property | ||
def diff_id(self): | ||
return self.__diff_id | ||
|
||
@property | ||
def packages(self): | ||
return self.__packages | ||
|
||
@property | ||
def tar_file(self): | ||
return self.__tar_file | ||
|
||
@property | ||
def created_by(self): | ||
return self.__created_by | ||
|
||
@created_by.setter | ||
def created_by(self, create_string): | ||
self.__created_by = create_string | ||
|
||
def add_package(self, package): | ||
self.__packages.append(package) | ||
|
||
def remove_package(self, package_name): | ||
rem_index = 0 | ||
success = False | ||
for index in range(0, len(self.__packages)): | ||
if self.packages[index].name == package_name: | ||
rem_index = index | ||
success = True | ||
break | ||
if success: | ||
self.__packages.remove(self.__packages[rem_index]) | ||
return success | ||
|
||
def to_dict(self): | ||
layer_dict = {} | ||
pkg_list = [] | ||
for pkg in self.__packages: | ||
pkg_list.append(pkg.to_dict()) | ||
layer_dict.update({self.diff_id: {'packages': pkg_list, | ||
'tar_file': self.__tar_file, | ||
'created_by': self.__created_by | ||
}}) | ||
return layer_dict | ||
|
||
def get_package_names(self): | ||
'''Get the list of package names in this layer''' | ||
pkg_list = [] | ||
for pkg in self.packages: | ||
pkg_list.append(pkg.name) | ||
return pkg_list |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
''' | ||
Copyright (c) 2017 VMware, Inc. All Rights Reserved. | ||
SPDX-License-Identifier: BSD-2-Clause | ||
''' | ||
|
||
import unittest | ||
|
||
from classes.image_layer import ImageLayer | ||
from classes.package import Package | ||
|
||
|
||
class TestClassLayer(unittest.TestCase): | ||
|
||
def setUp(self): | ||
self.layer = ImageLayer('123abc', 'path/to/tar') | ||
|
||
def tearDown(self): | ||
del self.layer | ||
|
||
def testInstance(self): | ||
self.assertEqual(self.layer.diff_id, '123abc') | ||
self.assertEqual(self.layer.tar_file, 'path/to/tar') | ||
self.assertFalse(self.layer.packages) | ||
self.assertFalse(self.layer.created_by) | ||
self.assertRaises(AttributeError, setattr, self.layer, | ||
'diff_id', '456def') | ||
self.assertRaises(AttributeError, setattr, self.layer, 'tar_file', | ||
'some/other/path') | ||
self.layer.created_by = 'some string' | ||
self.assertEqual(self.layer.created_by, 'some string') | ||
|
||
def testAddPackage(self): | ||
p1 = Package('x') | ||
self.layer.add_package(p1) | ||
self.assertEqual(len(self.layer.packages), 1) | ||
|
||
def testRemovePackage(self): | ||
p1 = Package('x') | ||
p2 = Package('y') | ||
self.layer.add_package(p1) | ||
self.layer.add_package(p2) | ||
self.assertTrue(self.layer.remove_package('y')) | ||
self.assertFalse(self.layer.remove_package('y')) | ||
|
||
def testToDict(self): | ||
p1 = Package('x') | ||
self.layer.add_package(p1) | ||
a_dict = self.layer.to_dict() | ||
print(a_dict) | ||
self.assertTrue(a_dict['123abc']) | ||
self.assertEqual(len(a_dict['123abc']['packages']), 1) | ||
self.assertEqual(a_dict['123abc']['packages'][0]['name'], 'x') | ||
self.assertEqual(a_dict['123abc']['tar_file'], 'path/to/tar') | ||
|
||
def testGetPackageNames(self): | ||
p1 = Package('x') | ||
self.layer.add_package(p1) | ||
pkgs = self.layer.get_package_names() | ||
self.assertEqual(pkgs[0], 'x') | ||
|
||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file was deleted.
Oops, something went wrong.