fixed issue #15, added tests of tags_like arg
This commit is contained in:
58
registry.py
58
registry.py
@@ -146,6 +146,13 @@ class Registry:
|
||||
|
||||
return tags_list
|
||||
|
||||
def list_tags_like(self, tag_like, args_tags_like):
|
||||
for tag_like in args_tags_like:
|
||||
print "tag like: {0}".format(tag_like)
|
||||
for tag in all_tags_list:
|
||||
if re.search(tag_like, tag):
|
||||
print "Adding {0} to tags list".format(tag)
|
||||
|
||||
def get_tag_digest(self, image_name, tag):
|
||||
image_headers = self.send("/v2/{0}/manifests/{1}".format(
|
||||
image_name, tag), method="HEAD")
|
||||
@@ -361,6 +368,30 @@ def delete_tags(
|
||||
|
||||
registry.delete_tag(image_name, tag, dry_run, keep_tag_digests)
|
||||
|
||||
def get_tags_like(args_tags_like, tags_list):
|
||||
result = set()
|
||||
for tag_like in args_tags_like:
|
||||
print "tag like: {0}".format(tag_like)
|
||||
for tag in tags_list:
|
||||
if re.search(tag_like, tag):
|
||||
print "Adding {0} to tags list".format(tag)
|
||||
result.add(tag)
|
||||
return result
|
||||
|
||||
def get_tags(all_tags_list, image_name, tags_like):
|
||||
# check if there are args for special tags
|
||||
result = set()
|
||||
if tags_like:
|
||||
result = get_tags_like(tags_like, all_tags_list)
|
||||
else:
|
||||
result.update(all_tags_list)
|
||||
|
||||
# get tags from image name if any
|
||||
if ":" in image_name:
|
||||
(image_name, tag_name) = image_name.split(":")
|
||||
result = set(tag_name)
|
||||
|
||||
return result
|
||||
|
||||
def main_loop(args):
|
||||
|
||||
@@ -384,29 +415,13 @@ def main_loop(args):
|
||||
print "---------------------------------"
|
||||
print "Image: {0}".format(image_name)
|
||||
|
||||
tags_list = set()
|
||||
all_tags_list = registry.list_tags(image_name)
|
||||
|
||||
if not all_tags_list:
|
||||
print " no tags!"
|
||||
continue
|
||||
|
||||
if args.tags_like:
|
||||
for tag_like in args.tags_like:
|
||||
print "tag like: {0}".format(tag_like)
|
||||
for tag in all_tags_list:
|
||||
if re.search(tag_like, tag):
|
||||
print "Adding {0} to tags list".format(tag)
|
||||
tags_list.add(tag)
|
||||
|
||||
# get tags from arguments if any
|
||||
if ":" in image_name:
|
||||
(image_name, tag_name) = image_name.split(":")
|
||||
tags_list.add(tag_name)
|
||||
|
||||
|
||||
if len(tags_list) == 0:
|
||||
tags_list.update(all_tags_list)
|
||||
tags_list = get_tags(all_tags_list, image_name, args.tags_like)
|
||||
|
||||
# print tags and optionally layers
|
||||
for tag in tags_list:
|
||||
@@ -422,14 +437,7 @@ def main_loop(args):
|
||||
|
||||
# add tags to "tags_to_keep" list, if we have regexp "tags_to_keep" entries:
|
||||
if args.keep_tags_like:
|
||||
for keep_like in args.keep_tags_like:
|
||||
print "keep tag like: {0}".format(keep_like)
|
||||
for tag in tags_list:
|
||||
if re.search(keep_like, tag):
|
||||
print "Adding {0} to keep tags list".format(tag)
|
||||
args.keep_tags.append(tag)
|
||||
|
||||
|
||||
args.keep_tags.append(get_tags_like(args.keep_tags_like, tags_list))
|
||||
|
||||
|
||||
# delete tags if told so
|
||||
|
||||
28
test.py
28
test.py
@@ -1,5 +1,5 @@
|
||||
import unittest
|
||||
from registry import Registry, Requests
|
||||
from registry import Registry, Requests, get_tags
|
||||
from mock import MagicMock
|
||||
import requests
|
||||
|
||||
@@ -20,6 +20,9 @@ class MockRequests:
|
||||
self.return_value.status_code = status_code
|
||||
self.return_value.text = text
|
||||
|
||||
|
||||
|
||||
|
||||
class TestCreateMethod(unittest.TestCase):
|
||||
def test_create_nologin(self):
|
||||
r = Registry.create("testhost", None, False)
|
||||
@@ -178,14 +181,23 @@ class TestListTags(unittest.TestCase):
|
||||
self.assertEqual(response, [])
|
||||
self.assertEqual(self.registry.last_error, "list_tags: invalid json response")
|
||||
|
||||
def test_list_tags_ok_sorted(self):
|
||||
def test_list_one_tag_ok(self):
|
||||
self.registry.http.reset_return_value(status_code=200,
|
||||
text=u'{"name":"image1","tags":["0.1.306", "0.1.300", "0.1.290"]}')
|
||||
def test_list_one_tag_sorted(self):
|
||||
self.registry.http.reset_return_value(status_code=200,
|
||||
text=u'{"name":"image1","tags":["0.1.306", "0.1.300", "0.1.290"]}')
|
||||
|
||||
response = self.registry.list_tags('image1')
|
||||
self.assertEqual(response, ["0.1.290", "0.1.300", "0.1.306"])
|
||||
self.assertEqual(self.registry.last_error, None)
|
||||
|
||||
def test_list_tags_like_various(self):
|
||||
tags_list = set(['FINAL_0.1', 'SNAPSHOT_0.1', "0.1.SNAP", "1.0.0_FINAL"])
|
||||
self.assertEqual(get_tags(tags_list, "", set(["FINAL"])), set(["FINAL_0.1", "1.0.0_FINAL"]))
|
||||
self.assertEqual(get_tags(tags_list, "", set(["SNAPSHOT"])), set(['SNAPSHOT_0.1']))
|
||||
self.assertEqual(get_tags(tags_list, "", set()),
|
||||
set(['FINAL_0.1', 'SNAPSHOT_0.1', "0.1.SNAP", "1.0.0_FINAL"]))
|
||||
self.assertEqual(get_tags(tags_list, "", set(["ABSENT"])), set())
|
||||
|
||||
|
||||
response = self.registry.list_tags('image1')
|
||||
self.assertEqual(response, ["0.1.290", "0.1.300", "0.1.306"])
|
||||
self.assertEqual(self.registry.last_error, None)
|
||||
|
||||
|
||||
class TestListDigest(unittest.TestCase):
|
||||
|
||||
Reference in New Issue
Block a user