aboutsummaryrefslogtreecommitdiff
path: root/license_protected_downloads/common.py
diff options
context:
space:
mode:
authorAndy Doan <andy.doan@linaro.org>2015-06-08 10:20:14 -0500
committerAndy Doan <andy.doan@linaro.org>2015-06-17 11:10:43 -0500
commit6818c3e7d6c67f791b1ebc2994aa139ff2139e28 (patch)
tree5962fe7dcfc80e9a72b5c26a49c9633a8f9b2901 /license_protected_downloads/common.py
parent958642fe2deacb34f05c92d34a846534a74fac2c (diff)
cleanup dir_list function (create Artifact object)
This function has grown too complex to manage. As we move to S3 we need to deal with artifacts more generically (ie they could be local or remote). This is the beginnings of that abstraction that we can build on. The Artifact object splits up all the logic that was done by dir_list into smaller methods that can share instance data. Future patches will convert logic for things like getting the build-info file for an artifact or determining if the file is protected. Change-Id: I245c3b31e1642e1ef43170f4f8b71e9416c301fc
Diffstat (limited to 'license_protected_downloads/common.py')
-rw-r--r--license_protected_downloads/common.py126
1 files changed, 70 insertions, 56 deletions
diff --git a/license_protected_downloads/common.py b/license_protected_downloads/common.py
index 9c9aa47..580d959 100644
--- a/license_protected_downloads/common.py
+++ b/license_protected_downloads/common.py
@@ -229,70 +229,84 @@ def _sizeof_fmt(num):
return "%3.1f%s" % (num, 'T')
-def dir_list(url, path, human_readable=True):
- files = _listdir(path)
- listing = []
-
- for file_name in files:
- if _hidden_file(file_name):
- continue
-
- name = file_name
- file_name = os.path.join(path, file_name)
+class Artifact(object):
+ def __init__(self, urlbase, file_name, human_readable, local_path):
+ self.human_readable = human_readable
+ self.file_name = file_name
+ self.urlbase = urlbase
+ self.full_path = os.path.join(local_path, file_name)
+
+ def url(self):
+ url = self.urlbase
+ if url:
+ if url[0] != '/':
+ url = '/' + url
+ if url[-1] != '/':
+ url += '/'
+ else:
+ url = '/'
+ return url + self.file_name
- if os.path.exists(file_name):
- mtime = os.path.getmtime(file_name)
+ def get_type(self):
+ if os.path.isdir(self.full_path):
+ return 'folder'
else:
- # If the file we are looking at doesn't exist (broken symlink for
- # example), it doesn't have a mtime.
- mtime = 0
+ mtype = mimetypes.guess_type(self.full_path)[0]
+ if self.human_readable:
+ if mtype is None:
+ mtype = 'other'
+ elif mtype.split('/')[0] == 'text':
+ mtype = 'text'
+ return mtype
+
+ def get_size(self):
+ size = 0
+ # ensure the file we are looking at exists (not broken symlink)
+ if os.path.exists(self.full_path):
+ size = os.path.getsize(self.full_path)
+ if self.human_readable:
+ size = _sizeof_fmt(size)
+ return size
+
+ def get_mtime(self):
+ mtime = 0
+ # ensure the file we are looking at exists (not broken symlink)
+ if os.path.exists(self.full_path):
+ mtime = os.path.getmtime(self.full_path)
+ if self.human_readable:
+ mtime = datetime.fromtimestamp(mtime)
+ mtime = mtime.strftime('%d-%b-%Y %H:%M')
+ return mtime
- if os.path.isdir(file_name):
- target_type = "folder"
- license_digest_list = []
+ def get_listing(self):
+ if os.path.isdir(self.full_path):
+ ldl = []
else:
- target_type = mimetypes.guess_type(name)[0]
- pathname = os.path.join(path, name)
try:
- license_digest_list = is_protected(pathname)
+ ldl = is_protected(self.full_path)
except Exception as e:
- print("Invalid BUILD-INFO.txt for %s: %s" % (pathname, repr(e)))
+ print("Invalid BUILD-INFO.txt for %s: %s" % (
+ self.full_path, repr(e)))
traceback.print_exc()
- license_digest_list = "INVALID"
- license_list = models.License.objects.all_with_hashes(
- license_digest_list)
+ ldl = "INVALID"
+ ll = models.License.objects.all_with_hashes(ldl)
+ return {
+ 'name': self.file_name,
+ 'size': self.get_size(),
+ 'type': self.get_type(),
+ 'mtime': self.get_mtime(),
+ 'license_digest_list': ldl,
+ 'license_list': ll,
+ 'url': self.url(),
+ }
- if os.path.exists(file_name):
- size = os.path.getsize(file_name)
- else:
- # If the file we are looking at doesn't exist (broken symlink for
- # example), it doesn't have a size
- size = 0
-
- if not re.search(r'^/', url) and url != '':
- url = '/' + url
- # Since the code below assume no trailing slash, make sure that
- # there isn't one.
- url = re.sub(r'/$', '', url)
+def dir_list(url, path, human_readable=True):
+ files = _listdir(path)
+ listing = []
- if human_readable:
- if mtime:
- mtime = datetime.fromtimestamp(mtime)
- mtime = mtime.strftime('%d-%b-%Y %H:%M')
- if target_type:
- if target_type.split('/')[0] == "text":
- target_type = "text"
- else:
- target_type = "other"
-
- size = _sizeof_fmt(size)
-
- listing.append({'name': name,
- 'size': size,
- 'type': target_type,
- 'mtime': mtime,
- 'license_digest_list': license_digest_list,
- 'license_list': license_list,
- 'url': url + '/' + name})
+ for file_name in files:
+ if not _hidden_file(file_name):
+ artifact = Artifact(url, file_name, human_readable, path)
+ listing.append(artifact.get_listing())
return listing