-
Notifications
You must be signed in to change notification settings - Fork 55
Expand file tree
/
Copy pathopener.py
More file actions
50 lines (43 loc) · 1.5 KB
/
opener.py
File metadata and controls
50 lines (43 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# coding: utf-8
"""Defines the S3FSpener."""
from __future__ import absolute_import
from __future__ import print_function
from __future__ import unicode_literals
__all__ = ['S3FSOpener']
from fs.opener import Opener
from fs.opener.errors import OpenerError
from ._s3fs import S3FS
class S3FSOpener(Opener):
protocols = ['s3']
def open_fs(self, fs_url, parse_result, writeable, create, cwd):
bucket_name, _, dir_path = parse_result.resource.partition('/')
if not bucket_name:
raise OpenerError(
"invalid bucket name in '{}'".format(fs_url)
)
use_ssl = (
parse_result.params['use_ssl'] == '1'
if 'use_ssl' in parse_result.params
else True
)
verify = parse_result.params.get('verify', None)
if verify == '':
verify = False
strict = (
parse_result.params['strict'] == '1'
if 'strict' in parse_result.params
else True
)
s3fs = S3FS(
bucket_name,
dir_path=dir_path or '/',
aws_access_key_id=parse_result.username or None,
aws_secret_access_key=parse_result.password or None,
use_ssl=use_ssl,
verify=verify,
endpoint_url=parse_result.params.get('endpoint_url', None),
acl=parse_result.params.get('acl', None),
cache_control=parse_result.params.get('cache_control', None),
strict=strict
)
return s3fs