本文整理汇总了Python中azure.storage.blob.BlobService.list_containers方法的典型用法代码示例。如果您正苦于以下问题:Python BlobService.list_containers方法的具体用法?Python BlobService.list_containers怎么用?Python BlobService.list_containers使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类azure.storage.blob.BlobService
的用法示例。
在下文中一共展示了BlobService.list_containers方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: AzureStorage
# 需要导入模块: from azure.storage.blob import BlobService [as 别名]
# 或者: from azure.storage.blob.BlobService import list_containers [as 别名]
class AzureStorage(Storage):
account_name = settings.AZURE_ACCOUNT_NAME
account_key = settings.AZURE_ACCOUNT_KEY
azure_container = settings.AZURE_CONTAINER
def __init__(self, *args, **kwargs):
super(AzureStorage, self).__init__(*args, **kwargs)
self._connection = None
@property
def connection(self):
if self._connection is None:
# Create connection
self._connection = BlobService(self.account_name, self.account_key)
# Create container if needed
containers = [c for c in self._connection.list_containers(prefix=self.azure_container) if c.name == self.azure_container ]
if len(containers) == 0:
self._connection.create_container(self.azure_container, {'origin': 'created by Django web app'}, fail_on_exist=True)
return self._connection
def _open(self, name, mode="rb"):
stream = SimpleUploadedFile(name, None)
self.connection.get_blob_to_file(self.azure_container, name, stream)
stream.seek(0)
return stream
def exists(self, name):
try:
self.connection.get_blob_properties(self.azure_container, name)
except AzureMissingResourceHttpError:
return False
else:
return True
def delete(self, name):
self.connection.delete_blob(self.azure_container, name)
def size(self, name):
properties = self.connection.get_blob_properties(self.azure_container, name)
return properties["content-length"]
def _save(self, name, content):
self.connection.put_block_blob_from_file(self.azure_container, name, content)
return name
def url(self, name):
ap = AccessPolicy(expiry=(timezone.datetime.utcnow() + timezone.timedelta(seconds=600)).strftime('%Y-%m-%dT%H:%M:%SZ'), \
start=(timezone.datetime.utcnow() + timezone.timedelta(seconds=-600)).strftime('%Y-%m-%dT%H:%M:%SZ'), \
permission='r')
sap = SharedAccessPolicy(ap)
sas = SharedAccessSignature(self.account_name, self.account_key)
url = sas.generate_signed_query_string(path=self.azure_container + '/' + name, resource_type='b', shared_access_policy=sap)
return self.connection.make_blob_url(self.azure_container, name) + "?" + url
示例2: _BlobStorageTestCase
# 需要导入模块: from azure.storage.blob import BlobService [as 别名]
# 或者: from azure.storage.blob.BlobService import list_containers [as 别名]
class _BlobStorageTestCase(_TestCase):
def _get_container_name(self, handler_name):
container = _get_handler_config_value(handler_name, 'container')
if container:
container = container.replace('_', '-').lower()
return container
def setUp(self):
self.service = BlobService(ACCOUNT_NAME, ACCOUNT_KEY)
# ensure that there's no log file in the container before each test
containers = [c.name for c in self.service.list_containers()]
for handler in LOGGING['handlers']:
container = self._get_container_name(handler)
if container in containers:
filename = _get_handler_config_value(handler, 'filename')
basename = os.path.basename(filename)
for blob in self.service.list_blobs(container, prefix=basename):
self.service.delete_blob(container, blob.name)
示例3: AzureFS
# 需要导入模块: from azure.storage.blob import BlobService [as 别名]
# 或者: from azure.storage.blob.BlobService import list_containers [as 别名]
class AzureFS(LoggingMixIn, Operations):
"""Azure Blob Storage filesystem"""
blobs = None
containers = dict() # <cname, dict(stat:dict,
#files:None|dict<fname, stat>)
fds = dict() # <fd, (path, bytes, dirty)>
fd = 0
def __init__(self, account, key):
self.blobs = BlobService(account, key)
self.rebuild_container_list()
def convert_to_epoch(self, date):
"""Converts Tue, 31 Jul 2012 07:17:34 GMT format to epoch"""
return int(time.mktime(time.strptime(date, TIME_FORMAT)))
def rebuild_container_list(self):
cmap = dict()
cnames = set()
for c in self.blobs.list_containers():
date = c.properties.last_modified
cstat = dict(st_mode=(S_IFDIR | 0755), st_uid=getuid(), st_size=0,
st_mtime=self.convert_to_epoch(date))
cname = c.name
cmap['/' + cname] = dict(stat=cstat, files=None)
cnames.add(cname)
cmap['/'] = dict(files={},
stat=dict(st_mode=(S_IFDIR | 0755),
st_uid=getuid(), st_size=0,
st_mtime=int(time.time())))
self.containers = cmap # destroys fs tree cache resistant to misses
def _parse_path(self, path): # returns </dir, file(=None)>
if path.count('/') > 1: # file
return str(path[:path.rfind('/')]), str(path[path.rfind('/') + 1:])
else: # dir
pos = path.rfind('/', 1)
if pos == -1:
return path, None
else:
return str(path[:pos]), None
def parse_container(self, path):
base_container = path[1:] # /abc/def/g --> abc
if base_container.find('/') > -1:
base_container = base_container[:base_container.find('/')]
return str(base_container)
def _get_dir(self, path, contents_required=False):
if not self.containers:
self.rebuild_container_list()
if path in self.containers and not (contents_required and \
self.containers[path]['files'] is None):
return self.containers[path]
cname = self.parse_container(path)
if '/' + cname not in self.containers:
raise FuseOSError(ENOENT)
else:
if self.containers['/' + cname]['files'] is None:
# fetch contents of container
log.info("------> CONTENTS NOT FOUND: %s" % cname)
blobs = self.blobs.list_blobs(cname)
dirstat = dict(st_mode=(S_IFDIR | 0755), st_size=0,
st_uid=getuid(), st_mtime=time.time())
if self.containers['/' + cname]['files'] is None:
self.containers['/' + cname]['files'] = dict()
for f in blobs:
blob_name = f.name
blob_date = f.properties.last_modified
blob_size = long(f.properties.content_length)
node = dict(st_mode=(S_IFREG | 0644), st_size=blob_size,
st_mtime=self.convert_to_epoch(blob_date),
st_uid=getuid())
if blob_name.find('/') == -1: # file just under container
self.containers['/' + cname]['files'][blob_name] = node
return self.containers['/' + cname]
return None
def _get_file(self, path):
d, f = self._parse_path(path)
dir = self._get_dir(d, True)
if dir is not None and f in dir['files']:
return dir['files'][f]
def getattr(self, path, fh=None):
d, f = self._parse_path(path)
#.........这里部分代码省略.........
示例4: AzureFS
# 需要导入模块: from azure.storage.blob import BlobService [as 别名]
# 或者: from azure.storage.blob.BlobService import list_containers [as 别名]
class AzureFS(LoggingMixIn, Operations):
"""
Azure Blob Storage filesystem
"""
blobs = None
containers = dict() # {cname: {stat:dict, files:None|{fname: stat}}
fd = 0
def __init__(self, account, key):
self.blobs = BlobService(account, key)
self._rebuild_container_list()
def _rebuild_container_list(self):
cmap = dict()
cnames = set()
for c in self.blobs.list_containers():
cstat = make_stat(stat.S_IFDIR | 0755, c.properties)
cname = c.name
cmap['/' + cname] = dict(stat=cstat, files=None)
cnames.add(cname)
cmap['/'] = dict(files={}, stat=make_stat(stat.S_IFDIR | 0755))
self.containers = cmap # destroys fs tree cache resistant to misses
@staticmethod
def _parse_path(path): # returns </dir, file(=None)>
if path.count('/') > 1: # file
return str(path[:path.rfind('/')]), str(path[path.rfind('/') + 1:])
else: # dir
pos = path.rfind('/', 1)
if pos == -1:
return path, None
else:
return str(path[:pos]), None
@staticmethod
def _parse_container(path):
base_container = path[1:] # /abc/def/g --> abc
if base_container.find('/') > -1:
base_container = base_container[:base_container.find('/')]
return str(base_container)
def _get_dir(self, path, contents_required=False, force=False):
log.debug("get_dir: contents_required=%s, force=%s,"
" has_container=%s, path=%s",
"t" if contents_required else "f",
"t" if force else "f",
"t" if path in self.containers else "f",
path)
cname = self._parse_container(path)
if 'process' in self.containers['/' + cname] and \
self.containers['/' + cname]['process'] is not None:
p = self.containers['/' + cname]['process']
if not p.is_alive():
p.join()
self.containers['/' + cname]['process'] = None
if not self.containers:
log.info("get_dir: rebuilding container list")
self._rebuild_container_list()
if path in self.containers:
container = self.containers[path]
if not contents_required:
return container
if not force and container['files'] is not None:
return container
if '/' + cname not in self.containers:
log.info("get_dir: no such container: /%s", cname)
raise FuseOSError(errno.ENOENT)
else:
container = self.containers['/' + cname]
try:
log.info(">>>> %s - %s ",
cname,
container['process'])
except KeyError:
log.info(">>>> no process: %s " % cname)
if container['files'] is None or force is True:
# fetch contents of container
log.info("Contents not found in the cache index: %s", cname)
process = container.get('process', None)
if process is not None and process.is_alive():
# We do nothing. Some thread is still working,
# getting list of blobs from the container.
log.info("Fetching blob list for '%s' is already"
" handled by %s", cname, process)
else:
# No thread running for this container, launch a new one
m = Manager()
files = m.dict()
process = Process(target=get_files_from_blob_service,
args=(self.blobs, cname, files),
name="list-blobs/%s" % cname)
#.........这里部分代码省略.........