基于JFROG的REST API去自动遍历多层目录下的文件夹,用来下载
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2018-05-02 18:24:37
# @Author : Zhu Robin
import requests
from json import loads
class PhraseArt(object):
"""Phrase art url and make it more ease to operator."""
api_str = "/artifactory/api/storage/"
def __init__(self, url):
if url.endswith("/"):
url = url[:-1]
if self.api_str in url:
self.api_url = url
self.url = url.replace(self.api_str,"/artifactory/")
else:
self.url = url
self.api_url = url.replace("/artifactory/",self.api_str)
r = requests.get(self.api_url)
if r.status_code == 200:
self.data = loads(r.content)
for k, v in self.data.items():
setattr(self, k, v)
self.return_full_path = True
def __getattribute__(self, key):
# called when use like PhraseArt.somekey
try:
return super(PhraseArt, self).__getattribute__(key)
except AttributeError:
raise
@property
def md5(self):
return self.checksums["md5"]
@property
def sha1(self):
return self.checksums["sha1"]
@property
def sub_file(self):
if self.return_full_path == True:
replace_str = self.url + "/"
else:
replace_str = ""
return [one["uri"].replace("/",replace_str) for one in self.children if one["folder"] == False]
@property
def sub_dir(self):
if self.return_full_path == True:
replace_str = self.url + "/"
else:
replace_str = ""
return [one["uri"].replace("/",replace_str) for one in self.children if one["folder"] == True]
@property
def sub_guys(self):
if self.return_full_path == True:
replace_str = self.url + "/"
else:
replace_str = ""
return [one["uri"].replace("/",replace_str) for one in self.children]
class DownloadArt(PhraseArt):
"""docstring for DownloadArt"""
def __init__(self, url):
super(DownloadArt, self).__init__(url)
self.sub_files = list()
self.temp_dir = list()
if hasattr(self, "children"):
self.temp_dir.append(self.uri)
def walk_once(self):
if self.temp_dir:
one = self.temp_dir.pop()
p = PhraseArt(one)
self.sub_files += p.sub_file
self.temp_dir += p.sub_dir
self.walk_once()
@property
def all_sub_files(self):
self.walk_once()
return self.sub_files
if __name__ == '__main__':
art_url = "https://*****.china.nsn-net.net:443/artifactory/***/aa"
aa = DownloadArt(art_url)
print aa.all_sub_files
Todo:下载部分未完待续......
网友评论