From 4da21e928de59c144649db69511950a35fc51bb4 Mon Sep 17 00:00:00 2001 From: Lingchao Xin Date: Mon, 2 Dec 2013 18:30:00 +0800 Subject: [PATCH] Add ks_diff of image diff Support both remote and local path diff Change-Id: I5c93663b0340b373e03e35ce83da067e03b152be --- setup.py | 3 ++- snapdiff/__init__.py | 1 + snapdiff/image.py | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 snapdiff/image.py diff --git a/setup.py b/setup.py index e4aaaa4..b2b682d 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,8 @@ setup(name=snapdiff.__title__, scripts=['tools/repo-diff',], packages=['snapdiff',], include_package_data=True, - install_requires=['Jinja2>=2.6', 'requests>=2.0.1'], + install_requires=['Jinja2>=2.6', 'requests>=2.0.1', + 'beautifulsoup4>=4.3.2'], zip_safe=False, ) diff --git a/snapdiff/__init__.py b/snapdiff/__init__.py index afe3d8e..9e20679 100644 --- a/snapdiff/__init__.py +++ b/snapdiff/__init__.py @@ -15,4 +15,5 @@ __title__ = 'python-snapdiff' __version__ = '0.1' from .repo import * +from .image import * diff --git a/snapdiff/image.py b/snapdiff/image.py new file mode 100644 index 0000000..1488aa9 --- /dev/null +++ b/snapdiff/image.py @@ -0,0 +1,40 @@ +from bs4 import BeautifulSoup +import difflib +import glob +import os +import requests +from StringIO import StringIO + + +def _get_ks(url): + if url.startswith('http') or url.startswith('https'): + response = requests.get(url) + bs = BeautifulSoup(response.content) + tags = bs.findAll('a') + for tag in tags: + if '.ks' in tag.get('href'): + ks = tag.get('href') # get ks + ks_response = requests.get(os.path.join(url, ks)) + if ks_response.status_code == 200: + # use StringIO to keep wrapped lines + return ks, StringIO(ks_response.content).readlines() + break + else: + kss = glob.glob(os.path.join(url, '*.ks')) + if kss: + ks = kss[0] + try: + with open(ks, 'rb') as _ks: + return ks, _ks.readlines() + except IOError, err: + print err + + return '', '' + +def ks_diff(old, new): + ks_old, ks_new = _get_ks(old), _get_ks(new) + + for line in difflib.unified_diff(ks_old[1], ks_new[1], fromfile=ks_old[0], + tofile=ks_new[0]): + yield line + -- 2.34.1