From 6a3ee4cfa97e25dd8d4425a8735fc2b24ea338f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Tue, 10 Apr 2018 20:11:20 +0200 Subject: [PATCH 01/49] [REF] Several refactor for splitting amazon storage - refactor the way to build the url (use a generic base_url). - make more generic the storage backend by moving specific feature in storage file - better name for variable "name" in store and retrieve method use "relative_path" instead - extra amazon S3 storage component in a separated module with test using vcrpy --- storage_backend_s3/README.rst | 42 +++++++++++++ storage_backend_s3/__init__.py | 4 ++ storage_backend_s3/__manifest__.py | 26 ++++++++ storage_backend_s3/components/__init__.py | 3 + storage_backend_s3/components/s3_adapter.py | 61 +++++++++++++++++++ storage_backend_s3/models/__init__.py | 3 + storage_backend_s3/models/storage_backend.py | 41 +++++++++++++ storage_backend_s3/tests/__init__.py | 3 + ..._setting_and_reading_data_from_bucket.yaml | 55 +++++++++++++++++ ...tting_and_reading_data_from_directory.yaml | 55 +++++++++++++++++ storage_backend_s3/tests/test_amazon_s3.py | 61 +++++++++++++++++++ .../views/backend_storage_view.xml | 18 ++++++ 12 files changed, 372 insertions(+) create mode 100644 storage_backend_s3/README.rst create mode 100644 storage_backend_s3/__init__.py create mode 100644 storage_backend_s3/__manifest__.py create mode 100644 storage_backend_s3/components/__init__.py create mode 100644 storage_backend_s3/components/s3_adapter.py create mode 100644 storage_backend_s3/models/__init__.py create mode 100644 storage_backend_s3/models/storage_backend.py create mode 100644 storage_backend_s3/tests/__init__.py create mode 100644 storage_backend_s3/tests/fixtures/cassettes/test_00_setting_and_reading_data_from_bucket.yaml create mode 100644 storage_backend_s3/tests/fixtures/cassettes/test_10_setting_and_reading_data_from_directory.yaml create mode 100644 storage_backend_s3/tests/test_amazon_s3.py create mode 100644 storage_backend_s3/views/backend_storage_view.xml diff --git a/storage_backend_s3/README.rst b/storage_backend_s3/README.rst new file mode 100644 index 0000000000..a94807a059 --- /dev/null +++ b/storage_backend_s3/README.rst @@ -0,0 +1,42 @@ + +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +=================== +Storage backend S3 +=================== + +Add the possibility to store and get data from amazon S3 for your storage backend + + + +Installation +============ + +To install this module, you need to: + +#. (root) pip install boto + + +Known issues / Roadmap +====================== + +Update README with the last model of README when migration to v11 in OCA + + +Credits +======= + + +Contributors +------------ + +* Sebastien Beau +* Raphaël Reverdy + + +Maintainer +---------- + +* Akretion diff --git a/storage_backend_s3/__init__.py b/storage_backend_s3/__init__.py new file mode 100644 index 0000000000..3fbae039c0 --- /dev/null +++ b/storage_backend_s3/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import models +from . import components diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py new file mode 100644 index 0000000000..01bf29b61a --- /dev/null +++ b/storage_backend_s3/__manifest__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Akretion (http://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Storage Backend S3", + "summary": "Implement amazon S3 Storage", + "version": "10.0.1.0.0", + "category": "Uncategorized", + "website": "www.akretion.com", + "author": " Akretion", + "license": "AGPL-3", + 'installable': True, + "external_dependencies": { + "python": [ + "boto3", + ], + }, + "depends": [ + "storage_backend", + ], + "data": [ + "views/backend_storage_view.xml", + ], +} diff --git a/storage_backend_s3/components/__init__.py b/storage_backend_s3/components/__init__.py new file mode 100644 index 0000000000..fff15c6b4c --- /dev/null +++ b/storage_backend_s3/components/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import s3_adapter diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py new file mode 100644 index 0000000000..4869fba1c1 --- /dev/null +++ b/storage_backend_s3/components/s3_adapter.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Akretion (http://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +import base64 +import logging +from odoo.exceptions import UserError +from odoo import _ +from odoo.addons.component.core import Component +import socket + +logger = logging.getLogger(__name__) + +try: + import boto3 +except ImportError as err: + logger.debug(err) + + +class S3StorageBackend(Component): + _name = 's3.adapter' + _inherit = 'base.storage.adapter' + _usage = 'amazon_s3' + + def _get_resource(self): + account = self.collection._get_existing_keychain() + return boto3.Session( + aws_access_key_id=self.collection.aws_access_key_id, + aws_secret_access_key=account._get_password(), + region_name=self.collection.aws_region).resource('s3') + + def _get_path(self, relative_path): + if self.collection.directory_path: + return "%s/%s" % (self.collection.directory_path, relative_path) + else: + return relative_path + + def _get_amazon_s3_object(self, relative_path): + s3 = self._get_resource() + path = self._get_path(relative_path) + return s3.Object(self.collection.aws_bucket, path) + + def store_data(self, relative_path, datas, mimetype=None): + try: + s3object = self._get_amazon_s3_object(relative_path) + s3object.put( + Body=datas, + ContentType=mimetype, + CacheControl=self.collection.aws_cache_control or '') + except socket.error: + raise UserError(_('S3 server not available')) + + def retrieve_data(self, relative_path): + try: + s3object = self._get_amazon_s3_object(relative_path) + datas = s3object.get()['Body'].read() + except socket.error: + raise UserError(_('S3 server not available')) + return datas and base64.b64encode(datas) or False diff --git a/storage_backend_s3/models/__init__.py b/storage_backend_s3/models/__init__.py new file mode 100644 index 0000000000..4731534aa1 --- /dev/null +++ b/storage_backend_s3/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import storage_backend diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py new file mode 100644 index 0000000000..bef12038ce --- /dev/null +++ b/storage_backend_s3/models/storage_backend.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Akretion (http://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models +import logging +_logger = logging.getLogger(__name__) + +try: + import boto3 +except ImportError as err: + _logger.debug(err) + + +class StorageBackend(models.Model): + _inherit = 'storage.backend' + + def _get_aws_region(self): + session = boto3.session.Session() + return [ + (region, region.replace('-', ' ').capitalize()) + for region in session.get_available_regions('s3')] + + backend_type = fields.Selection( + selection_add=[('amazon_s3', 'Amazon S3')]) + aws_bucket = fields.Char( + sparse="data", + string="Bucket") + aws_access_key_id = fields.Char( + sparse="data", + string="Access Key ID") + aws_secret_access_key = fields.Char( + related="password", + string="Secret Access Key") + aws_region = fields.Selection( + selection=_get_aws_region, + sparse="data", + string="Region") + aws_cache_control = fields.Char( + default='max-age=31536000, public') diff --git a/storage_backend_s3/tests/__init__.py b/storage_backend_s3/tests/__init__.py new file mode 100644 index 0000000000..8f19474001 --- /dev/null +++ b/storage_backend_s3/tests/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import test_amazon_s3 diff --git a/storage_backend_s3/tests/fixtures/cassettes/test_00_setting_and_reading_data_from_bucket.yaml b/storage_backend_s3/tests/fixtures/cassettes/test_00_setting_and_reading_data_from_bucket.yaml new file mode 100644 index 0000000000..d1e8279a3a --- /dev/null +++ b/storage_backend_s3/tests/fixtures/cassettes/test_00_setting_and_reading_data_from_bucket.yaml @@ -0,0 +1,55 @@ +interactions: +- request: + body: !!python/object:StringIO.StringIO + buf: This is a simple file + buflist: [] + closed: false + len: 21 + pos: 0 + softspace: 0 + headers: + Cache-Control: ['max-age=31536000, public'] + Content-Length: ['21'] + Content-MD5: [GQqjEXsRqrPyxfTl99nkAg==] + Content-Type: [text/plain] + Expect: [100-continue] + User-Agent: [Boto3/1.7.3 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.3 + Resource] + X-Amz-Content-SHA256: [UNSIGNED-PAYLOAD] + X-Amz-Date: [20180410T180648Z] + method: !!python/unicode 'PUT' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + date: ['Tue, 10 Apr 2018 18:06:49 GMT'] + etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] + server: [AmazonS3] + x-amz-id-2: [v92/9RmjGyYmXZRVIa1/UFDceo97+x22MXfQLOQqjEsw8K6HW4N8vA0hkULwLiXl/OpbQKWQwA0=] + x-amz-request-id: [0531862004701E79] + status: {code: 200, message: OK} +- request: + body: null + headers: + User-Agent: [Boto3/1.7.3 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.3 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20180410T180648Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt + response: + body: {string: !!python/unicode 'This is a simple file'} + headers: + accept-ranges: [bytes] + cache-control: ['max-age=31536000, public'] + content-length: ['21'] + content-type: [text/plain] + date: ['Tue, 10 Apr 2018 18:06:49 GMT'] + etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] + last-modified: ['Tue, 10 Apr 2018 18:06:49 GMT'] + server: [AmazonS3] + x-amz-id-2: [bcNPxbuUE203I2ErsGTTielpsvBT1IAfrmBSEcgG99iwfmo2aeNZBHlkPRuXT5T4QWsr2E+X4bw=] + x-amz-request-id: [271D58C3673A4778] + status: {code: 200, message: OK} +version: 1 diff --git a/storage_backend_s3/tests/fixtures/cassettes/test_10_setting_and_reading_data_from_directory.yaml b/storage_backend_s3/tests/fixtures/cassettes/test_10_setting_and_reading_data_from_directory.yaml new file mode 100644 index 0000000000..40d11ca1bc --- /dev/null +++ b/storage_backend_s3/tests/fixtures/cassettes/test_10_setting_and_reading_data_from_directory.yaml @@ -0,0 +1,55 @@ +interactions: +- request: + body: !!python/object:StringIO.StringIO + buf: This is a simple file + buflist: [] + closed: false + len: 21 + pos: 0 + softspace: 0 + headers: + Cache-Control: ['max-age=31536000, public'] + Content-Length: ['21'] + Content-MD5: [GQqjEXsRqrPyxfTl99nkAg==] + Content-Type: [text/plain] + Expect: [100-continue] + User-Agent: [Boto3/1.7.3 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.3 + Resource] + X-Amz-Content-SHA256: [UNSIGNED-PAYLOAD] + X-Amz-Date: [20180410T180649Z] + method: !!python/unicode 'PUT' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + date: ['Tue, 10 Apr 2018 18:06:50 GMT'] + etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] + server: [AmazonS3] + x-amz-id-2: [03jxStVvVOVVyq9FQbWsBjejRi34eVjUoTie30vbPtB2HRYOxTL12tzvI2u14iSqCr7QKeWDC2U=] + x-amz-request-id: [7DDB6EFEAEA0ACC0] + status: {code: 200, message: OK} +- request: + body: null + headers: + User-Agent: [Boto3/1.7.3 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.3 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20180410T180649Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt + response: + body: {string: !!python/unicode 'This is a simple file'} + headers: + accept-ranges: [bytes] + cache-control: ['max-age=31536000, public'] + content-length: ['21'] + content-type: [text/plain] + date: ['Tue, 10 Apr 2018 18:06:50 GMT'] + etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] + last-modified: ['Tue, 10 Apr 2018 18:06:50 GMT'] + server: [AmazonS3] + x-amz-id-2: [vq2QAqgty2k59hzwgcHOc4yB0q7Clc1JHyT3Z1hBVaBZkL8nx9T1glVbJVzIzbfrFHTvGHa6zI0=] + x-amz-request-id: [0606356005EF91EB] + status: {code: 200, message: OK} +version: 1 diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py new file mode 100644 index 0000000000..2a208a40b0 --- /dev/null +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Akretion (http://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +# pylint: disable=missing-manifest-dependency +# disable warning on 'vcr' missing in manifest: this is only a dependency for +# dev/tests + +from odoo.addons.storage_backend.tests.common import Common +import os +from os.path import dirname, join +import base64 +from vcr import VCR +import logging +_logger = logging.getLogger(__name__) + + +logging.getLogger("vcr").setLevel(logging.WARNING) + +recorder = VCR( + record_mode='once', + cassette_library_dir=join(dirname(__file__), 'fixtures/cassettes'), + path_transformer=VCR.ensure_suffix('.yaml'), + filter_headers=['Authorization'], +) + + +class AmazonS3Case(Common): + + def setUp(self): + super(AmazonS3Case, self).setUp() + self.backend = self.env.ref('storage_backend.default_storage_backend') + self.backend.write({ + 'backend_type': 'amazon_s3', + 'aws_bucket': os.environ.get( + 'AWS_BUCKET', 'ak-testing-bucket'), + 'aws_region': os.environ.get( + 'AWS_REGION', 'eu-west-3'), + 'aws_access_key_id': os.environ.get( + 'AWS_ACCESS_KEY_ID', 'FAKEID'), + 'aws_secret_access_key': os.environ.get( + 'AWS_SECRET_ACCESS_KEY', 'FAKESECRET'), + }) + + @recorder.use_cassette + def test_00_setting_and_reading_data_from_bucket(self): + self.backend.store( + self.filename, self.filedata, + is_base64=False, mimetype=u'text/plain') + data = self.backend.retrieve_data(self.filename) + self.assertEqual(base64.b64decode(data), self.filedata) + + @recorder.use_cassette + def test_10_setting_and_reading_data_from_directory(self): + self.backend.directory_path = 'subdirectory/here' + self.backend.store( + self.filename, self.filedata, + is_base64=False, mimetype=u'text/plain') + data = self.backend.retrieve_data(self.filename) + self.assertEqual(base64.b64decode(data), self.filedata) diff --git a/storage_backend_s3/views/backend_storage_view.xml b/storage_backend_s3/views/backend_storage_view.xml new file mode 100644 index 0000000000..0f98cdcdd0 --- /dev/null +++ b/storage_backend_s3/views/backend_storage_view.xml @@ -0,0 +1,18 @@ + + + + storage.backend + + + + + + + + + + + + + + From 2276f2e1f0ab21b2fca4a81e928ec1b9e017de02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Wed, 11 Apr 2018 13:17:44 +0200 Subject: [PATCH 02/49] [REF] split sftp backend in a separated module --- storage_backend_s3/components/s3_adapter.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 4869fba1c1..333350137d 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -31,15 +31,9 @@ def _get_resource(self): aws_secret_access_key=account._get_password(), region_name=self.collection.aws_region).resource('s3') - def _get_path(self, relative_path): - if self.collection.directory_path: - return "%s/%s" % (self.collection.directory_path, relative_path) - else: - return relative_path - def _get_amazon_s3_object(self, relative_path): s3 = self._get_resource() - path = self._get_path(relative_path) + path = self._fullpath(relative_path) return s3.Object(self.collection.aws_bucket, path) def store_data(self, relative_path, datas, mimetype=None): From 03757bcae212edd281cb0f5c0b9299bb3bd5d703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Wed, 11 Apr 2018 19:42:42 +0200 Subject: [PATCH 03/49] [REF] rename method store and retrieve by more explicit method add/get with the specifiation of the type of file binary or base64 --- storage_backend_s3/components/s3_adapter.py | 18 ++++++++---------- storage_backend_s3/tests/test_amazon_s3.py | 19 ++++++++----------- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 333350137d..82692fa51c 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -3,8 +3,6 @@ # @author Sébastien BEAU # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -import base64 import logging from odoo.exceptions import UserError from odoo import _ @@ -31,25 +29,25 @@ def _get_resource(self): aws_secret_access_key=account._get_password(), region_name=self.collection.aws_region).resource('s3') - def _get_amazon_s3_object(self, relative_path): + def _get_object(self, relative_path): s3 = self._get_resource() path = self._fullpath(relative_path) return s3.Object(self.collection.aws_bucket, path) - def store_data(self, relative_path, datas, mimetype=None): + def add(self, relative_path, data, mimetype=None, **kwargs): try: - s3object = self._get_amazon_s3_object(relative_path) + s3object = self._get_object(relative_path) s3object.put( - Body=datas, + Body=data, ContentType=mimetype, CacheControl=self.collection.aws_cache_control or '') except socket.error: raise UserError(_('S3 server not available')) - def retrieve_data(self, relative_path): + def get(self, relative_path, **kwargs): try: - s3object = self._get_amazon_s3_object(relative_path) - datas = s3object.get()['Body'].read() + s3object = self._get_object(relative_path) + data = s3object.get()['Body'].read() except socket.error: raise UserError(_('S3 server not available')) - return datas and base64.b64encode(datas) or False + return data diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index 2a208a40b0..9d22782ca0 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -10,7 +10,6 @@ from odoo.addons.storage_backend.tests.common import Common import os from os.path import dirname, join -import base64 from vcr import VCR import logging _logger = logging.getLogger(__name__) @@ -45,17 +44,15 @@ def setUp(self): @recorder.use_cassette def test_00_setting_and_reading_data_from_bucket(self): - self.backend.store( - self.filename, self.filedata, - is_base64=False, mimetype=u'text/plain') - data = self.backend.retrieve_data(self.filename) - self.assertEqual(base64.b64decode(data), self.filedata) + self.backend.add_b64_data( + self.filename, self.filedata, mimetype=u'text/plain') + data = self.backend.get_b64_data(self.filename) + self.assertEqual(data, self.filedata) @recorder.use_cassette def test_10_setting_and_reading_data_from_directory(self): self.backend.directory_path = 'subdirectory/here' - self.backend.store( - self.filename, self.filedata, - is_base64=False, mimetype=u'text/plain') - data = self.backend.retrieve_data(self.filename) - self.assertEqual(base64.b64decode(data), self.filedata) + self.backend.add_b64_data( + self.filename, self.filedata, mimetype=u'text/plain') + data = self.backend.get_b64_data(self.filename) + self.assertEqual(data, self.filedata) From 55a429d66f88a45061e91d609f67be3de8da9043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Wed, 11 Apr 2018 19:42:42 +0200 Subject: [PATCH 04/49] [REF] refactor test in order to use the same test between the different backend --- ...st_setting_and_getting_data_from_dir.yaml} | 0 ...t_setting_and_getting_data_from_root.yaml} | 0 storage_backend_s3/tests/test_amazon_s3.py | 20 ++++++------------- 3 files changed, 6 insertions(+), 14 deletions(-) rename storage_backend_s3/tests/fixtures/cassettes/{test_10_setting_and_reading_data_from_directory.yaml => test_setting_and_getting_data_from_dir.yaml} (100%) rename storage_backend_s3/tests/fixtures/cassettes/{test_00_setting_and_reading_data_from_bucket.yaml => test_setting_and_getting_data_from_root.yaml} (100%) diff --git a/storage_backend_s3/tests/fixtures/cassettes/test_10_setting_and_reading_data_from_directory.yaml b/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_dir.yaml similarity index 100% rename from storage_backend_s3/tests/fixtures/cassettes/test_10_setting_and_reading_data_from_directory.yaml rename to storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_dir.yaml diff --git a/storage_backend_s3/tests/fixtures/cassettes/test_00_setting_and_reading_data_from_bucket.yaml b/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_root.yaml similarity index 100% rename from storage_backend_s3/tests/fixtures/cassettes/test_00_setting_and_reading_data_from_bucket.yaml rename to storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_root.yaml diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index 9d22782ca0..7aaaa437bc 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -7,7 +7,7 @@ # disable warning on 'vcr' missing in manifest: this is only a dependency for # dev/tests -from odoo.addons.storage_backend.tests.common import Common +from odoo.addons.storage_backend.tests.common import Common, GenericStoreCase import os from os.path import dirname, join from vcr import VCR @@ -25,11 +25,10 @@ ) -class AmazonS3Case(Common): +class AmazonS3Case(Common, GenericStoreCase): def setUp(self): super(AmazonS3Case, self).setUp() - self.backend = self.env.ref('storage_backend.default_storage_backend') self.backend.write({ 'backend_type': 'amazon_s3', 'aws_bucket': os.environ.get( @@ -43,16 +42,9 @@ def setUp(self): }) @recorder.use_cassette - def test_00_setting_and_reading_data_from_bucket(self): - self.backend.add_b64_data( - self.filename, self.filedata, mimetype=u'text/plain') - data = self.backend.get_b64_data(self.filename) - self.assertEqual(data, self.filedata) + def test_setting_and_getting_data_from_root(self): + super(AmazonS3Case, self).test_setting_and_getting_data_from_root() @recorder.use_cassette - def test_10_setting_and_reading_data_from_directory(self): - self.backend.directory_path = 'subdirectory/here' - self.backend.add_b64_data( - self.filename, self.filedata, mimetype=u'text/plain') - data = self.backend.get_b64_data(self.filename) - self.assertEqual(data, self.filedata) + def test_setting_and_getting_data_from_dir(self): + super(AmazonS3Case, self).test_setting_and_getting_data_from_dir() From 90236c0a579d33466580b669a7fd8631973c8cf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Fri, 13 Apr 2018 11:46:58 +0200 Subject: [PATCH 05/49] [IMP] add method for listing directory and deleting file on storage.backend --- storage_backend_s3/components/s3_adapter.py | 40 +++---- ...est_setting_and_getting_data_from_dir.yaml | 103 ++++++++++++++++-- ...st_setting_and_getting_data_from_root.yaml | 103 ++++++++++++++++-- 3 files changed, 205 insertions(+), 41 deletions(-) diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 82692fa51c..edb09b293a 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -4,10 +4,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging -from odoo.exceptions import UserError -from odoo import _ from odoo.addons.component.core import Component -import socket logger = logging.getLogger(__name__) @@ -35,19 +32,24 @@ def _get_object(self, relative_path): return s3.Object(self.collection.aws_bucket, path) def add(self, relative_path, data, mimetype=None, **kwargs): - try: - s3object = self._get_object(relative_path) - s3object.put( - Body=data, - ContentType=mimetype, - CacheControl=self.collection.aws_cache_control or '') - except socket.error: - raise UserError(_('S3 server not available')) - - def get(self, relative_path, **kwargs): - try: - s3object = self._get_object(relative_path) - data = s3object.get()['Body'].read() - except socket.error: - raise UserError(_('S3 server not available')) - return data + s3object = self._get_object(relative_path) + s3object.put( + Body=data, + ContentType=mimetype, + CacheControl=self.collection.aws_cache_control or '') + + def get(self, relative_path): + s3object = self._get_object(relative_path) + return s3object.get()['Body'].read() + + def list(self, relative_path): + resource = self._get_resource() + bucket = resource.Bucket(self.collection.aws_bucket) + dir_path = self.collection.directory_path or '' + return [ + o.key.replace(dir_path, '').lstrip('/') + for o in bucket.objects.filter(Prefix=dir_path)] + + def delete(self, relative_path): + s3object = self._get_object(relative_path) + s3object.delete() diff --git a/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_dir.yaml b/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_dir.yaml index 40d11ca1bc..b2059ac55b 100644 --- a/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_dir.yaml +++ b/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_dir.yaml @@ -1,4 +1,25 @@ interactions: +- request: + body: null + headers: + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20180413T081832Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=subdirectory%2Fhere&encoding-type=url + response: + body: {string: !!python/unicode ' + + ak-testing-bucketsubdirectory/here1000urlfalse'} + headers: + content-type: [application/xml] + date: ['Fri, 13 Apr 2018 08:18:33 GMT'] + server: [AmazonS3] + x-amz-bucket-region: [eu-west-3] + x-amz-id-2: [pkuKd+q/AFPQwqS+dRWuH+UZUNm4rkr5MDByoYX5SW9h8TIE6X8ElwbijSJcY5a7zNqgPlHzWao=] + x-amz-request-id: [D4A96C12D62C2C22] + status: {code: 200, message: OK} - request: body: !!python/object:StringIO.StringIO buf: This is a simple file @@ -13,29 +34,50 @@ interactions: Content-MD5: [GQqjEXsRqrPyxfTl99nkAg==] Content-Type: [text/plain] Expect: [100-continue] - User-Agent: [Boto3/1.7.3 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.3 + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 Resource] X-Amz-Content-SHA256: [UNSIGNED-PAYLOAD] - X-Amz-Date: [20180410T180649Z] + X-Amz-Date: [20180413T081832Z] method: !!python/unicode 'PUT' uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt response: body: {string: !!python/unicode ''} headers: content-length: ['0'] - date: ['Tue, 10 Apr 2018 18:06:50 GMT'] + date: ['Fri, 13 Apr 2018 08:18:33 GMT'] etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] server: [AmazonS3] - x-amz-id-2: [03jxStVvVOVVyq9FQbWsBjejRi34eVjUoTie30vbPtB2HRYOxTL12tzvI2u14iSqCr7QKeWDC2U=] - x-amz-request-id: [7DDB6EFEAEA0ACC0] + x-amz-id-2: [yrv+y17ncSHv5Tv9W3kxvkNPgFBgGHOH3R2DExuNVbj7vrZOGNCdh0qoa4F3EtZP21YkXYUSm8g=] + x-amz-request-id: [93EC659CC84D4818] + status: {code: 200, message: OK} +- request: + body: null + headers: + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20180413T081832Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=subdirectory%2Fhere&encoding-type=url + response: + body: {string: !!python/unicode ' + + ak-testing-bucketsubdirectory/here1000urlfalsesubdirectory/here/test_file.txt2018-04-13T08:18:33.000Z"190aa3117b11aab3f2c5f4e5f7d9e402"215710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} + headers: + content-type: [application/xml] + date: ['Fri, 13 Apr 2018 08:18:33 GMT'] + server: [AmazonS3] + x-amz-bucket-region: [eu-west-3] + x-amz-id-2: [gIDvmtzV3eDRViAOhDknaB3X2rlbdAla2XrhR2WHoWk6UiA5qTFgXr5MvZFbFik4XljmeR4e/Y4=] + x-amz-request-id: [24D41B800115797B] status: {code: 200, message: OK} - request: body: null headers: - User-Agent: [Boto3/1.7.3 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.3 + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 Resource] X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180410T180649Z] + X-Amz-Date: [20180413T081832Z] method: !!python/unicode 'GET' uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt response: @@ -45,11 +87,50 @@ interactions: cache-control: ['max-age=31536000, public'] content-length: ['21'] content-type: [text/plain] - date: ['Tue, 10 Apr 2018 18:06:50 GMT'] + date: ['Fri, 13 Apr 2018 08:18:33 GMT'] etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] - last-modified: ['Tue, 10 Apr 2018 18:06:50 GMT'] + last-modified: ['Fri, 13 Apr 2018 08:18:33 GMT'] + server: [AmazonS3] + x-amz-id-2: [qAcYz021PMfgf7H7Ij/n7EWKFJqVmUuAsdDA0aDrl3pbCqcYRAthE9gfr6m+YssAmn4l+7Th2oc=] + x-amz-request-id: [C17CBA5A6234AC1A] + status: {code: 200, message: OK} +- request: + body: null + headers: + Content-Length: ['0'] + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20180413T081832Z] + method: !!python/unicode 'DELETE' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt + response: + body: {string: !!python/unicode ''} + headers: + date: ['Fri, 13 Apr 2018 08:18:34 GMT'] + server: [AmazonS3] + x-amz-id-2: [CoCs6MfymWaSnF8IFnH9Ck2lz9DCAQpIE+kZCwNG2C+TOAFXmjMueTAjhj6tRHTRM5Alp0drAkY=] + x-amz-request-id: [B175EB94EBB1E2D1] + status: {code: 204, message: No Content} +- request: + body: null + headers: + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20180413T081833Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=subdirectory%2Fhere&encoding-type=url + response: + body: {string: !!python/unicode ' + + ak-testing-bucketsubdirectory/here1000urlfalse'} + headers: + content-type: [application/xml] + date: ['Fri, 13 Apr 2018 08:18:34 GMT'] server: [AmazonS3] - x-amz-id-2: [vq2QAqgty2k59hzwgcHOc4yB0q7Clc1JHyT3Z1hBVaBZkL8nx9T1glVbJVzIzbfrFHTvGHa6zI0=] - x-amz-request-id: [0606356005EF91EB] + x-amz-bucket-region: [eu-west-3] + x-amz-id-2: [6oxJwfWo/i8eFN0JAGP8YBhnqr/Wdlwrj8D8aXON4klINZ0ZAmqwq3XhJPpoG1l5MH3sgkKoTLM=] + x-amz-request-id: [28C17461E998FE0A] status: {code: 200, message: OK} version: 1 diff --git a/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_root.yaml b/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_root.yaml index d1e8279a3a..d41e4bb15a 100644 --- a/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_root.yaml +++ b/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_root.yaml @@ -1,4 +1,25 @@ interactions: +- request: + body: null + headers: + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20180413T081833Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url + response: + body: {string: !!python/unicode ' + + ak-testing-bucket1000urlfalse'} + headers: + content-type: [application/xml] + date: ['Fri, 13 Apr 2018 08:18:34 GMT'] + server: [AmazonS3] + x-amz-bucket-region: [eu-west-3] + x-amz-id-2: [9Hs8X404CedWUE3iBSvD3anxCKaqefjoD6v+x28qVQVkbARuMtCjwTMwUpL3m4cp3qzDSNR29Rw=] + x-amz-request-id: [0605B5108DA41B2C] + status: {code: 200, message: OK} - request: body: !!python/object:StringIO.StringIO buf: This is a simple file @@ -13,29 +34,50 @@ interactions: Content-MD5: [GQqjEXsRqrPyxfTl99nkAg==] Content-Type: [text/plain] Expect: [100-continue] - User-Agent: [Boto3/1.7.3 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.3 + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 Resource] X-Amz-Content-SHA256: [UNSIGNED-PAYLOAD] - X-Amz-Date: [20180410T180648Z] + X-Amz-Date: [20180413T081834Z] method: !!python/unicode 'PUT' uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt response: body: {string: !!python/unicode ''} headers: content-length: ['0'] - date: ['Tue, 10 Apr 2018 18:06:49 GMT'] + date: ['Fri, 13 Apr 2018 08:18:35 GMT'] etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] server: [AmazonS3] - x-amz-id-2: [v92/9RmjGyYmXZRVIa1/UFDceo97+x22MXfQLOQqjEsw8K6HW4N8vA0hkULwLiXl/OpbQKWQwA0=] - x-amz-request-id: [0531862004701E79] + x-amz-id-2: [zuRGB+T5YqZ3+E7EoLDsEFpcqd/DqhUhahEmyEsaxa0gatZNfErzacRceQwFo6Fdfv+7jMl+4gU=] + x-amz-request-id: [4798590AD2561487] + status: {code: 200, message: OK} +- request: + body: null + headers: + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20180413T081834Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url + response: + body: {string: !!python/unicode ' + + ak-testing-bucket1000urlfalsetest_file.txt2018-04-13T08:18:35.000Z"190aa3117b11aab3f2c5f4e5f7d9e402"215710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} + headers: + content-type: [application/xml] + date: ['Fri, 13 Apr 2018 08:18:35 GMT'] + server: [AmazonS3] + x-amz-bucket-region: [eu-west-3] + x-amz-id-2: [zrtAfzBbjFUKp0x0olQSGylMEMRNoGGgeRd99811SeijMqgxT0MH9dDv1wyNN4+hJ4+Ik8VhNqo=] + x-amz-request-id: [CE49235595B4B5C4] status: {code: 200, message: OK} - request: body: null headers: - User-Agent: [Boto3/1.7.3 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.3 + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 Resource] X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180410T180648Z] + X-Amz-Date: [20180413T081834Z] method: !!python/unicode 'GET' uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt response: @@ -45,11 +87,50 @@ interactions: cache-control: ['max-age=31536000, public'] content-length: ['21'] content-type: [text/plain] - date: ['Tue, 10 Apr 2018 18:06:49 GMT'] + date: ['Fri, 13 Apr 2018 08:18:35 GMT'] etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] - last-modified: ['Tue, 10 Apr 2018 18:06:49 GMT'] + last-modified: ['Fri, 13 Apr 2018 08:18:35 GMT'] + server: [AmazonS3] + x-amz-id-2: [3VkphJKU6ATD+Rrzg7cKkoA/ubFyMZ3cjKJhQyhrdd3pIPHU9IDzul7Vc6Xpx49Van/noMqHpQo=] + x-amz-request-id: [777BC1C1DEB5E9E2] + status: {code: 200, message: OK} +- request: + body: null + headers: + Content-Length: ['0'] + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20180413T081834Z] + method: !!python/unicode 'DELETE' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt + response: + body: {string: !!python/unicode ''} + headers: + date: ['Fri, 13 Apr 2018 08:18:36 GMT'] + server: [AmazonS3] + x-amz-id-2: [CPnGqBCYyiD1TxBojhn3ctcPIpEP0rCNzuv0jt7QQFsbdor4QIFkw84I1ZHsa4pqAmnpsW4Qu80=] + x-amz-request-id: [92E94E9C9BADBD25] + status: {code: 204, message: No Content} +- request: + body: null + headers: + User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20180413T081835Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url + response: + body: {string: !!python/unicode ' + + ak-testing-bucket1000urlfalse'} + headers: + content-type: [application/xml] + date: ['Fri, 13 Apr 2018 08:18:36 GMT'] server: [AmazonS3] - x-amz-id-2: [bcNPxbuUE203I2ErsGTTielpsvBT1IAfrmBSEcgG99iwfmo2aeNZBHlkPRuXT5T4QWsr2E+X4bw=] - x-amz-request-id: [271D58C3673A4778] + x-amz-bucket-region: [eu-west-3] + x-amz-id-2: [S3P3Wo9MpPnHK5a1gbnnu6rtb9xCGpzatbhV6duV4mYek3m3k7Dt80Moqxu7H8a5Xya3qXT9P/U=] + x-amz-request-id: [6905B14A29476A49] status: {code: 200, message: OK} version: 1 From 758fc60b36a5d647b0d5e3758e5adeba3f8a8d64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Tue, 17 Apr 2018 10:46:39 +0200 Subject: [PATCH 06/49] [REF] set all module to the category storage --- storage_backend_s3/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 01bf29b61a..eeb0625c6d 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -7,7 +7,7 @@ "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", "version": "10.0.1.0.0", - "category": "Uncategorized", + "category": "Storage", "website": "www.akretion.com", "author": " Akretion", "license": "AGPL-3", From 34c86eb57f4f86eb5bd142e98436c78e7487ba25 Mon Sep 17 00:00:00 2001 From: Benoit Date: Wed, 10 Apr 2019 18:27:35 +0200 Subject: [PATCH 07/49] [FIX] clean with pre-commit and pep 8 --- storage_backend_s3/__manifest__.py | 16 ++------ storage_backend_s3/components/s3_adapter.py | 22 ++++++----- storage_backend_s3/models/storage_backend.py | 36 ++++++++--------- storage_backend_s3/tests/test_amazon_s3.py | 41 +++++++++++--------- 4 files changed, 56 insertions(+), 59 deletions(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index eeb0625c6d..7dc02ef47d 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -11,16 +11,8 @@ "website": "www.akretion.com", "author": " Akretion", "license": "AGPL-3", - 'installable': True, - "external_dependencies": { - "python": [ - "boto3", - ], - }, - "depends": [ - "storage_backend", - ], - "data": [ - "views/backend_storage_view.xml", - ], + "installable": True, + "external_dependencies": {"python": ["boto3"]}, + "depends": ["storage_backend"], + "data": ["views/backend_storage_view.xml"], } diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index edb09b293a..23d3bed72b 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -4,6 +4,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging + from odoo.addons.component.core import Component logger = logging.getLogger(__name__) @@ -15,16 +16,17 @@ class S3StorageBackend(Component): - _name = 's3.adapter' - _inherit = 'base.storage.adapter' - _usage = 'amazon_s3' + _name = "s3.adapter" + _inherit = "base.storage.adapter" + _usage = "amazon_s3" def _get_resource(self): account = self.collection._get_existing_keychain() return boto3.Session( aws_access_key_id=self.collection.aws_access_key_id, aws_secret_access_key=account._get_password(), - region_name=self.collection.aws_region).resource('s3') + region_name=self.collection.aws_region, + ).resource("s3") def _get_object(self, relative_path): s3 = self._get_resource() @@ -36,19 +38,21 @@ def add(self, relative_path, data, mimetype=None, **kwargs): s3object.put( Body=data, ContentType=mimetype, - CacheControl=self.collection.aws_cache_control or '') + CacheControl=self.collection.aws_cache_control or "", + ) def get(self, relative_path): s3object = self._get_object(relative_path) - return s3object.get()['Body'].read() + return s3object.get()["Body"].read() def list(self, relative_path): resource = self._get_resource() bucket = resource.Bucket(self.collection.aws_bucket) - dir_path = self.collection.directory_path or '' + dir_path = self.collection.directory_path or "" return [ - o.key.replace(dir_path, '').lstrip('/') - for o in bucket.objects.filter(Prefix=dir_path)] + o.key.replace(dir_path, "").lstrip("/") + for o in bucket.objects.filter(Prefix=dir_path) + ] def delete(self, relative_path): s3object = self._get_object(relative_path) diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index bef12038ce..755e4d4c1e 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -3,8 +3,10 @@ # @author Sébastien BEAU # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models import logging + +from odoo import fields, models + _logger = logging.getLogger(__name__) try: @@ -14,28 +16,22 @@ class StorageBackend(models.Model): - _inherit = 'storage.backend' + _inherit = "storage.backend" def _get_aws_region(self): session = boto3.session.Session() return [ - (region, region.replace('-', ' ').capitalize()) - for region in session.get_available_regions('s3')] - - backend_type = fields.Selection( - selection_add=[('amazon_s3', 'Amazon S3')]) - aws_bucket = fields.Char( - sparse="data", - string="Bucket") - aws_access_key_id = fields.Char( - sparse="data", - string="Access Key ID") + (region, region.replace("-", " ").capitalize()) + for region in session.get_available_regions("s3") + ] + + backend_type = fields.Selection(selection_add=[("amazon_s3", "Amazon S3")]) + aws_bucket = fields.Char(sparse="data", string="Bucket") + aws_access_key_id = fields.Char(sparse="data", string="Access Key ID") aws_secret_access_key = fields.Char( - related="password", - string="Secret Access Key") + related="password", string="Secret Access Key" + ) aws_region = fields.Selection( - selection=_get_aws_region, - sparse="data", - string="Region") - aws_cache_control = fields.Char( - default='max-age=31536000, public') + selection=_get_aws_region, sparse="data", string="Region" + ) + aws_cache_control = fields.Char(default="max-age=31536000, public") diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index 7aaaa437bc..90dbc6aea4 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -7,39 +7,44 @@ # disable warning on 'vcr' missing in manifest: this is only a dependency for # dev/tests -from odoo.addons.storage_backend.tests.common import Common, GenericStoreCase +import logging import os from os.path import dirname, join + +from odoo.addons.storage_backend.tests.common import Common, GenericStoreCase from vcr import VCR -import logging + _logger = logging.getLogger(__name__) logging.getLogger("vcr").setLevel(logging.WARNING) recorder = VCR( - record_mode='once', - cassette_library_dir=join(dirname(__file__), 'fixtures/cassettes'), - path_transformer=VCR.ensure_suffix('.yaml'), - filter_headers=['Authorization'], + record_mode="once", + cassette_library_dir=join(dirname(__file__), "fixtures/cassettes"), + path_transformer=VCR.ensure_suffix(".yaml"), + filter_headers=["Authorization"], ) class AmazonS3Case(Common, GenericStoreCase): - def setUp(self): super(AmazonS3Case, self).setUp() - self.backend.write({ - 'backend_type': 'amazon_s3', - 'aws_bucket': os.environ.get( - 'AWS_BUCKET', 'ak-testing-bucket'), - 'aws_region': os.environ.get( - 'AWS_REGION', 'eu-west-3'), - 'aws_access_key_id': os.environ.get( - 'AWS_ACCESS_KEY_ID', 'FAKEID'), - 'aws_secret_access_key': os.environ.get( - 'AWS_SECRET_ACCESS_KEY', 'FAKESECRET'), - }) + self.backend.write( + { + "backend_type": "amazon_s3", + "aws_bucket": os.environ.get( + "AWS_BUCKET", "ak-testing-bucket" + ), + "aws_region": os.environ.get("AWS_REGION", "eu-west-3"), + "aws_access_key_id": os.environ.get( + "AWS_ACCESS_KEY_ID", "FAKEID" + ), + "aws_secret_access_key": os.environ.get( + "AWS_SECRET_ACCESS_KEY", "FAKESECRET" + ), + } + ) @recorder.use_cassette def test_setting_and_getting_data_from_root(self): From d8e964957ece6de1bb1b32ec9cb64dc1a5cf79f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Thu, 11 Apr 2019 11:28:07 +0200 Subject: [PATCH 08/49] [REF] refactor test for checking access right and refactor S3 testing --- ...st_setting_and_getting_data_from_dir.yaml} | 67 +++++---- ...st_setting_and_getting_data_from_root.yaml | 139 ++++++++++++++++++ ...st_setting_and_getting_data_from_root.yaml | 136 ----------------- storage_backend_s3/tests/test_amazon_s3.py | 29 ++-- 4 files changed, 183 insertions(+), 188 deletions(-) rename storage_backend_s3/tests/{fixtures/cassettes/test_setting_and_getting_data_from_dir.yaml => cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml} (67%) create mode 100644 storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml delete mode 100644 storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_root.yaml diff --git a/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_dir.yaml b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml similarity index 67% rename from storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_dir.yaml rename to storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml index b2059ac55b..227f9be0ea 100644 --- a/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_dir.yaml +++ b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml @@ -2,10 +2,10 @@ interactions: - request: body: null headers: - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 Resource] X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180413T081832Z] + X-Amz-Date: [20190411T090835Z] method: !!python/unicode 'GET' uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=subdirectory%2Fhere&encoding-type=url response: @@ -14,11 +14,12 @@ interactions: ak-testing-bucketsubdirectory/here1000urlfalse'} headers: content-type: [application/xml] - date: ['Fri, 13 Apr 2018 08:18:33 GMT'] + date: ['Thu, 11 Apr 2019 09:08:36 GMT'] server: [AmazonS3] + transfer-encoding: [chunked] x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [pkuKd+q/AFPQwqS+dRWuH+UZUNm4rkr5MDByoYX5SW9h8TIE6X8ElwbijSJcY5a7zNqgPlHzWao=] - x-amz-request-id: [D4A96C12D62C2C22] + x-amz-id-2: [uOcZsX6vGGhmm5ph4OyyPk5kU0k+cMw9b5wOoFf/NpQS6txp1gif3d4qlzYWhTaa/HJzDA478+s=] + x-amz-request-id: [7E88BABE8B63A735] status: {code: 200, message: OK} - request: body: !!python/object:StringIO.StringIO @@ -34,50 +35,51 @@ interactions: Content-MD5: [GQqjEXsRqrPyxfTl99nkAg==] Content-Type: [text/plain] Expect: [100-continue] - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 Resource] X-Amz-Content-SHA256: [UNSIGNED-PAYLOAD] - X-Amz-Date: [20180413T081832Z] + X-Amz-Date: [20190411T090835Z] method: !!python/unicode 'PUT' uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt response: body: {string: !!python/unicode ''} headers: content-length: ['0'] - date: ['Fri, 13 Apr 2018 08:18:33 GMT'] + date: ['Thu, 11 Apr 2019 09:08:36 GMT'] etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] server: [AmazonS3] - x-amz-id-2: [yrv+y17ncSHv5Tv9W3kxvkNPgFBgGHOH3R2DExuNVbj7vrZOGNCdh0qoa4F3EtZP21YkXYUSm8g=] - x-amz-request-id: [93EC659CC84D4818] + x-amz-id-2: [RgrsKLomTM+PxVh6V+IALMJNDJJusAreLZJRAU79416+8tkeSuFr8/ZlpEzb4yA908GylswaAWI=] + x-amz-request-id: [E3C4CE305C22AD60] status: {code: 200, message: OK} - request: body: null headers: - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 Resource] X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180413T081832Z] + X-Amz-Date: [20190411T090835Z] method: !!python/unicode 'GET' uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=subdirectory%2Fhere&encoding-type=url response: body: {string: !!python/unicode ' - ak-testing-bucketsubdirectory/here1000urlfalsesubdirectory/here/test_file.txt2018-04-13T08:18:33.000Z"190aa3117b11aab3f2c5f4e5f7d9e402"215710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} + ak-testing-bucketsubdirectory/here1000urlfalsesubdirectory/here/test_file.txt2019-04-11T09:08:36.000Z"190aa3117b11aab3f2c5f4e5f7d9e402"215710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} headers: content-type: [application/xml] - date: ['Fri, 13 Apr 2018 08:18:33 GMT'] + date: ['Thu, 11 Apr 2019 09:08:36 GMT'] server: [AmazonS3] + transfer-encoding: [chunked] x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [gIDvmtzV3eDRViAOhDknaB3X2rlbdAla2XrhR2WHoWk6UiA5qTFgXr5MvZFbFik4XljmeR4e/Y4=] - x-amz-request-id: [24D41B800115797B] + x-amz-id-2: [GjT2YOaLPuyXaSQLYgk5g8qINjleihd6bXh3YYtblu4pl/N8DJxHqfBolkpOUpR4hbPSW7+pLOU=] + x-amz-request-id: [65E6B5353DC93DD8] status: {code: 200, message: OK} - request: body: null headers: - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 Resource] X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180413T081832Z] + X-Amz-Date: [20190411T090836Z] method: !!python/unicode 'GET' uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt response: @@ -87,38 +89,38 @@ interactions: cache-control: ['max-age=31536000, public'] content-length: ['21'] content-type: [text/plain] - date: ['Fri, 13 Apr 2018 08:18:33 GMT'] + date: ['Thu, 11 Apr 2019 09:08:37 GMT'] etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] - last-modified: ['Fri, 13 Apr 2018 08:18:33 GMT'] + last-modified: ['Thu, 11 Apr 2019 09:08:36 GMT'] server: [AmazonS3] - x-amz-id-2: [qAcYz021PMfgf7H7Ij/n7EWKFJqVmUuAsdDA0aDrl3pbCqcYRAthE9gfr6m+YssAmn4l+7Th2oc=] - x-amz-request-id: [C17CBA5A6234AC1A] + x-amz-id-2: [lT9X9Z4ffcu6vYHA9WMqA05ykqvM5jS0r9AggiZMEoQIWj8OoYU3IYAJbREnzqP41ejsVyIwox8=] + x-amz-request-id: [3710816CDEE29024] status: {code: 200, message: OK} - request: body: null headers: Content-Length: ['0'] - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 Resource] X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180413T081832Z] + X-Amz-Date: [20190411T090836Z] method: !!python/unicode 'DELETE' uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt response: body: {string: !!python/unicode ''} headers: - date: ['Fri, 13 Apr 2018 08:18:34 GMT'] + date: ['Thu, 11 Apr 2019 09:08:37 GMT'] server: [AmazonS3] - x-amz-id-2: [CoCs6MfymWaSnF8IFnH9Ck2lz9DCAQpIE+kZCwNG2C+TOAFXmjMueTAjhj6tRHTRM5Alp0drAkY=] - x-amz-request-id: [B175EB94EBB1E2D1] + x-amz-id-2: [MABygkjKt8QMBuXMwORdi628qMOQm5FflSYYQZPWH+pq9tZWAf+/ZlA/43mgUbR39Rbw/GQdj7Y=] + x-amz-request-id: [B4204D35B2E70AE2] status: {code: 204, message: No Content} - request: body: null headers: - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 Resource] X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180413T081833Z] + X-Amz-Date: [20190411T090836Z] method: !!python/unicode 'GET' uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=subdirectory%2Fhere&encoding-type=url response: @@ -127,10 +129,11 @@ interactions: ak-testing-bucketsubdirectory/here1000urlfalse'} headers: content-type: [application/xml] - date: ['Fri, 13 Apr 2018 08:18:34 GMT'] + date: ['Thu, 11 Apr 2019 09:08:38 GMT'] server: [AmazonS3] + transfer-encoding: [chunked] x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [6oxJwfWo/i8eFN0JAGP8YBhnqr/Wdlwrj8D8aXON4klINZ0ZAmqwq3XhJPpoG1l5MH3sgkKoTLM=] - x-amz-request-id: [28C17461E998FE0A] + x-amz-id-2: [06hz7LdPR6Z6AO1qPHd231p6OUTHhxvE6s8iRiG8rkhuVi1mw2sRRvdM7q1ZPUnSfXrmQh9CJfY=] + x-amz-request-id: [B6ABFF59DC945A6E] status: {code: 200, message: OK} version: 1 diff --git a/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml new file mode 100644 index 0000000000..17bd6bb623 --- /dev/null +++ b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml @@ -0,0 +1,139 @@ +interactions: +- request: + body: null + headers: + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20190411T090837Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url + response: + body: {string: !!python/unicode ' + + ak-testing-bucket1000urlfalsesites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f2ff7d9f002478ab05/files/slide-2.png2018-07-04T07:36:19.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f3ff7d9f002478ab08/files/slide-1.png2018-07-04T07:36:20.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe6/files/slide-2.png2018-07-04T07:38:18.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe9/files/slide-1.png2018-07-04T07:38:18.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac17/files/slide-2.png2018-07-04T07:39:21.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac1a/files/slide-1.png2018-07-04T07:39:21.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/rawpixel-com-268376-jumbotron.jpg2018-07-04T07:39:21.000Z"99c8da16055e2d2c259925047e354b4f"2219855710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/william-iven-5895-thumb.jpg2018-07-04T07:39:21.000Z"54c5877c668be615d66829af706af9f7"369725710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-jumbotron.jpg2018-07-04T07:39:21.000Z"0cff59cf33745eb0133683cefe1bcc0d"2293705710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-thumb.jpg2018-07-04T07:39:22.000Z"ab4e5c8a80ee3ed56d948808e0284acd"409575710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-jumbotron.jpg2018-07-04T07:39:22.000Z"e81c06a564d313ae08050314eb669166"2210495710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-thumb.jpg2018-07-04T07:39:22.000Z"add79fc36b7f75393e935a94e36188bb"1118255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-jumbotron.jpg2018-07-04T07:39:22.000Z"720b38c5b73c0d5c989fc3471b1b5247"2390275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-thumb-1.jpg2018-07-04T07:39:22.000Z"96588038b60a089ec9082d9f6bdf19ce"2251205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-jumbotron.jpg2018-07-04T07:39:23.000Z"857a7cf78efb4dcf31eb1d1d3210a426"3720905710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-thubnail.jpg2018-07-04T07:39:23.000Z"dfe0c0ca1ab1e70a1e13ff37da762351"545135710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/FontAwesome.otf2018-06-29T13:44:25.000Z"0d2717cd5d853e5c765ca032dfd41a4d"1348085710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/Lato-Black.ttf2018-06-29T13:44:35.000Z"77d353744697c77955f9bacc7f3ed90a"1145885710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.eot2018-06-29T13:44:34.000Z"f4769f9bdb7466be65088239c12046d1"201275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.svg2018-06-29T13:44:33.000Z"89889688147bd7575d6327160d64e760"1087385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.ttf2018-06-29T13:44:33.000Z"e18bbf611f2a2e43afc071aa2f4e1512"454045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff2018-06-29T13:44:34.000Z"fa2772327f55d8198301fdb8bcfc8158"234245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff22018-06-29T13:44:34.000Z"448c34a56d699c29117adc64c43affeb"180285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.eot2018-06-29T13:44:34.000Z"674f50d287a8c48dc19ba404d20fe713"1657425710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.svg2018-06-29T13:44:32.000Z"912ec66d7572ff821749319396470bde"4443795710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.ttf2018-06-29T13:44:35.000Z"b06871f281fee6b241d60582ae9369b9"1655485710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff2018-06-29T13:44:25.000Z"fee66e712a8a08eef5805a46892932ad"980245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff22018-06-29T13:44:30.000Z"af7ae505a9eed503f8b8e6982036873e"771605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.eot2018-06-29T13:44:29.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.svg2018-06-29T13:44:28.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.ttf2018-06-29T13:44:29.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff2018-06-29T13:44:27.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff22018-06-29T13:44:30.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.eot2018-06-29T13:44:29.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.svg2018-06-29T13:44:27.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.ttf2018-06-29T13:44:26.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff2018-06-29T13:44:27.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff22018-06-29T13:44:27.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.eot2018-06-29T13:44:30.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.svg2018-06-29T13:44:26.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.ttf2018-06-29T13:44:29.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff2018-06-29T13:44:26.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff22018-06-29T13:44:28.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/lato-regular.ttf2018-06-29T13:44:35.000Z"7f690e503a254e0b8349aec0177e07aa"1201965710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/sf-distant-galaxy.ttf2018-06-29T13:44:31.000Z"75c0119ca475dea587b8661501320be5"588605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-categories.jpg2018-06-29T13:44:36.000Z"4cd91e4b4d53a8be36a87c1901509025"1574815710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-info.jpg2018-06-29T13:44:37.000Z"43bc85397f794a217ca6302f31132a83"2841775710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/cart-icon.png2018-06-29T13:44:36.000Z"27023441e91a1bfd49e853083c5be189"17195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/favicon.png2018-06-29T13:44:36.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/powered-by-shopinvader-logo.png2018-06-29T13:44:36.000Z"0b28631a788bc3bc5b4e8fbffc77a6fc"49955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/user-icon.png2018-06-29T13:44:37.000Z"9a4cbcac50e8a8dc8716602dc6939506"15195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/address_autocomplete.js2018-06-29T13:44:58.000Z"825f802393fe3cab46aca96f85e808e6"12145710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/application.js2018-06-29T13:44:56.000Z"7b27f5eedf5b6a8765911598d657af0b"36765710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap3.min.js2018-06-29T13:45:01.000Z"c9599ff427c45c06987d2a77504061d0"366415710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap4.min.js2018-06-29T13:45:02.000Z"52fb01bb48c42d311b54a638fc3bbb66"511305710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.min.js2018-07-04T07:31:04.000Z"a04a0b2062dba95a1c195ba8ba81da33"964385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.slidereveal.min.js2018-06-29T13:44:56.000Z"8b3f238f0edcb6b1bd2e0a1ca8dbadcf"26365710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.touchSwipe.min.js2018-06-29T13:44:54.000Z"2ca5cd81e4decec5d563ccc714c13f75"106665710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/popper.min.js2018-07-04T07:31:02.000Z"7fadcd304c51c2bf074dab5d173fad96"189005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search.js2018-06-29T13:44:55.000Z"496ab01d638a8d9be0eaec5d9357da99"69015710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search_autocomplete.js2018-06-29T13:44:54.000Z"abce4f520d568e5e8a27c876cccf07a5"29265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/services-worker.js2018-06-29T13:44:55.000Z"c16e4b803908e63721393b2aed92cc1a"6275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/shopinvader.jquery.js2018-06-29T13:44:58.000Z"205cc517dbd11156b5e88ccd226acead"12735710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/application.css2018-07-04T07:39:34.000Z"aefd53a2b193daebbd450704ef07e76d"1750355710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap.css2018-06-29T13:44:42.000Z"921023af04e9bfbdfcd9e908ae41838a"16605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-grid.css2018-06-29T13:44:53.000Z"3bf136721f307910a86b0c12c075b00a"189345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-reboot.css2018-06-29T13:44:53.000Z"17e26b4ec047a23fae14084355c307f3"38945710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap.css2018-06-29T13:44:52.000Z"7dc28db4b228b26a897793e820f962c0"1226185710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/font-awesome.min.css2018-06-29T13:44:50.000Z"dab5d93045d08b50c34834f543ef2860"310005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-brands.css2018-06-29T13:44:44.000Z"3b03a4e1b155ac50c811bc8fb5d92a56"7195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-regular.css2018-06-29T13:44:42.000Z"cca47fb43f791546264ddcf85d46872c"7345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-solid.css2018-06-29T13:44:42.000Z"fa42ec4d3ddd4f4dd6f794ecaa5efc9a"7265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fontawesome.css2018-06-29T13:44:44.000Z"5664ed3aceb3f01878afb4ccb720708e"351255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.eot2018-06-29T13:44:40.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.svg2018-06-29T13:44:39.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.ttf2018-06-29T13:44:41.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff2018-06-29T13:44:39.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff22018-06-29T13:44:41.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.eot2018-06-29T13:44:40.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.svg2018-06-29T13:44:39.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.ttf2018-06-29T13:44:37.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff2018-06-29T13:44:39.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff22018-06-29T13:44:38.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.eot2018-06-29T13:44:41.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.svg2018-06-29T13:44:38.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.ttf2018-06-29T13:44:41.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff2018-06-29T13:44:38.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff22018-06-29T13:44:40.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDuploaded_assets/5b363695b82aa70027161e8d/icon.png2018-06-29T13:44:19.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} + headers: + content-type: [application/xml] + date: ['Thu, 11 Apr 2019 09:08:39 GMT'] + server: [AmazonS3] + transfer-encoding: [chunked] + x-amz-bucket-region: [eu-west-3] + x-amz-id-2: [Jj7HLNDjYTEW7pGeO+25kO8E+0wEG4ROWLqZW5QBW9Dd/RAa1iOwfqu75souBcfEdd8WLWDCqDA=] + x-amz-request-id: [32DE59095E04EF5F] + status: {code: 200, message: OK} +- request: + body: !!python/object:StringIO.StringIO + buf: This is a simple file + buflist: [] + closed: false + len: 21 + pos: 0 + softspace: 0 + headers: + Cache-Control: ['max-age=31536000, public'] + Content-Length: ['21'] + Content-MD5: [GQqjEXsRqrPyxfTl99nkAg==] + Content-Type: [text/plain] + Expect: [100-continue] + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 + Resource] + X-Amz-Content-SHA256: [UNSIGNED-PAYLOAD] + X-Amz-Date: [20190411T090838Z] + method: !!python/unicode 'PUT' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt + response: + body: {string: !!python/unicode ''} + headers: + content-length: ['0'] + date: ['Thu, 11 Apr 2019 09:08:39 GMT'] + etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] + server: [AmazonS3] + x-amz-id-2: [aCasC7srqbXYyy0VdyH2H5GJClt2GwoiN++v5ncexWIzMoIbVwLMVFwVqaj9c8RN910D/yETIBg=] + x-amz-request-id: [79A9DEC19AA46D7A] + status: {code: 200, message: OK} +- request: + body: null + headers: + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20190411T090838Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url + response: + body: {string: !!python/unicode ' + + ak-testing-bucket1000urlfalsesites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f2ff7d9f002478ab05/files/slide-2.png2018-07-04T07:36:19.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f3ff7d9f002478ab08/files/slide-1.png2018-07-04T07:36:20.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe6/files/slide-2.png2018-07-04T07:38:18.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe9/files/slide-1.png2018-07-04T07:38:18.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac17/files/slide-2.png2018-07-04T07:39:21.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac1a/files/slide-1.png2018-07-04T07:39:21.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/rawpixel-com-268376-jumbotron.jpg2018-07-04T07:39:21.000Z"99c8da16055e2d2c259925047e354b4f"2219855710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/william-iven-5895-thumb.jpg2018-07-04T07:39:21.000Z"54c5877c668be615d66829af706af9f7"369725710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-jumbotron.jpg2018-07-04T07:39:21.000Z"0cff59cf33745eb0133683cefe1bcc0d"2293705710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-thumb.jpg2018-07-04T07:39:22.000Z"ab4e5c8a80ee3ed56d948808e0284acd"409575710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-jumbotron.jpg2018-07-04T07:39:22.000Z"e81c06a564d313ae08050314eb669166"2210495710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-thumb.jpg2018-07-04T07:39:22.000Z"add79fc36b7f75393e935a94e36188bb"1118255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-jumbotron.jpg2018-07-04T07:39:22.000Z"720b38c5b73c0d5c989fc3471b1b5247"2390275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-thumb-1.jpg2018-07-04T07:39:22.000Z"96588038b60a089ec9082d9f6bdf19ce"2251205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-jumbotron.jpg2018-07-04T07:39:23.000Z"857a7cf78efb4dcf31eb1d1d3210a426"3720905710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-thubnail.jpg2018-07-04T07:39:23.000Z"dfe0c0ca1ab1e70a1e13ff37da762351"545135710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/FontAwesome.otf2018-06-29T13:44:25.000Z"0d2717cd5d853e5c765ca032dfd41a4d"1348085710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/Lato-Black.ttf2018-06-29T13:44:35.000Z"77d353744697c77955f9bacc7f3ed90a"1145885710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.eot2018-06-29T13:44:34.000Z"f4769f9bdb7466be65088239c12046d1"201275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.svg2018-06-29T13:44:33.000Z"89889688147bd7575d6327160d64e760"1087385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.ttf2018-06-29T13:44:33.000Z"e18bbf611f2a2e43afc071aa2f4e1512"454045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff2018-06-29T13:44:34.000Z"fa2772327f55d8198301fdb8bcfc8158"234245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff22018-06-29T13:44:34.000Z"448c34a56d699c29117adc64c43affeb"180285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.eot2018-06-29T13:44:34.000Z"674f50d287a8c48dc19ba404d20fe713"1657425710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.svg2018-06-29T13:44:32.000Z"912ec66d7572ff821749319396470bde"4443795710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.ttf2018-06-29T13:44:35.000Z"b06871f281fee6b241d60582ae9369b9"1655485710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff2018-06-29T13:44:25.000Z"fee66e712a8a08eef5805a46892932ad"980245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff22018-06-29T13:44:30.000Z"af7ae505a9eed503f8b8e6982036873e"771605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.eot2018-06-29T13:44:29.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.svg2018-06-29T13:44:28.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.ttf2018-06-29T13:44:29.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff2018-06-29T13:44:27.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff22018-06-29T13:44:30.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.eot2018-06-29T13:44:29.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.svg2018-06-29T13:44:27.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.ttf2018-06-29T13:44:26.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff2018-06-29T13:44:27.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff22018-06-29T13:44:27.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.eot2018-06-29T13:44:30.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.svg2018-06-29T13:44:26.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.ttf2018-06-29T13:44:29.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff2018-06-29T13:44:26.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff22018-06-29T13:44:28.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/lato-regular.ttf2018-06-29T13:44:35.000Z"7f690e503a254e0b8349aec0177e07aa"1201965710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/sf-distant-galaxy.ttf2018-06-29T13:44:31.000Z"75c0119ca475dea587b8661501320be5"588605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-categories.jpg2018-06-29T13:44:36.000Z"4cd91e4b4d53a8be36a87c1901509025"1574815710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-info.jpg2018-06-29T13:44:37.000Z"43bc85397f794a217ca6302f31132a83"2841775710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/cart-icon.png2018-06-29T13:44:36.000Z"27023441e91a1bfd49e853083c5be189"17195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/favicon.png2018-06-29T13:44:36.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/powered-by-shopinvader-logo.png2018-06-29T13:44:36.000Z"0b28631a788bc3bc5b4e8fbffc77a6fc"49955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/user-icon.png2018-06-29T13:44:37.000Z"9a4cbcac50e8a8dc8716602dc6939506"15195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/address_autocomplete.js2018-06-29T13:44:58.000Z"825f802393fe3cab46aca96f85e808e6"12145710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/application.js2018-06-29T13:44:56.000Z"7b27f5eedf5b6a8765911598d657af0b"36765710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap3.min.js2018-06-29T13:45:01.000Z"c9599ff427c45c06987d2a77504061d0"366415710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap4.min.js2018-06-29T13:45:02.000Z"52fb01bb48c42d311b54a638fc3bbb66"511305710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.min.js2018-07-04T07:31:04.000Z"a04a0b2062dba95a1c195ba8ba81da33"964385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.slidereveal.min.js2018-06-29T13:44:56.000Z"8b3f238f0edcb6b1bd2e0a1ca8dbadcf"26365710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.touchSwipe.min.js2018-06-29T13:44:54.000Z"2ca5cd81e4decec5d563ccc714c13f75"106665710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/popper.min.js2018-07-04T07:31:02.000Z"7fadcd304c51c2bf074dab5d173fad96"189005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search.js2018-06-29T13:44:55.000Z"496ab01d638a8d9be0eaec5d9357da99"69015710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search_autocomplete.js2018-06-29T13:44:54.000Z"abce4f520d568e5e8a27c876cccf07a5"29265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/services-worker.js2018-06-29T13:44:55.000Z"c16e4b803908e63721393b2aed92cc1a"6275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/shopinvader.jquery.js2018-06-29T13:44:58.000Z"205cc517dbd11156b5e88ccd226acead"12735710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/application.css2018-07-04T07:39:34.000Z"aefd53a2b193daebbd450704ef07e76d"1750355710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap.css2018-06-29T13:44:42.000Z"921023af04e9bfbdfcd9e908ae41838a"16605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-grid.css2018-06-29T13:44:53.000Z"3bf136721f307910a86b0c12c075b00a"189345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-reboot.css2018-06-29T13:44:53.000Z"17e26b4ec047a23fae14084355c307f3"38945710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap.css2018-06-29T13:44:52.000Z"7dc28db4b228b26a897793e820f962c0"1226185710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/font-awesome.min.css2018-06-29T13:44:50.000Z"dab5d93045d08b50c34834f543ef2860"310005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-brands.css2018-06-29T13:44:44.000Z"3b03a4e1b155ac50c811bc8fb5d92a56"7195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-regular.css2018-06-29T13:44:42.000Z"cca47fb43f791546264ddcf85d46872c"7345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-solid.css2018-06-29T13:44:42.000Z"fa42ec4d3ddd4f4dd6f794ecaa5efc9a"7265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fontawesome.css2018-06-29T13:44:44.000Z"5664ed3aceb3f01878afb4ccb720708e"351255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.eot2018-06-29T13:44:40.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.svg2018-06-29T13:44:39.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.ttf2018-06-29T13:44:41.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff2018-06-29T13:44:39.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff22018-06-29T13:44:41.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.eot2018-06-29T13:44:40.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.svg2018-06-29T13:44:39.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.ttf2018-06-29T13:44:37.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff2018-06-29T13:44:39.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff22018-06-29T13:44:38.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.eot2018-06-29T13:44:41.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.svg2018-06-29T13:44:38.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.ttf2018-06-29T13:44:41.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff2018-06-29T13:44:38.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff22018-06-29T13:44:40.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDtest_file.txt2019-04-11T09:08:39.000Z"190aa3117b11aab3f2c5f4e5f7d9e402"215710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDuploaded_assets/5b363695b82aa70027161e8d/icon.png2018-06-29T13:44:19.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} + headers: + content-type: [application/xml] + date: ['Thu, 11 Apr 2019 09:08:40 GMT'] + server: [AmazonS3] + transfer-encoding: [chunked] + x-amz-bucket-region: [eu-west-3] + x-amz-id-2: [zSQKQ+RYpWu0jxDzc7c+ulMM7ORJt9uP5wb/VjHg4ul6nl56b308SLV2N9BvbBamYrgsH6tT9Rc=] + x-amz-request-id: [9C61321610F0E16F] + status: {code: 200, message: OK} +- request: + body: null + headers: + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20190411T090839Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt + response: + body: {string: !!python/unicode 'This is a simple file'} + headers: + accept-ranges: [bytes] + cache-control: ['max-age=31536000, public'] + content-length: ['21'] + content-type: [text/plain] + date: ['Thu, 11 Apr 2019 09:08:40 GMT'] + etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] + last-modified: ['Thu, 11 Apr 2019 09:08:39 GMT'] + server: [AmazonS3] + x-amz-id-2: [qE8FgLk+SZt+DY7sqGkYiU0UmZUFrdeYJ1dyEsJ9PJb1hE2ZEetAC2J+xnq0ge8a9R296+lCRsE=] + x-amz-request-id: [9A21FEADFDA20D2E] + status: {code: 200, message: OK} +- request: + body: null + headers: + Content-Length: ['0'] + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20190411T090839Z] + method: !!python/unicode 'DELETE' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt + response: + body: {string: !!python/unicode ''} + headers: + date: ['Thu, 11 Apr 2019 09:08:40 GMT'] + server: [AmazonS3] + x-amz-id-2: [Szc7bOq3HQg9M0w5wq6lkurvUJof0+BMuD5oNKOR/OOrEeznx+dKyzCr+xH/04hTdmhFlu/aMy0=] + x-amz-request-id: [B8D18326F8CF1D7B] + status: {code: 204, message: No Content} +- request: + body: null + headers: + User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 + Resource] + X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] + X-Amz-Date: [20190411T090840Z] + method: !!python/unicode 'GET' + uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url + response: + body: {string: !!python/unicode ' + + ak-testing-bucket1000urlfalsesites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f2ff7d9f002478ab05/files/slide-2.png2018-07-04T07:36:19.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f3ff7d9f002478ab08/files/slide-1.png2018-07-04T07:36:20.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe6/files/slide-2.png2018-07-04T07:38:18.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe9/files/slide-1.png2018-07-04T07:38:18.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac17/files/slide-2.png2018-07-04T07:39:21.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac1a/files/slide-1.png2018-07-04T07:39:21.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/rawpixel-com-268376-jumbotron.jpg2018-07-04T07:39:21.000Z"99c8da16055e2d2c259925047e354b4f"2219855710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/william-iven-5895-thumb.jpg2018-07-04T07:39:21.000Z"54c5877c668be615d66829af706af9f7"369725710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-jumbotron.jpg2018-07-04T07:39:21.000Z"0cff59cf33745eb0133683cefe1bcc0d"2293705710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-thumb.jpg2018-07-04T07:39:22.000Z"ab4e5c8a80ee3ed56d948808e0284acd"409575710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-jumbotron.jpg2018-07-04T07:39:22.000Z"e81c06a564d313ae08050314eb669166"2210495710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-thumb.jpg2018-07-04T07:39:22.000Z"add79fc36b7f75393e935a94e36188bb"1118255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-jumbotron.jpg2018-07-04T07:39:22.000Z"720b38c5b73c0d5c989fc3471b1b5247"2390275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-thumb-1.jpg2018-07-04T07:39:22.000Z"96588038b60a089ec9082d9f6bdf19ce"2251205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-jumbotron.jpg2018-07-04T07:39:23.000Z"857a7cf78efb4dcf31eb1d1d3210a426"3720905710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-thubnail.jpg2018-07-04T07:39:23.000Z"dfe0c0ca1ab1e70a1e13ff37da762351"545135710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/FontAwesome.otf2018-06-29T13:44:25.000Z"0d2717cd5d853e5c765ca032dfd41a4d"1348085710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/Lato-Black.ttf2018-06-29T13:44:35.000Z"77d353744697c77955f9bacc7f3ed90a"1145885710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.eot2018-06-29T13:44:34.000Z"f4769f9bdb7466be65088239c12046d1"201275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.svg2018-06-29T13:44:33.000Z"89889688147bd7575d6327160d64e760"1087385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.ttf2018-06-29T13:44:33.000Z"e18bbf611f2a2e43afc071aa2f4e1512"454045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff2018-06-29T13:44:34.000Z"fa2772327f55d8198301fdb8bcfc8158"234245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff22018-06-29T13:44:34.000Z"448c34a56d699c29117adc64c43affeb"180285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.eot2018-06-29T13:44:34.000Z"674f50d287a8c48dc19ba404d20fe713"1657425710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.svg2018-06-29T13:44:32.000Z"912ec66d7572ff821749319396470bde"4443795710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.ttf2018-06-29T13:44:35.000Z"b06871f281fee6b241d60582ae9369b9"1655485710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff2018-06-29T13:44:25.000Z"fee66e712a8a08eef5805a46892932ad"980245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff22018-06-29T13:44:30.000Z"af7ae505a9eed503f8b8e6982036873e"771605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.eot2018-06-29T13:44:29.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.svg2018-06-29T13:44:28.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.ttf2018-06-29T13:44:29.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff2018-06-29T13:44:27.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff22018-06-29T13:44:30.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.eot2018-06-29T13:44:29.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.svg2018-06-29T13:44:27.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.ttf2018-06-29T13:44:26.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff2018-06-29T13:44:27.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff22018-06-29T13:44:27.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.eot2018-06-29T13:44:30.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.svg2018-06-29T13:44:26.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.ttf2018-06-29T13:44:29.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff2018-06-29T13:44:26.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff22018-06-29T13:44:28.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/lato-regular.ttf2018-06-29T13:44:35.000Z"7f690e503a254e0b8349aec0177e07aa"1201965710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/sf-distant-galaxy.ttf2018-06-29T13:44:31.000Z"75c0119ca475dea587b8661501320be5"588605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-categories.jpg2018-06-29T13:44:36.000Z"4cd91e4b4d53a8be36a87c1901509025"1574815710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-info.jpg2018-06-29T13:44:37.000Z"43bc85397f794a217ca6302f31132a83"2841775710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/cart-icon.png2018-06-29T13:44:36.000Z"27023441e91a1bfd49e853083c5be189"17195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/favicon.png2018-06-29T13:44:36.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/powered-by-shopinvader-logo.png2018-06-29T13:44:36.000Z"0b28631a788bc3bc5b4e8fbffc77a6fc"49955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/user-icon.png2018-06-29T13:44:37.000Z"9a4cbcac50e8a8dc8716602dc6939506"15195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/address_autocomplete.js2018-06-29T13:44:58.000Z"825f802393fe3cab46aca96f85e808e6"12145710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/application.js2018-06-29T13:44:56.000Z"7b27f5eedf5b6a8765911598d657af0b"36765710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap3.min.js2018-06-29T13:45:01.000Z"c9599ff427c45c06987d2a77504061d0"366415710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap4.min.js2018-06-29T13:45:02.000Z"52fb01bb48c42d311b54a638fc3bbb66"511305710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.min.js2018-07-04T07:31:04.000Z"a04a0b2062dba95a1c195ba8ba81da33"964385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.slidereveal.min.js2018-06-29T13:44:56.000Z"8b3f238f0edcb6b1bd2e0a1ca8dbadcf"26365710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.touchSwipe.min.js2018-06-29T13:44:54.000Z"2ca5cd81e4decec5d563ccc714c13f75"106665710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/popper.min.js2018-07-04T07:31:02.000Z"7fadcd304c51c2bf074dab5d173fad96"189005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search.js2018-06-29T13:44:55.000Z"496ab01d638a8d9be0eaec5d9357da99"69015710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search_autocomplete.js2018-06-29T13:44:54.000Z"abce4f520d568e5e8a27c876cccf07a5"29265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/services-worker.js2018-06-29T13:44:55.000Z"c16e4b803908e63721393b2aed92cc1a"6275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/shopinvader.jquery.js2018-06-29T13:44:58.000Z"205cc517dbd11156b5e88ccd226acead"12735710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/application.css2018-07-04T07:39:34.000Z"aefd53a2b193daebbd450704ef07e76d"1750355710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap.css2018-06-29T13:44:42.000Z"921023af04e9bfbdfcd9e908ae41838a"16605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-grid.css2018-06-29T13:44:53.000Z"3bf136721f307910a86b0c12c075b00a"189345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-reboot.css2018-06-29T13:44:53.000Z"17e26b4ec047a23fae14084355c307f3"38945710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap.css2018-06-29T13:44:52.000Z"7dc28db4b228b26a897793e820f962c0"1226185710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/font-awesome.min.css2018-06-29T13:44:50.000Z"dab5d93045d08b50c34834f543ef2860"310005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-brands.css2018-06-29T13:44:44.000Z"3b03a4e1b155ac50c811bc8fb5d92a56"7195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-regular.css2018-06-29T13:44:42.000Z"cca47fb43f791546264ddcf85d46872c"7345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-solid.css2018-06-29T13:44:42.000Z"fa42ec4d3ddd4f4dd6f794ecaa5efc9a"7265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fontawesome.css2018-06-29T13:44:44.000Z"5664ed3aceb3f01878afb4ccb720708e"351255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.eot2018-06-29T13:44:40.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.svg2018-06-29T13:44:39.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.ttf2018-06-29T13:44:41.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff2018-06-29T13:44:39.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff22018-06-29T13:44:41.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.eot2018-06-29T13:44:40.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.svg2018-06-29T13:44:39.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.ttf2018-06-29T13:44:37.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff2018-06-29T13:44:39.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff22018-06-29T13:44:38.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.eot2018-06-29T13:44:41.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.svg2018-06-29T13:44:38.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.ttf2018-06-29T13:44:41.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff2018-06-29T13:44:38.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff22018-06-29T13:44:40.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDuploaded_assets/5b363695b82aa70027161e8d/icon.png2018-06-29T13:44:19.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} + headers: + content-type: [application/xml] + date: ['Thu, 11 Apr 2019 09:08:41 GMT'] + server: [AmazonS3] + transfer-encoding: [chunked] + x-amz-bucket-region: [eu-west-3] + x-amz-id-2: [rDdDbwcQdLMtI5SijE9Yv4N7JA5wool+ihXzgISObkTVeN/cE4UsuIQAQ5/KboDW+LaXuFoW/0c=] + x-amz-request-id: [F2A5DC6B017F793D] + status: {code: 200, message: OK} +version: 1 diff --git a/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_root.yaml b/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_root.yaml deleted file mode 100644 index d41e4bb15a..0000000000 --- a/storage_backend_s3/tests/fixtures/cassettes/test_setting_and_getting_data_from_root.yaml +++ /dev/null @@ -1,136 +0,0 @@ -interactions: -- request: - body: null - headers: - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180413T081833Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url - response: - body: {string: !!python/unicode ' - - ak-testing-bucket1000urlfalse'} - headers: - content-type: [application/xml] - date: ['Fri, 13 Apr 2018 08:18:34 GMT'] - server: [AmazonS3] - x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [9Hs8X404CedWUE3iBSvD3anxCKaqefjoD6v+x28qVQVkbARuMtCjwTMwUpL3m4cp3qzDSNR29Rw=] - x-amz-request-id: [0605B5108DA41B2C] - status: {code: 200, message: OK} -- request: - body: !!python/object:StringIO.StringIO - buf: This is a simple file - buflist: [] - closed: false - len: 21 - pos: 0 - softspace: 0 - headers: - Cache-Control: ['max-age=31536000, public'] - Content-Length: ['21'] - Content-MD5: [GQqjEXsRqrPyxfTl99nkAg==] - Content-Type: [text/plain] - Expect: [100-continue] - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 - Resource] - X-Amz-Content-SHA256: [UNSIGNED-PAYLOAD] - X-Amz-Date: [20180413T081834Z] - method: !!python/unicode 'PUT' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt - response: - body: {string: !!python/unicode ''} - headers: - content-length: ['0'] - date: ['Fri, 13 Apr 2018 08:18:35 GMT'] - etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] - server: [AmazonS3] - x-amz-id-2: [zuRGB+T5YqZ3+E7EoLDsEFpcqd/DqhUhahEmyEsaxa0gatZNfErzacRceQwFo6Fdfv+7jMl+4gU=] - x-amz-request-id: [4798590AD2561487] - status: {code: 200, message: OK} -- request: - body: null - headers: - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180413T081834Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url - response: - body: {string: !!python/unicode ' - - ak-testing-bucket1000urlfalsetest_file.txt2018-04-13T08:18:35.000Z"190aa3117b11aab3f2c5f4e5f7d9e402"215710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} - headers: - content-type: [application/xml] - date: ['Fri, 13 Apr 2018 08:18:35 GMT'] - server: [AmazonS3] - x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [zrtAfzBbjFUKp0x0olQSGylMEMRNoGGgeRd99811SeijMqgxT0MH9dDv1wyNN4+hJ4+Ik8VhNqo=] - x-amz-request-id: [CE49235595B4B5C4] - status: {code: 200, message: OK} -- request: - body: null - headers: - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180413T081834Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt - response: - body: {string: !!python/unicode 'This is a simple file'} - headers: - accept-ranges: [bytes] - cache-control: ['max-age=31536000, public'] - content-length: ['21'] - content-type: [text/plain] - date: ['Fri, 13 Apr 2018 08:18:35 GMT'] - etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] - last-modified: ['Fri, 13 Apr 2018 08:18:35 GMT'] - server: [AmazonS3] - x-amz-id-2: [3VkphJKU6ATD+Rrzg7cKkoA/ubFyMZ3cjKJhQyhrdd3pIPHU9IDzul7Vc6Xpx49Van/noMqHpQo=] - x-amz-request-id: [777BC1C1DEB5E9E2] - status: {code: 200, message: OK} -- request: - body: null - headers: - Content-Length: ['0'] - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180413T081834Z] - method: !!python/unicode 'DELETE' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt - response: - body: {string: !!python/unicode ''} - headers: - date: ['Fri, 13 Apr 2018 08:18:36 GMT'] - server: [AmazonS3] - x-amz-id-2: [CPnGqBCYyiD1TxBojhn3ctcPIpEP0rCNzuv0jt7QQFsbdor4QIFkw84I1ZHsa4pqAmnpsW4Qu80=] - x-amz-request-id: [92E94E9C9BADBD25] - status: {code: 204, message: No Content} -- request: - body: null - headers: - User-Agent: [Boto3/1.7.4 Python/2.7.12 Linux/4.4.0-116-generic Botocore/1.10.4 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20180413T081835Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url - response: - body: {string: !!python/unicode ' - - ak-testing-bucket1000urlfalse'} - headers: - content-type: [application/xml] - date: ['Fri, 13 Apr 2018 08:18:36 GMT'] - server: [AmazonS3] - x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [S3P3Wo9MpPnHK5a1gbnnu6rtb9xCGpzatbhV6duV4mYek3m3k7Dt80Moqxu7H8a5Xya3qXT9P/U=] - x-amz-request-id: [6905B14A29476A49] - status: {code: 200, message: OK} -version: 1 diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index 90dbc6aea4..be6fffd4c4 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -9,25 +9,22 @@ import logging import os -from os.path import dirname, join from odoo.addons.storage_backend.tests.common import Common, GenericStoreCase -from vcr import VCR +from vcr_unittest import VCRMixin _logger = logging.getLogger(__name__) -logging.getLogger("vcr").setLevel(logging.WARNING) +class AmazonS3Case(VCRMixin, Common, GenericStoreCase): + def _get_vcr_kwargs(self, **kwargs): + return { + "record_mode": "once", + "match_on": ["method", "path", "query", "body"], + "filter_headers": ["Authorization"], + "decode_compressed_response": True, + } -recorder = VCR( - record_mode="once", - cassette_library_dir=join(dirname(__file__), "fixtures/cassettes"), - path_transformer=VCR.ensure_suffix(".yaml"), - filter_headers=["Authorization"], -) - - -class AmazonS3Case(Common, GenericStoreCase): def setUp(self): super(AmazonS3Case, self).setUp() self.backend.write( @@ -45,11 +42,3 @@ def setUp(self): ), } ) - - @recorder.use_cassette - def test_setting_and_getting_data_from_root(self): - super(AmazonS3Case, self).test_setting_and_getting_data_from_root() - - @recorder.use_cassette - def test_setting_and_getting_data_from_dir(self): - super(AmazonS3Case, self).test_setting_and_getting_data_from_dir() From c398ba4b75b0c9ae5d05dd840eee6ce860cbcafc Mon Sep 17 00:00:00 2001 From: Benoit Date: Fri, 12 Apr 2019 15:57:40 +0200 Subject: [PATCH 09/49] [IMP] add tests and support pilbox for thumbnail --- storage_backend_s3/components/s3_adapter.py | 2 +- storage_backend_s3/models/storage_backend.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 23d3bed72b..698cad59aa 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -11,7 +11,7 @@ try: import boto3 -except ImportError as err: +except ImportError as err: # pragma: no cover logger.debug(err) diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 755e4d4c1e..b2ac75acb0 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -11,7 +11,7 @@ try: import boto3 -except ImportError as err: +except ImportError as err: # pragma: no cover _logger.debug(err) From e095e47866f056eea4280d66dd646364e5f9dfa3 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Fri, 7 Jun 2019 11:55:47 +0200 Subject: [PATCH 10/49] [12.0] storage*: Make installable False --- storage_backend_s3/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 7dc02ef47d..1d3a22432d 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -11,7 +11,7 @@ "website": "www.akretion.com", "author": " Akretion", "license": "AGPL-3", - "installable": True, + "installable": False, "external_dependencies": {"python": ["boto3"]}, "depends": ["storage_backend"], "data": ["views/backend_storage_view.xml"], From e8ceacb839d60a8eb32c3f59ab1ea54c405ad105 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Tue, 24 Sep 2019 10:44:11 +0200 Subject: [PATCH 11/49] [FIX] __manifest__: Uses github repo url as website and add OCA into author fixes #1 --- storage_backend_s3/__manifest__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 1d3a22432d..cee177a399 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -8,8 +8,8 @@ "summary": "Implement amazon S3 Storage", "version": "10.0.1.0.0", "category": "Storage", - "website": "www.akretion.com", - "author": " Akretion", + "website": "https://www.github.com/OCA/storage", + "author": " Akretion, Odoo Community Association (OCA)", "license": "AGPL-3", "installable": False, "external_dependencies": {"python": ["boto3"]}, From 05992e179c5b38b6e7672c1321aa53c56a588df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Tue, 1 Oct 2019 22:35:35 +0200 Subject: [PATCH 12/49] pre-commit, black, isort --- storage_backend_s3/models/storage_backend.py | 4 +--- storage_backend_s3/tests/test_amazon_s3.py | 11 ++++------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index b2ac75acb0..3e07051d79 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -28,9 +28,7 @@ def _get_aws_region(self): backend_type = fields.Selection(selection_add=[("amazon_s3", "Amazon S3")]) aws_bucket = fields.Char(sparse="data", string="Bucket") aws_access_key_id = fields.Char(sparse="data", string="Access Key ID") - aws_secret_access_key = fields.Char( - related="password", string="Secret Access Key" - ) + aws_secret_access_key = fields.Char(related="password", string="Secret Access Key") aws_region = fields.Selection( selection=_get_aws_region, sparse="data", string="Region" ) diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index be6fffd4c4..53524125a1 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -10,9 +10,10 @@ import logging import os -from odoo.addons.storage_backend.tests.common import Common, GenericStoreCase from vcr_unittest import VCRMixin +from odoo.addons.storage_backend.tests.common import Common, GenericStoreCase + _logger = logging.getLogger(__name__) @@ -30,13 +31,9 @@ def setUp(self): self.backend.write( { "backend_type": "amazon_s3", - "aws_bucket": os.environ.get( - "AWS_BUCKET", "ak-testing-bucket" - ), + "aws_bucket": os.environ.get("AWS_BUCKET", "ak-testing-bucket"), "aws_region": os.environ.get("AWS_REGION", "eu-west-3"), - "aws_access_key_id": os.environ.get( - "AWS_ACCESS_KEY_ID", "FAKEID" - ), + "aws_access_key_id": os.environ.get("AWS_ACCESS_KEY_ID", "FAKEID"), "aws_secret_access_key": os.environ.get( "AWS_SECRET_ACCESS_KEY", "FAKESECRET" ), From 78f8866bab54bc1e2022426eaa6645f578a3ab0c Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Mon, 14 Oct 2019 15:28:25 +0200 Subject: [PATCH 13/49] [MIG] storage_backend_s3: Migration to 12.0 --- storage_backend_s3/__init__.py | 2 -- storage_backend_s3/__manifest__.py | 5 ++--- storage_backend_s3/components/__init__.py | 2 -- storage_backend_s3/components/s3_adapter.py | 4 +--- storage_backend_s3/models/__init__.py | 2 -- storage_backend_s3/models/storage_backend.py | 21 ++++++++++---------- storage_backend_s3/tests/__init__.py | 2 -- storage_backend_s3/tests/test_amazon_s3.py | 1 - 8 files changed, 13 insertions(+), 26 deletions(-) diff --git a/storage_backend_s3/__init__.py b/storage_backend_s3/__init__.py index 3fbae039c0..0f00a6730d 100644 --- a/storage_backend_s3/__init__.py +++ b/storage_backend_s3/__init__.py @@ -1,4 +1,2 @@ -# -*- coding: utf-8 -*- - from . import models from . import components diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index cee177a399..ad7cda38f6 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2017 Akretion (http://www.akretion.com). # @author Sébastien BEAU # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). @@ -6,12 +5,12 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", - "version": "10.0.1.0.0", + "version": "12.0.1.0.0", "category": "Storage", "website": "https://www.github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", "license": "AGPL-3", - "installable": False, + "installable": True, "external_dependencies": {"python": ["boto3"]}, "depends": ["storage_backend"], "data": ["views/backend_storage_view.xml"], diff --git a/storage_backend_s3/components/__init__.py b/storage_backend_s3/components/__init__.py index fff15c6b4c..0d8ef55eeb 100644 --- a/storage_backend_s3/components/__init__.py +++ b/storage_backend_s3/components/__init__.py @@ -1,3 +1 @@ -# -*- coding: utf-8 -*- - from . import s3_adapter diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 698cad59aa..50efdb4772 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2017 Akretion (http://www.akretion.com). # @author Sébastien BEAU # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). @@ -21,10 +20,9 @@ class S3StorageBackend(Component): _usage = "amazon_s3" def _get_resource(self): - account = self.collection._get_existing_keychain() return boto3.Session( aws_access_key_id=self.collection.aws_access_key_id, - aws_secret_access_key=account._get_password(), + aws_secret_access_key=self.collection.aws_secret_access_key, region_name=self.collection.aws_region, ).resource("s3") diff --git a/storage_backend_s3/models/__init__.py b/storage_backend_s3/models/__init__.py index 4731534aa1..f45f402268 100644 --- a/storage_backend_s3/models/__init__.py +++ b/storage_backend_s3/models/__init__.py @@ -1,3 +1 @@ -# -*- coding: utf-8 -*- - from . import storage_backend diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 3e07051d79..0b612c6ed1 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2017 Akretion (http://www.akretion.com). # @author Sébastien BEAU # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). @@ -18,18 +17,18 @@ class StorageBackend(models.Model): _inherit = "storage.backend" - def _get_aws_region(self): + backend_type = fields.Selection(selection_add=[("amazon_s3", "Amazon S3")]) + aws_bucket = fields.Char(string="Bucket") + aws_access_key_id = fields.Char(string="Access Key ID") + aws_secret_access_key = fields.Char(string="Secret Access Key") + aws_region = fields.Selection( + selection='_selection_aws_region', string="Region" + ) + aws_cache_control = fields.Char(default="max-age=31536000, public") + + def _selection_aws_region(self): session = boto3.session.Session() return [ (region, region.replace("-", " ").capitalize()) for region in session.get_available_regions("s3") ] - - backend_type = fields.Selection(selection_add=[("amazon_s3", "Amazon S3")]) - aws_bucket = fields.Char(sparse="data", string="Bucket") - aws_access_key_id = fields.Char(sparse="data", string="Access Key ID") - aws_secret_access_key = fields.Char(related="password", string="Secret Access Key") - aws_region = fields.Selection( - selection=_get_aws_region, sparse="data", string="Region" - ) - aws_cache_control = fields.Char(default="max-age=31536000, public") diff --git a/storage_backend_s3/tests/__init__.py b/storage_backend_s3/tests/__init__.py index 8f19474001..1282cd2ce0 100644 --- a/storage_backend_s3/tests/__init__.py +++ b/storage_backend_s3/tests/__init__.py @@ -1,3 +1 @@ -# -*- coding: utf-8 -*- - from . import test_amazon_s3 diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index 53524125a1..fec00d26df 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2017 Akretion (http://www.akretion.com). # @author Sébastien BEAU # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). From 2585803bc74cd205c2387309de5f80de9e0693c1 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Sat, 2 Nov 2019 18:51:36 +0100 Subject: [PATCH 14/49] storage_backend_s3: improvements * support custom endpoint * refactor bucket handling * re-register vcrpy tests --- storage_backend_s3/components/s3_adapter.py | 102 ++- storage_backend_s3/models/storage_backend.py | 5 + ...est_setting_and_getting_data_from_dir.yaml | 593 ++++++++++++++---- ...st_setting_and_getting_data_from_root.yaml | 593 ++++++++++++++---- storage_backend_s3/tests/test_amazon_s3.py | 21 +- .../views/backend_storage_view.xml | 3 +- 6 files changed, 1064 insertions(+), 253 deletions(-) diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 50efdb4772..8ab3da4a4a 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -2,50 +2,112 @@ # @author Sébastien BEAU # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import io import logging +from odoo import _, exceptions from odoo.addons.component.core import Component -logger = logging.getLogger(__name__) +_logger = logging.getLogger(__name__) try: import boto3 + from botocore.exceptions import ClientError, EndpointConnectionError + except ImportError as err: # pragma: no cover - logger.debug(err) + _logger.debug(err) -class S3StorageBackend(Component): +class S3StorageAdapter(Component): _name = "s3.adapter" _inherit = "base.storage.adapter" _usage = "amazon_s3" - def _get_resource(self): - return boto3.Session( - aws_access_key_id=self.collection.aws_access_key_id, - aws_secret_access_key=self.collection.aws_secret_access_key, - region_name=self.collection.aws_region, - ).resource("s3") + def _aws_bucket_params(self): + params = { + "aws_access_key_id": self.collection.aws_access_key_id, + "aws_secret_access_key": self.collection.aws_secret_access_key, + "region_name": self.collection.aws_region, + } + if self.collection.aws_host: + params["endpoint_url"] = self.collection.aws_host + # region must be excluded, otherwise endpoint is ignored + params.pop("region_name", None) + return params + + def _get_bucket(self): + params = self._aws_bucket_params() + s3 = boto3.resource("s3", **params) + bucket_name = self.collection.aws_bucket + bucket = s3.Bucket(bucket_name) + exists = True + try: + s3.meta.client.head_bucket(Bucket=bucket_name) + except ClientError as e: + # If a client error is thrown, then check that it was a 404 error. + # If it was a 404 error, then the bucket does not exist. + error_code = e.response["Error"]["Code"] + if error_code == "404": + exists = False + except EndpointConnectionError as error: + # log verbose error from s3, return short message for user + _logger.exception("Error during connection on S3") + raise exceptions.UserError(str(error)) + region_name = params.get("region_name") + if not exists: + if not region_name: + bucket = s3.create_bucket(Bucket=bucket_name) + else: + bucket = s3.create_bucket( + Bucket=bucket_name, + CreateBucketConfiguration={ + "LocationConstraint": region_name + }, + ) + return bucket - def _get_object(self, relative_path): - s3 = self._get_resource() - path = self._fullpath(relative_path) - return s3.Object(self.collection.aws_bucket, path) + def _get_object(self, relative_path=None): + bucket = self._get_bucket() + path = None + if relative_path: + path = self._fullpath(relative_path) + return bucket.Object(key=path) - def add(self, relative_path, data, mimetype=None, **kwargs): + def add(self, relative_path, bin_data, mimetype=None, **kwargs): s3object = self._get_object(relative_path) - s3object.put( - Body=data, - ContentType=mimetype, - CacheControl=self.collection.aws_cache_control or "", + file_params = self._aws_upload_fileobj_params( + mimetype=mimetype, **kwargs ) + with io.BytesIO() as fileobj: + fileobj.write(bin_data) + fileobj.seek(0) + try: + s3object.upload_fileobj(fileobj, **file_params) + except ClientError as error: + # log verbose error from s3, return short message for user + _logger.exception( + "Error during storage of the file %s" % relative_path + ) + raise exceptions.UserError( + _("The file could not be stored: %s") % str(error) + ) + + def _aws_upload_fileobj_params(self, mimetype=None, **kw): + extra_args = {} + if mimetype: + extra_args["ContentType"] = mimetype + if self.collection.aws_cache_control: + extra_args["CacheControl"] = self.collection.aws_cache_control + if extra_args: + return {"ExtraArgs": extra_args} + return {} def get(self, relative_path): s3object = self._get_object(relative_path) return s3object.get()["Body"].read() def list(self, relative_path): - resource = self._get_resource() - bucket = resource.Bucket(self.collection.aws_bucket) + bucket = self._get_bucket() dir_path = self.collection.directory_path or "" return [ o.key.replace(dir_path, "").lstrip("/") diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 0b612c6ed1..5004e8c514 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -18,6 +18,11 @@ class StorageBackend(models.Model): _inherit = "storage.backend" backend_type = fields.Selection(selection_add=[("amazon_s3", "Amazon S3")]) + aws_host = fields.Char( + string="Host", + help="If you are using a different host than standard AWS ones, " + "eg: Exoscale", + ) aws_bucket = fields.Char(string="Bucket") aws_access_key_id = fields.Char(string="Access Key ID") aws_secret_access_key = fields.Char(string="Secret Access Key") diff --git a/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml index 227f9be0ea..8b8a75ae9c 100644 --- a/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml +++ b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml @@ -2,138 +2,503 @@ interactions: - request: body: null headers: - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20190411T090835Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=subdirectory%2Fhere&encoding-type=url + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ1Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend response: - body: {string: !!python/unicode ' - - ak-testing-bucketsubdirectory/here1000urlfalse'} - headers: - content-type: [application/xml] - date: ['Thu, 11 Apr 2019 09:08:36 GMT'] - server: [AmazonS3] - transfer-encoding: [chunked] - x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [uOcZsX6vGGhmm5ph4OyyPk5kU0k+cMw9b5wOoFf/NpQS6txp1gif3d4qlzYWhTaa/HJzDA478+s=] - x-amz-request-id: [7E88BABE8B63A735] - status: {code: 200, message: OK} + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:45 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - a85cafab-77af-4f67-8e06-37a3ab1b637b + x-amz-request-id: + - a85cafab-77af-4f67-8e06-37a3ab1b637b + x-amz-requestid: + - a85cafab-77af-4f67-8e06-37a3ab1b637b + status: + code: 200 + message: OK +- request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ1Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix=subdirectory%2Fhere + response: + body: + string: test-storage-backendsubdirectory/here1000urlfalse + headers: + Connection: + - keep-alive + Content-Length: + - '300' + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:45 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 97757b05-7d88-480f-be75-98786a9492e8 + x-amz-request-id: + - 97757b05-7d88-480f-be75-98786a9492e8 + x-amzn-requestid: + - 97757b05-7d88-480f-be75-98786a9492e8 + status: + code: 200 + message: OK +- request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ1Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:45 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 69932919-580b-4d66-bf3d-1916710b4543 + x-amz-request-id: + - 69932919-580b-4d66-bf3d-1916710b4543 + x-amz-requestid: + - 69932919-580b-4d66-bf3d-1916710b4543 + status: + code: 200 + message: OK +- request: + body: !!python/object/new:_io.BytesIO + state: !!python/tuple + - !!binary | + VGhpcyBpcyBhIHNpbXBsZSBmaWxl + - 0 + - null + headers: + Cache-Control: + - !!binary | + bWF4LWFnZT0zMTUzNjAwMCwgcHVibGlj + Content-Length: + - '21' + Content-MD5: + - !!binary | + R1FxakVYc1JxclB5eGZUbDk5bmtBZz09 + Content-Type: + - !!binary | + dGV4dC9wbGFpbg== + Expect: + - !!binary | + MTAwLWNvbnRpbnVl + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + VU5TSUdORUQtUEFZTE9BRA== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ1Wg== + method: PUT + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/subdirectory/here/test_file.txt + response: + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:45 GMT + Server: + - nginx + etag: + - '"190aa3117b11aab3f2c5f4e5f7d9e402"' + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - a10aa8d7-4b08-4a01-89fd-66ea990783e4 + x-amz-request-id: + - a10aa8d7-4b08-4a01-89fd-66ea990783e4 + x-amz-requestid: + - a10aa8d7-4b08-4a01-89fd-66ea990783e4 + status: + code: 200 + message: OK +- request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ1Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 0245bcda-d484-468c-98f4-5dc16e7f6aa5 + x-amz-request-id: + - 0245bcda-d484-468c-98f4-5dc16e7f6aa5 + x-amz-requestid: + - 0245bcda-d484-468c-98f4-5dc16e7f6aa5 + status: + code: 200 + message: OK +- request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix=subdirectory%2Fhere + response: + body: + string: test-storage-backendsubdirectory/here1000urlfalsesubdirectory/here/test_file.txt2019-11-02T14:42:45.855Z"190aa3117b11aab3f2c5f4e5f7d9e402"21odoo-plateformeodoo-plateformeStandard + headers: + Connection: + - keep-alive + Content-Length: + - '596' + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 5db74b47-e834-41c2-8b9c-d1575542f4f1 + x-amz-request-id: + - 5db74b47-e834-41c2-8b9c-d1575542f4f1 + x-amzn-requestid: + - 5db74b47-e834-41c2-8b9c-d1575542f4f1 + status: + code: 200 + message: OK +- request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 3393f9c7-9201-41c6-b8dd-a2ca873cca62 + x-amz-request-id: + - 3393f9c7-9201-41c6-b8dd-a2ca873cca62 + x-amz-requestid: + - 3393f9c7-9201-41c6-b8dd-a2ca873cca62 + status: + code: 200 + message: OK - request: - body: !!python/object:StringIO.StringIO - buf: This is a simple file - buflist: [] - closed: false - len: 21 - pos: 0 - softspace: 0 - headers: - Cache-Control: ['max-age=31536000, public'] - Content-Length: ['21'] - Content-MD5: [GQqjEXsRqrPyxfTl99nkAg==] - Content-Type: [text/plain] - Expect: [100-continue] - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [UNSIGNED-PAYLOAD] - X-Amz-Date: [20190411T090835Z] - method: !!python/unicode 'PUT' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/subdirectory/here/test_file.txt response: - body: {string: !!python/unicode ''} - headers: - content-length: ['0'] - date: ['Thu, 11 Apr 2019 09:08:36 GMT'] - etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] - server: [AmazonS3] - x-amz-id-2: [RgrsKLomTM+PxVh6V+IALMJNDJJusAreLZJRAU79416+8tkeSuFr8/ZlpEzb4yA908GylswaAWI=] - x-amz-request-id: [E3C4CE305C22AD60] - status: {code: 200, message: OK} + body: + string: This is a simple file + headers: + Connection: + - keep-alive + Content-Length: + - '21' + Content-Type: + - text/plain + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + cache-control: + - max-age=31536000, public + etag: + - '"190aa3117b11aab3f2c5f4e5f7d9e402"' + last-modified: + - Sat, 02 Nov 2019 14:42:45 GMT + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 04ac2feb-ccb9-4b10-a7ca-0630a87bf65e + x-amz-request-id: + - 04ac2feb-ccb9-4b10-a7ca-0630a87bf65e + x-amzn-requestid: + - 04ac2feb-ccb9-4b10-a7ca-0630a87bf65e + status: + code: 200 + message: OK - request: body: null headers: - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20190411T090835Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=subdirectory%2Fhere&encoding-type=url + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend response: - body: {string: !!python/unicode ' - - ak-testing-bucketsubdirectory/here1000urlfalsesubdirectory/here/test_file.txt2019-04-11T09:08:36.000Z"190aa3117b11aab3f2c5f4e5f7d9e402"215710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} - headers: - content-type: [application/xml] - date: ['Thu, 11 Apr 2019 09:08:36 GMT'] - server: [AmazonS3] - transfer-encoding: [chunked] - x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [GjT2YOaLPuyXaSQLYgk5g8qINjleihd6bXh3YYtblu4pl/N8DJxHqfBolkpOUpR4hbPSW7+pLOU=] - x-amz-request-id: [65E6B5353DC93DD8] - status: {code: 200, message: OK} + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - d6dac54b-96a1-4336-90ab-ee6784f1a4f7 + x-amz-request-id: + - d6dac54b-96a1-4336-90ab-ee6784f1a4f7 + x-amz-requestid: + - d6dac54b-96a1-4336-90ab-ee6784f1a4f7 + status: + code: 200 + message: OK - request: body: null headers: - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20190411T090836Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt + Content-Length: + - '0' + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: DELETE + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/subdirectory/here/test_file.txt response: - body: {string: !!python/unicode 'This is a simple file'} - headers: - accept-ranges: [bytes] - cache-control: ['max-age=31536000, public'] - content-length: ['21'] - content-type: [text/plain] - date: ['Thu, 11 Apr 2019 09:08:37 GMT'] - etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] - last-modified: ['Thu, 11 Apr 2019 09:08:36 GMT'] - server: [AmazonS3] - x-amz-id-2: [lT9X9Z4ffcu6vYHA9WMqA05ykqvM5jS0r9AggiZMEoQIWj8OoYU3IYAJbREnzqP41ejsVyIwox8=] - x-amz-request-id: [3710816CDEE29024] - status: {code: 200, message: OK} + body: + string: '' + headers: + Connection: + - keep-alive + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 647fc062-5a74-4435-ab61-810d31aefde7 + x-amz-request-id: + - 647fc062-5a74-4435-ab61-810d31aefde7 + x-amz-requestid: + - 647fc062-5a74-4435-ab61-810d31aefde7 + status: + code: 204 + message: No Content - request: body: null headers: - Content-Length: ['0'] - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20190411T090836Z] - method: !!python/unicode 'DELETE' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/subdirectory/here/test_file.txt + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend response: - body: {string: !!python/unicode ''} + body: + string: '' headers: - date: ['Thu, 11 Apr 2019 09:08:37 GMT'] - server: [AmazonS3] - x-amz-id-2: [MABygkjKt8QMBuXMwORdi628qMOQm5FflSYYQZPWH+pq9tZWAf+/ZlA/43mgUbR39Rbw/GQdj7Y=] - x-amz-request-id: [B4204D35B2E70AE2] - status: {code: 204, message: No Content} + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:47 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - f7261bc7-8d44-40ea-bbbf-030073cf1e51 + x-amz-request-id: + - f7261bc7-8d44-40ea-bbbf-030073cf1e51 + x-amz-requestid: + - f7261bc7-8d44-40ea-bbbf-030073cf1e51 + status: + code: 200 + message: OK - request: body: null headers: - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20190411T090836Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=subdirectory%2Fhere&encoding-type=url + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ3Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix=subdirectory%2Fhere response: - body: {string: !!python/unicode ' - - ak-testing-bucketsubdirectory/here1000urlfalse'} - headers: - content-type: [application/xml] - date: ['Thu, 11 Apr 2019 09:08:38 GMT'] - server: [AmazonS3] - transfer-encoding: [chunked] - x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [06hz7LdPR6Z6AO1qPHd231p6OUTHhxvE6s8iRiG8rkhuVi1mw2sRRvdM7q1ZPUnSfXrmQh9CJfY=] - x-amz-request-id: [B6ABFF59DC945A6E] - status: {code: 200, message: OK} + body: + string: test-storage-backendsubdirectory/here1000urlfalse + headers: + Connection: + - keep-alive + Content-Length: + - '300' + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:47 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 1cf7a3a2-cd2c-4f59-be26-85a2eb947e35 + x-amz-request-id: + - 1cf7a3a2-cd2c-4f59-be26-85a2eb947e35 + x-amzn-requestid: + - 1cf7a3a2-cd2c-4f59-be26-85a2eb947e35 + status: + code: 200 + message: OK version: 1 diff --git a/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml index 17bd6bb623..329c395ab0 100644 --- a/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml +++ b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml @@ -2,138 +2,503 @@ interactions: - request: body: null headers: - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20190411T090837Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ3Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend response: - body: {string: !!python/unicode ' - - ak-testing-bucket1000urlfalsesites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f2ff7d9f002478ab05/files/slide-2.png2018-07-04T07:36:19.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f3ff7d9f002478ab08/files/slide-1.png2018-07-04T07:36:20.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe6/files/slide-2.png2018-07-04T07:38:18.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe9/files/slide-1.png2018-07-04T07:38:18.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac17/files/slide-2.png2018-07-04T07:39:21.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac1a/files/slide-1.png2018-07-04T07:39:21.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/rawpixel-com-268376-jumbotron.jpg2018-07-04T07:39:21.000Z"99c8da16055e2d2c259925047e354b4f"2219855710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/william-iven-5895-thumb.jpg2018-07-04T07:39:21.000Z"54c5877c668be615d66829af706af9f7"369725710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-jumbotron.jpg2018-07-04T07:39:21.000Z"0cff59cf33745eb0133683cefe1bcc0d"2293705710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-thumb.jpg2018-07-04T07:39:22.000Z"ab4e5c8a80ee3ed56d948808e0284acd"409575710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-jumbotron.jpg2018-07-04T07:39:22.000Z"e81c06a564d313ae08050314eb669166"2210495710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-thumb.jpg2018-07-04T07:39:22.000Z"add79fc36b7f75393e935a94e36188bb"1118255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-jumbotron.jpg2018-07-04T07:39:22.000Z"720b38c5b73c0d5c989fc3471b1b5247"2390275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-thumb-1.jpg2018-07-04T07:39:22.000Z"96588038b60a089ec9082d9f6bdf19ce"2251205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-jumbotron.jpg2018-07-04T07:39:23.000Z"857a7cf78efb4dcf31eb1d1d3210a426"3720905710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-thubnail.jpg2018-07-04T07:39:23.000Z"dfe0c0ca1ab1e70a1e13ff37da762351"545135710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/FontAwesome.otf2018-06-29T13:44:25.000Z"0d2717cd5d853e5c765ca032dfd41a4d"1348085710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/Lato-Black.ttf2018-06-29T13:44:35.000Z"77d353744697c77955f9bacc7f3ed90a"1145885710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.eot2018-06-29T13:44:34.000Z"f4769f9bdb7466be65088239c12046d1"201275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.svg2018-06-29T13:44:33.000Z"89889688147bd7575d6327160d64e760"1087385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.ttf2018-06-29T13:44:33.000Z"e18bbf611f2a2e43afc071aa2f4e1512"454045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff2018-06-29T13:44:34.000Z"fa2772327f55d8198301fdb8bcfc8158"234245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff22018-06-29T13:44:34.000Z"448c34a56d699c29117adc64c43affeb"180285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.eot2018-06-29T13:44:34.000Z"674f50d287a8c48dc19ba404d20fe713"1657425710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.svg2018-06-29T13:44:32.000Z"912ec66d7572ff821749319396470bde"4443795710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.ttf2018-06-29T13:44:35.000Z"b06871f281fee6b241d60582ae9369b9"1655485710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff2018-06-29T13:44:25.000Z"fee66e712a8a08eef5805a46892932ad"980245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff22018-06-29T13:44:30.000Z"af7ae505a9eed503f8b8e6982036873e"771605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.eot2018-06-29T13:44:29.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.svg2018-06-29T13:44:28.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.ttf2018-06-29T13:44:29.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff2018-06-29T13:44:27.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff22018-06-29T13:44:30.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.eot2018-06-29T13:44:29.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.svg2018-06-29T13:44:27.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.ttf2018-06-29T13:44:26.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff2018-06-29T13:44:27.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff22018-06-29T13:44:27.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.eot2018-06-29T13:44:30.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.svg2018-06-29T13:44:26.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.ttf2018-06-29T13:44:29.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff2018-06-29T13:44:26.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff22018-06-29T13:44:28.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/lato-regular.ttf2018-06-29T13:44:35.000Z"7f690e503a254e0b8349aec0177e07aa"1201965710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/sf-distant-galaxy.ttf2018-06-29T13:44:31.000Z"75c0119ca475dea587b8661501320be5"588605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-categories.jpg2018-06-29T13:44:36.000Z"4cd91e4b4d53a8be36a87c1901509025"1574815710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-info.jpg2018-06-29T13:44:37.000Z"43bc85397f794a217ca6302f31132a83"2841775710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/cart-icon.png2018-06-29T13:44:36.000Z"27023441e91a1bfd49e853083c5be189"17195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/favicon.png2018-06-29T13:44:36.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/powered-by-shopinvader-logo.png2018-06-29T13:44:36.000Z"0b28631a788bc3bc5b4e8fbffc77a6fc"49955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/user-icon.png2018-06-29T13:44:37.000Z"9a4cbcac50e8a8dc8716602dc6939506"15195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/address_autocomplete.js2018-06-29T13:44:58.000Z"825f802393fe3cab46aca96f85e808e6"12145710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/application.js2018-06-29T13:44:56.000Z"7b27f5eedf5b6a8765911598d657af0b"36765710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap3.min.js2018-06-29T13:45:01.000Z"c9599ff427c45c06987d2a77504061d0"366415710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap4.min.js2018-06-29T13:45:02.000Z"52fb01bb48c42d311b54a638fc3bbb66"511305710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.min.js2018-07-04T07:31:04.000Z"a04a0b2062dba95a1c195ba8ba81da33"964385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.slidereveal.min.js2018-06-29T13:44:56.000Z"8b3f238f0edcb6b1bd2e0a1ca8dbadcf"26365710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.touchSwipe.min.js2018-06-29T13:44:54.000Z"2ca5cd81e4decec5d563ccc714c13f75"106665710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/popper.min.js2018-07-04T07:31:02.000Z"7fadcd304c51c2bf074dab5d173fad96"189005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search.js2018-06-29T13:44:55.000Z"496ab01d638a8d9be0eaec5d9357da99"69015710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search_autocomplete.js2018-06-29T13:44:54.000Z"abce4f520d568e5e8a27c876cccf07a5"29265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/services-worker.js2018-06-29T13:44:55.000Z"c16e4b803908e63721393b2aed92cc1a"6275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/shopinvader.jquery.js2018-06-29T13:44:58.000Z"205cc517dbd11156b5e88ccd226acead"12735710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/application.css2018-07-04T07:39:34.000Z"aefd53a2b193daebbd450704ef07e76d"1750355710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap.css2018-06-29T13:44:42.000Z"921023af04e9bfbdfcd9e908ae41838a"16605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-grid.css2018-06-29T13:44:53.000Z"3bf136721f307910a86b0c12c075b00a"189345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-reboot.css2018-06-29T13:44:53.000Z"17e26b4ec047a23fae14084355c307f3"38945710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap.css2018-06-29T13:44:52.000Z"7dc28db4b228b26a897793e820f962c0"1226185710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/font-awesome.min.css2018-06-29T13:44:50.000Z"dab5d93045d08b50c34834f543ef2860"310005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-brands.css2018-06-29T13:44:44.000Z"3b03a4e1b155ac50c811bc8fb5d92a56"7195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-regular.css2018-06-29T13:44:42.000Z"cca47fb43f791546264ddcf85d46872c"7345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-solid.css2018-06-29T13:44:42.000Z"fa42ec4d3ddd4f4dd6f794ecaa5efc9a"7265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fontawesome.css2018-06-29T13:44:44.000Z"5664ed3aceb3f01878afb4ccb720708e"351255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.eot2018-06-29T13:44:40.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.svg2018-06-29T13:44:39.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.ttf2018-06-29T13:44:41.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff2018-06-29T13:44:39.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff22018-06-29T13:44:41.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.eot2018-06-29T13:44:40.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.svg2018-06-29T13:44:39.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.ttf2018-06-29T13:44:37.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff2018-06-29T13:44:39.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff22018-06-29T13:44:38.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.eot2018-06-29T13:44:41.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.svg2018-06-29T13:44:38.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.ttf2018-06-29T13:44:41.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff2018-06-29T13:44:38.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff22018-06-29T13:44:40.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDuploaded_assets/5b363695b82aa70027161e8d/icon.png2018-06-29T13:44:19.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} - headers: - content-type: [application/xml] - date: ['Thu, 11 Apr 2019 09:08:39 GMT'] - server: [AmazonS3] - transfer-encoding: [chunked] - x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [Jj7HLNDjYTEW7pGeO+25kO8E+0wEG4ROWLqZW5QBW9Dd/RAa1iOwfqu75souBcfEdd8WLWDCqDA=] - x-amz-request-id: [32DE59095E04EF5F] - status: {code: 200, message: OK} + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:47 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 29a34678-f089-4df0-82be-6ea48fa074fc + x-amz-request-id: + - 29a34678-f089-4df0-82be-6ea48fa074fc + x-amz-requestid: + - 29a34678-f089-4df0-82be-6ea48fa074fc + status: + code: 200 + message: OK +- request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ3Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix= + response: + body: + string: test-storage-backend1000urlfalse + headers: + Connection: + - keep-alive + Content-Length: + - '283' + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:47 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 1dab5d2a-721c-44bb-b98b-c4bee9abd720 + x-amz-request-id: + - 1dab5d2a-721c-44bb-b98b-c4bee9abd720 + x-amzn-requestid: + - 1dab5d2a-721c-44bb-b98b-c4bee9abd720 + status: + code: 200 + message: OK +- request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ3Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:47 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 4be173e4-123b-497c-9a9c-c4acf4d0dcfd + x-amz-request-id: + - 4be173e4-123b-497c-9a9c-c4acf4d0dcfd + x-amz-requestid: + - 4be173e4-123b-497c-9a9c-c4acf4d0dcfd + status: + code: 200 + message: OK +- request: + body: !!python/object/new:_io.BytesIO + state: !!python/tuple + - !!binary | + VGhpcyBpcyBhIHNpbXBsZSBmaWxl + - 0 + - null + headers: + Cache-Control: + - !!binary | + bWF4LWFnZT0zMTUzNjAwMCwgcHVibGlj + Content-Length: + - '21' + Content-MD5: + - !!binary | + R1FxakVYc1JxclB5eGZUbDk5bmtBZz09 + Content-Type: + - !!binary | + dGV4dC9wbGFpbg== + Expect: + - !!binary | + MTAwLWNvbnRpbnVl + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + VU5TSUdORUQtUEFZTE9BRA== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ3Wg== + method: PUT + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/test_file.txt + response: + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + etag: + - '"190aa3117b11aab3f2c5f4e5f7d9e402"' + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 6b3a20b8-79de-4146-89e3-6014ac70a811 + x-amz-request-id: + - 6b3a20b8-79de-4146-89e3-6014ac70a811 + x-amz-requestid: + - 6b3a20b8-79de-4146-89e3-6014ac70a811 + status: + code: 200 + message: OK +- request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - efeeb2fc-f22c-4afe-80c4-ac5b4fa2aa33 + x-amz-request-id: + - efeeb2fc-f22c-4afe-80c4-ac5b4fa2aa33 + x-amz-requestid: + - efeeb2fc-f22c-4afe-80c4-ac5b4fa2aa33 + status: + code: 200 + message: OK +- request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix= + response: + body: + string: test-storage-backend1000urlfalsetest_file.txt2019-11-02T14:42:48.041Z"190aa3117b11aab3f2c5f4e5f7d9e402"21odoo-plateformeodoo-plateformeStandard + headers: + Connection: + - keep-alive + Content-Length: + - '561' + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 313f3b01-a1d5-40ae-8ae8-87eaf491b38e + x-amz-request-id: + - 313f3b01-a1d5-40ae-8ae8-87eaf491b38e + x-amzn-requestid: + - 313f3b01-a1d5-40ae-8ae8-87eaf491b38e + status: + code: 200 + message: OK +- request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - a095635b-ac42-489e-bf67-f87c30ce4dfd + x-amz-request-id: + - a095635b-ac42-489e-bf67-f87c30ce4dfd + x-amz-requestid: + - a095635b-ac42-489e-bf67-f87c30ce4dfd + status: + code: 200 + message: OK - request: - body: !!python/object:StringIO.StringIO - buf: This is a simple file - buflist: [] - closed: false - len: 21 - pos: 0 - softspace: 0 - headers: - Cache-Control: ['max-age=31536000, public'] - Content-Length: ['21'] - Content-MD5: [GQqjEXsRqrPyxfTl99nkAg==] - Content-Type: [text/plain] - Expect: [100-continue] - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [UNSIGNED-PAYLOAD] - X-Amz-Date: [20190411T090838Z] - method: !!python/unicode 'PUT' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/test_file.txt response: - body: {string: !!python/unicode ''} - headers: - content-length: ['0'] - date: ['Thu, 11 Apr 2019 09:08:39 GMT'] - etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] - server: [AmazonS3] - x-amz-id-2: [aCasC7srqbXYyy0VdyH2H5GJClt2GwoiN++v5ncexWIzMoIbVwLMVFwVqaj9c8RN910D/yETIBg=] - x-amz-request-id: [79A9DEC19AA46D7A] - status: {code: 200, message: OK} + body: + string: This is a simple file + headers: + Connection: + - keep-alive + Content-Length: + - '21' + Content-Type: + - text/plain + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + cache-control: + - max-age=31536000, public + etag: + - '"190aa3117b11aab3f2c5f4e5f7d9e402"' + last-modified: + - Sat, 02 Nov 2019 14:42:48 GMT + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 9d6ba5a1-90d6-4106-81f4-40ba427cb124 + x-amz-request-id: + - 9d6ba5a1-90d6-4106-81f4-40ba427cb124 + x-amzn-requestid: + - 9d6ba5a1-90d6-4106-81f4-40ba427cb124 + status: + code: 200 + message: OK - request: body: null headers: - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20190411T090838Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend response: - body: {string: !!python/unicode ' - - ak-testing-bucket1000urlfalsesites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f2ff7d9f002478ab05/files/slide-2.png2018-07-04T07:36:19.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f3ff7d9f002478ab08/files/slide-1.png2018-07-04T07:36:20.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe6/files/slide-2.png2018-07-04T07:38:18.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe9/files/slide-1.png2018-07-04T07:38:18.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac17/files/slide-2.png2018-07-04T07:39:21.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac1a/files/slide-1.png2018-07-04T07:39:21.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/rawpixel-com-268376-jumbotron.jpg2018-07-04T07:39:21.000Z"99c8da16055e2d2c259925047e354b4f"2219855710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/william-iven-5895-thumb.jpg2018-07-04T07:39:21.000Z"54c5877c668be615d66829af706af9f7"369725710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-jumbotron.jpg2018-07-04T07:39:21.000Z"0cff59cf33745eb0133683cefe1bcc0d"2293705710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-thumb.jpg2018-07-04T07:39:22.000Z"ab4e5c8a80ee3ed56d948808e0284acd"409575710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-jumbotron.jpg2018-07-04T07:39:22.000Z"e81c06a564d313ae08050314eb669166"2210495710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-thumb.jpg2018-07-04T07:39:22.000Z"add79fc36b7f75393e935a94e36188bb"1118255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-jumbotron.jpg2018-07-04T07:39:22.000Z"720b38c5b73c0d5c989fc3471b1b5247"2390275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-thumb-1.jpg2018-07-04T07:39:22.000Z"96588038b60a089ec9082d9f6bdf19ce"2251205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-jumbotron.jpg2018-07-04T07:39:23.000Z"857a7cf78efb4dcf31eb1d1d3210a426"3720905710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-thubnail.jpg2018-07-04T07:39:23.000Z"dfe0c0ca1ab1e70a1e13ff37da762351"545135710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/FontAwesome.otf2018-06-29T13:44:25.000Z"0d2717cd5d853e5c765ca032dfd41a4d"1348085710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/Lato-Black.ttf2018-06-29T13:44:35.000Z"77d353744697c77955f9bacc7f3ed90a"1145885710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.eot2018-06-29T13:44:34.000Z"f4769f9bdb7466be65088239c12046d1"201275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.svg2018-06-29T13:44:33.000Z"89889688147bd7575d6327160d64e760"1087385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.ttf2018-06-29T13:44:33.000Z"e18bbf611f2a2e43afc071aa2f4e1512"454045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff2018-06-29T13:44:34.000Z"fa2772327f55d8198301fdb8bcfc8158"234245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff22018-06-29T13:44:34.000Z"448c34a56d699c29117adc64c43affeb"180285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.eot2018-06-29T13:44:34.000Z"674f50d287a8c48dc19ba404d20fe713"1657425710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.svg2018-06-29T13:44:32.000Z"912ec66d7572ff821749319396470bde"4443795710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.ttf2018-06-29T13:44:35.000Z"b06871f281fee6b241d60582ae9369b9"1655485710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff2018-06-29T13:44:25.000Z"fee66e712a8a08eef5805a46892932ad"980245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff22018-06-29T13:44:30.000Z"af7ae505a9eed503f8b8e6982036873e"771605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.eot2018-06-29T13:44:29.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.svg2018-06-29T13:44:28.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.ttf2018-06-29T13:44:29.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff2018-06-29T13:44:27.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff22018-06-29T13:44:30.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.eot2018-06-29T13:44:29.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.svg2018-06-29T13:44:27.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.ttf2018-06-29T13:44:26.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff2018-06-29T13:44:27.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff22018-06-29T13:44:27.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.eot2018-06-29T13:44:30.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.svg2018-06-29T13:44:26.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.ttf2018-06-29T13:44:29.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff2018-06-29T13:44:26.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff22018-06-29T13:44:28.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/lato-regular.ttf2018-06-29T13:44:35.000Z"7f690e503a254e0b8349aec0177e07aa"1201965710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/sf-distant-galaxy.ttf2018-06-29T13:44:31.000Z"75c0119ca475dea587b8661501320be5"588605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-categories.jpg2018-06-29T13:44:36.000Z"4cd91e4b4d53a8be36a87c1901509025"1574815710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-info.jpg2018-06-29T13:44:37.000Z"43bc85397f794a217ca6302f31132a83"2841775710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/cart-icon.png2018-06-29T13:44:36.000Z"27023441e91a1bfd49e853083c5be189"17195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/favicon.png2018-06-29T13:44:36.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/powered-by-shopinvader-logo.png2018-06-29T13:44:36.000Z"0b28631a788bc3bc5b4e8fbffc77a6fc"49955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/user-icon.png2018-06-29T13:44:37.000Z"9a4cbcac50e8a8dc8716602dc6939506"15195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/address_autocomplete.js2018-06-29T13:44:58.000Z"825f802393fe3cab46aca96f85e808e6"12145710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/application.js2018-06-29T13:44:56.000Z"7b27f5eedf5b6a8765911598d657af0b"36765710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap3.min.js2018-06-29T13:45:01.000Z"c9599ff427c45c06987d2a77504061d0"366415710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap4.min.js2018-06-29T13:45:02.000Z"52fb01bb48c42d311b54a638fc3bbb66"511305710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.min.js2018-07-04T07:31:04.000Z"a04a0b2062dba95a1c195ba8ba81da33"964385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.slidereveal.min.js2018-06-29T13:44:56.000Z"8b3f238f0edcb6b1bd2e0a1ca8dbadcf"26365710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.touchSwipe.min.js2018-06-29T13:44:54.000Z"2ca5cd81e4decec5d563ccc714c13f75"106665710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/popper.min.js2018-07-04T07:31:02.000Z"7fadcd304c51c2bf074dab5d173fad96"189005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search.js2018-06-29T13:44:55.000Z"496ab01d638a8d9be0eaec5d9357da99"69015710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search_autocomplete.js2018-06-29T13:44:54.000Z"abce4f520d568e5e8a27c876cccf07a5"29265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/services-worker.js2018-06-29T13:44:55.000Z"c16e4b803908e63721393b2aed92cc1a"6275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/shopinvader.jquery.js2018-06-29T13:44:58.000Z"205cc517dbd11156b5e88ccd226acead"12735710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/application.css2018-07-04T07:39:34.000Z"aefd53a2b193daebbd450704ef07e76d"1750355710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap.css2018-06-29T13:44:42.000Z"921023af04e9bfbdfcd9e908ae41838a"16605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-grid.css2018-06-29T13:44:53.000Z"3bf136721f307910a86b0c12c075b00a"189345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-reboot.css2018-06-29T13:44:53.000Z"17e26b4ec047a23fae14084355c307f3"38945710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap.css2018-06-29T13:44:52.000Z"7dc28db4b228b26a897793e820f962c0"1226185710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/font-awesome.min.css2018-06-29T13:44:50.000Z"dab5d93045d08b50c34834f543ef2860"310005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-brands.css2018-06-29T13:44:44.000Z"3b03a4e1b155ac50c811bc8fb5d92a56"7195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-regular.css2018-06-29T13:44:42.000Z"cca47fb43f791546264ddcf85d46872c"7345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-solid.css2018-06-29T13:44:42.000Z"fa42ec4d3ddd4f4dd6f794ecaa5efc9a"7265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fontawesome.css2018-06-29T13:44:44.000Z"5664ed3aceb3f01878afb4ccb720708e"351255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.eot2018-06-29T13:44:40.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.svg2018-06-29T13:44:39.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.ttf2018-06-29T13:44:41.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff2018-06-29T13:44:39.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff22018-06-29T13:44:41.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.eot2018-06-29T13:44:40.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.svg2018-06-29T13:44:39.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.ttf2018-06-29T13:44:37.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff2018-06-29T13:44:39.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff22018-06-29T13:44:38.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.eot2018-06-29T13:44:41.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.svg2018-06-29T13:44:38.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.ttf2018-06-29T13:44:41.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff2018-06-29T13:44:38.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff22018-06-29T13:44:40.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDtest_file.txt2019-04-11T09:08:39.000Z"190aa3117b11aab3f2c5f4e5f7d9e402"215710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDuploaded_assets/5b363695b82aa70027161e8d/icon.png2018-06-29T13:44:19.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} - headers: - content-type: [application/xml] - date: ['Thu, 11 Apr 2019 09:08:40 GMT'] - server: [AmazonS3] - transfer-encoding: [chunked] - x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [zSQKQ+RYpWu0jxDzc7c+ulMM7ORJt9uP5wb/VjHg4ul6nl56b308SLV2N9BvbBamYrgsH6tT9Rc=] - x-amz-request-id: [9C61321610F0E16F] - status: {code: 200, message: OK} + body: + string: '' + headers: + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - b5f09cc0-4e00-4ce4-826e-72295237ab45 + x-amz-request-id: + - b5f09cc0-4e00-4ce4-826e-72295237ab45 + x-amz-requestid: + - b5f09cc0-4e00-4ce4-826e-72295237ab45 + status: + code: 200 + message: OK - request: body: null headers: - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20190411T090839Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt + Content-Length: + - '0' + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: DELETE + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/test_file.txt response: - body: {string: !!python/unicode 'This is a simple file'} - headers: - accept-ranges: [bytes] - cache-control: ['max-age=31536000, public'] - content-length: ['21'] - content-type: [text/plain] - date: ['Thu, 11 Apr 2019 09:08:40 GMT'] - etag: ['"190aa3117b11aab3f2c5f4e5f7d9e402"'] - last-modified: ['Thu, 11 Apr 2019 09:08:39 GMT'] - server: [AmazonS3] - x-amz-id-2: [qE8FgLk+SZt+DY7sqGkYiU0UmZUFrdeYJ1dyEsJ9PJb1hE2ZEetAC2J+xnq0ge8a9R296+lCRsE=] - x-amz-request-id: [9A21FEADFDA20D2E] - status: {code: 200, message: OK} + body: + string: '' + headers: + Connection: + - keep-alive + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - bc2092e4-173a-465f-b87b-64a63fc18d17 + x-amz-request-id: + - bc2092e4-173a-465f-b87b-64a63fc18d17 + x-amz-requestid: + - bc2092e4-173a-465f-b87b-64a63fc18d17 + status: + code: 204 + message: No Content - request: body: null headers: - Content-Length: ['0'] - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20190411T090839Z] - method: !!python/unicode 'DELETE' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/test_file.txt + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend response: - body: {string: !!python/unicode ''} + body: + string: '' headers: - date: ['Thu, 11 Apr 2019 09:08:40 GMT'] - server: [AmazonS3] - x-amz-id-2: [Szc7bOq3HQg9M0w5wq6lkurvUJof0+BMuD5oNKOR/OOrEeznx+dKyzCr+xH/04hTdmhFlu/aMy0=] - x-amz-request-id: [B8D18326F8CF1D7B] - status: {code: 204, message: No Content} + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Sat, 02 Nov 2019 14:42:49 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 70d48c9e-b13b-4b16-abd2-4c853ca55855 + x-amz-request-id: + - 70d48c9e-b13b-4b16-abd2-4c853ca55855 + x-amz-requestid: + - 70d48c9e-b13b-4b16-abd2-4c853ca55855 + status: + code: 200 + message: OK - request: body: null headers: - User-Agent: [Boto3/1.7.40 Python/2.7.9 Linux/4.15.0-47-generic Botocore/1.10.40 - Resource] - X-Amz-Content-SHA256: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] - X-Amz-Date: [20190411T090840Z] - method: !!python/unicode 'GET' - uri: https://ak-testing-bucket.s3.eu-west-3.amazonaws.com/?prefix=&encoding-type=url + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ5Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix= response: - body: {string: !!python/unicode ' - - ak-testing-bucket1000urlfalsesites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f2ff7d9f002478ab05/files/slide-2.png2018-07-04T07:36:19.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c78f3ff7d9f002478ab08/files/slide-1.png2018-07-04T07:36:20.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe6/files/slide-2.png2018-07-04T07:38:18.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c7969ff7d9f002478abe9/files/slide-1.png2018-07-04T07:38:18.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac17/files/slide-2.png2018-07-04T07:39:21.000Z"45fa4485a0c50eb4b6e3b1cf7ebc2992"1085995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b2b82aa70027161e92/5b3c79a8ff7d9f002478ac1a/files/slide-1.png2018-07-04T07:39:21.000Z"20f01407d9bef37c532d264a09b6c619"739565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/rawpixel-com-268376-jumbotron.jpg2018-07-04T07:39:21.000Z"99c8da16055e2d2c259925047e354b4f"2219855710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0b/files/william-iven-5895-thumb.jpg2018-07-04T07:39:21.000Z"54c5877c668be615d66829af706af9f7"369725710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-jumbotron.jpg2018-07-04T07:39:21.000Z"0cff59cf33745eb0133683cefe1bcc0d"2293705710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f3ff7d9f002478ab0e/files/alphacolor-13-172877-thumb.jpg2018-07-04T07:39:22.000Z"ab4e5c8a80ee3ed56d948808e0284acd"409575710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-jumbotron.jpg2018-07-04T07:39:22.000Z"e81c06a564d313ae08050314eb669166"2210495710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab11/files/jeff-sheldon-3225-thumb.jpg2018-07-04T07:39:22.000Z"add79fc36b7f75393e935a94e36188bb"1118255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-jumbotron.jpg2018-07-04T07:39:22.000Z"720b38c5b73c0d5c989fc3471b1b5247"2390275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab14/files/rawpixel-com-211021-thumb-1.jpg2018-07-04T07:39:22.000Z"96588038b60a089ec9082d9f6bdf19ce"2251205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-jumbotron.jpg2018-07-04T07:39:23.000Z"857a7cf78efb4dcf31eb1d1d3210a426"3720905710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/content_entry5b3637b3b82aa70027161e97/5b3c78f4ff7d9f002478ab17/files/brooke-lark-175184-thubnail.jpg2018-07-04T07:39:23.000Z"dfe0c0ca1ab1e70a1e13ff37da762351"545135710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/FontAwesome.otf2018-06-29T13:44:25.000Z"0d2717cd5d853e5c765ca032dfd41a4d"1348085710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/Lato-Black.ttf2018-06-29T13:44:35.000Z"77d353744697c77955f9bacc7f3ed90a"1145885710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.eot2018-06-29T13:44:34.000Z"f4769f9bdb7466be65088239c12046d1"201275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.svg2018-06-29T13:44:33.000Z"89889688147bd7575d6327160d64e760"1087385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.ttf2018-06-29T13:44:33.000Z"e18bbf611f2a2e43afc071aa2f4e1512"454045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff2018-06-29T13:44:34.000Z"fa2772327f55d8198301fdb8bcfc8158"234245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/bootstrap/glyphicons-halflings-regular.woff22018-06-29T13:44:34.000Z"448c34a56d699c29117adc64c43affeb"180285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.eot2018-06-29T13:44:34.000Z"674f50d287a8c48dc19ba404d20fe713"1657425710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.svg2018-06-29T13:44:32.000Z"912ec66d7572ff821749319396470bde"4443795710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.ttf2018-06-29T13:44:35.000Z"b06871f281fee6b241d60582ae9369b9"1655485710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff2018-06-29T13:44:25.000Z"fee66e712a8a08eef5805a46892932ad"980245710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome-webfont.woff22018-06-29T13:44:30.000Z"af7ae505a9eed503f8b8e6982036873e"771605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.eot2018-06-29T13:44:29.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.svg2018-06-29T13:44:28.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.ttf2018-06-29T13:44:29.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff2018-06-29T13:44:27.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-brands-400.woff22018-06-29T13:44:30.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.eot2018-06-29T13:44:29.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.svg2018-06-29T13:44:27.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.ttf2018-06-29T13:44:26.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff2018-06-29T13:44:27.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-regular-400.woff22018-06-29T13:44:27.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.eot2018-06-29T13:44:30.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.svg2018-06-29T13:44:26.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.ttf2018-06-29T13:44:29.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff2018-06-29T13:44:26.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/fontawesome/fa-solid-900.woff22018-06-29T13:44:28.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/lato-regular.ttf2018-06-29T13:44:35.000Z"7f690e503a254e0b8349aec0177e07aa"1201965710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/fonts/sf-distant-galaxy.ttf2018-06-29T13:44:31.000Z"75c0119ca475dea587b8661501320be5"588605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-categories.jpg2018-06-29T13:44:36.000Z"4cd91e4b4d53a8be36a87c1901509025"1574815710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/banner-info.jpg2018-06-29T13:44:37.000Z"43bc85397f794a217ca6302f31132a83"2841775710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/cart-icon.png2018-06-29T13:44:36.000Z"27023441e91a1bfd49e853083c5be189"17195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/favicon.png2018-06-29T13:44:36.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/powered-by-shopinvader-logo.png2018-06-29T13:44:36.000Z"0b28631a788bc3bc5b4e8fbffc77a6fc"49955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/images/user-icon.png2018-06-29T13:44:37.000Z"9a4cbcac50e8a8dc8716602dc6939506"15195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/address_autocomplete.js2018-06-29T13:44:58.000Z"825f802393fe3cab46aca96f85e808e6"12145710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/application.js2018-06-29T13:44:56.000Z"7b27f5eedf5b6a8765911598d657af0b"36765710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap3.min.js2018-06-29T13:45:01.000Z"c9599ff427c45c06987d2a77504061d0"366415710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/bootstrap4.min.js2018-06-29T13:45:02.000Z"52fb01bb48c42d311b54a638fc3bbb66"511305710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.min.js2018-07-04T07:31:04.000Z"a04a0b2062dba95a1c195ba8ba81da33"964385710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.slidereveal.min.js2018-06-29T13:44:56.000Z"8b3f238f0edcb6b1bd2e0a1ca8dbadcf"26365710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/jquery.touchSwipe.min.js2018-06-29T13:44:54.000Z"2ca5cd81e4decec5d563ccc714c13f75"106665710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/popper.min.js2018-07-04T07:31:02.000Z"7fadcd304c51c2bf074dab5d173fad96"189005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search.js2018-06-29T13:44:55.000Z"496ab01d638a8d9be0eaec5d9357da99"69015710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/search_autocomplete.js2018-06-29T13:44:54.000Z"abce4f520d568e5e8a27c876cccf07a5"29265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/services-worker.js2018-06-29T13:44:55.000Z"c16e4b803908e63721393b2aed92cc1a"6275710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/javascripts/shopinvader.jquery.js2018-06-29T13:44:58.000Z"205cc517dbd11156b5e88ccd226acead"12735710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/application.css2018-07-04T07:39:34.000Z"aefd53a2b193daebbd450704ef07e76d"1750355710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap.css2018-06-29T13:44:42.000Z"921023af04e9bfbdfcd9e908ae41838a"16605710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-grid.css2018-06-29T13:44:53.000Z"3bf136721f307910a86b0c12c075b00a"189345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap-reboot.css2018-06-29T13:44:53.000Z"17e26b4ec047a23fae14084355c307f3"38945710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/bootstrap4/bootstrap.css2018-06-29T13:44:52.000Z"7dc28db4b228b26a897793e820f962c0"1226185710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/font-awesome.min.css2018-06-29T13:44:50.000Z"dab5d93045d08b50c34834f543ef2860"310005710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-brands.css2018-06-29T13:44:44.000Z"3b03a4e1b155ac50c811bc8fb5d92a56"7195710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-regular.css2018-06-29T13:44:42.000Z"cca47fb43f791546264ddcf85d46872c"7345710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fa-solid.css2018-06-29T13:44:42.000Z"fa42ec4d3ddd4f4dd6f794ecaa5efc9a"7265710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/fontawesome/fontawesome.css2018-06-29T13:44:44.000Z"5664ed3aceb3f01878afb4ccb720708e"351255710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.eot2018-06-29T13:44:40.000Z"ae37590ab05e9c625bcabf1759ab9dc2"986205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.svg2018-06-29T13:44:39.000Z"fb0cbe85f42e49383ac4764fd3211e66"5074785710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.ttf2018-06-29T13:44:41.000Z"c09b5960237e462582aa7b66411e57d5"983845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff2018-06-29T13:44:39.000Z"b5f5ef6112d693b968ad9d1646eea529"637125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-brands-400.woff22018-06-29T13:44:41.000Z"c971847be1cd6c17abca74025b4f36ae"544205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.eot2018-06-29T13:44:40.000Z"d7de79cae74b02f2d377786656f1d816"311565710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.svg2018-06-29T13:44:39.000Z"c15c758e798dd295b471b69ac409ef02"1071995710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.ttf2018-06-29T13:44:37.000Z"6bad016cd4efb36aa82618f55f0f660d"309285710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff2018-06-29T13:44:39.000Z"562010a46ef5216ac76a08c2ceb99985"147125710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-regular-400.woff22018-06-29T13:44:38.000Z"032ba2e0f134a35ed87df1564936d352"122205710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.eot2018-06-29T13:44:41.000Z"10c304f14cd2f6b6bed2ae7f574f03af"1021525710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.svg2018-06-29T13:44:38.000Z"9948e588ad4ca0db716da1c4d57f900e"3782155710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.ttf2018-06-29T13:44:41.000Z"3f07fd745b951055c656cf27db9a31d5"1019325710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff2018-06-29T13:44:38.000Z"c9a328cc89d13b8959e710d82b4b40d1"487045710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDsites/5b363695b82aa70027161e8d/theme/stylesheets/webfonts/fa-solid-900.woff22018-06-29T13:44:40.000Z"f9b85c9463af7103b9b24bbbf09a06ed"387845710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARDuploaded_assets/5b363695b82aa70027161e8d/icon.png2018-06-29T13:44:19.000Z"8430a7e6b73eaafb75d72bcd43351789"42955710f4d93f4553b9993fadcaf0462bc22323402d134a01ad84baeb725fc66d29STANDARD'} - headers: - content-type: [application/xml] - date: ['Thu, 11 Apr 2019 09:08:41 GMT'] - server: [AmazonS3] - transfer-encoding: [chunked] - x-amz-bucket-region: [eu-west-3] - x-amz-id-2: [rDdDbwcQdLMtI5SijE9Yv4N7JA5wool+ihXzgISObkTVeN/cE4UsuIQAQ5/KboDW+LaXuFoW/0c=] - x-amz-request-id: [F2A5DC6B017F793D] - status: {code: 200, message: OK} + body: + string: test-storage-backend1000urlfalse + headers: + Connection: + - keep-alive + Content-Length: + - '283' + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:49 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - f6a89089-3bda-45da-ad7b-9645679252c2 + x-amz-request-id: + - f6a89089-3bda-45da-ad7b-9645679252c2 + x-amzn-requestid: + - f6a89089-3bda-45da-ad7b-9645679252c2 + status: + code: 200 + message: OK version: 1 diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index fec00d26df..0d1a568786 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -30,11 +30,24 @@ def setUp(self): self.backend.write( { "backend_type": "amazon_s3", - "aws_bucket": os.environ.get("AWS_BUCKET", "ak-testing-bucket"), - "aws_region": os.environ.get("AWS_REGION", "eu-west-3"), - "aws_access_key_id": os.environ.get("AWS_ACCESS_KEY_ID", "FAKEID"), + "aws_bucket": os.environ.get( + "AWS_BUCKET", "test-storage-backend" + ), + "aws_access_key_id": os.environ.get("AWS_ACCESS_KEY_ID", ""), "aws_secret_access_key": os.environ.get( - "AWS_SECRET_ACCESS_KEY", "FAKESECRET" + "AWS_SECRET_ACCESS_KEY", "" + ), + "aws_host": os.environ.get( + "AWS_HOST", "https://sos-ch-dk-2.exo.io" ), } ) + + def test_params(self): + adapter = self.backend._get_adapter() + self.backend.aws_host = "" + params = adapter._aws_bucket_params() + self.assertNotIn("endpoint_url", params) + self.backend.aws_host = "another.s3.endpoint.com" + params = adapter._aws_bucket_params() + self.assertEqual(params["endpoint_url"], "another.s3.endpoint.com") diff --git a/storage_backend_s3/views/backend_storage_view.xml b/storage_backend_s3/views/backend_storage_view.xml index 0f98cdcdd0..cf10efbeb5 100644 --- a/storage_backend_s3/views/backend_storage_view.xml +++ b/storage_backend_s3/views/backend_storage_view.xml @@ -6,9 +6,10 @@ + - + From c7d668dbd5786813d7e5ac641554e9544ef498c0 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 4 Nov 2019 15:12:52 +0000 Subject: [PATCH 15/49] [UPD] Update storage_backend_s3.pot --- .../i18n/storage_backend_s3.pot | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 storage_backend_s3/i18n/storage_backend_s3.pot diff --git a/storage_backend_s3/i18n/storage_backend_s3.pot b/storage_backend_s3/i18n/storage_backend_s3.pot new file mode 100644 index 0000000000..e9eff904ff --- /dev/null +++ b/storage_backend_s3/i18n/storage_backend_s3.pot @@ -0,0 +1,82 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * storage_backend_s3 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_access_key_id +msgid "Access Key ID" +msgstr "" + +#. module: storage_backend_s3 +#: model_terms:ir.ui.view,arch_db:storage_backend_s3.storage_backend_view_form +#: selection:storage.backend,backend_type:0 +msgid "Amazon S3" +msgstr "" + +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_cache_control +msgid "Aws Cache Control" +msgstr "" + +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__backend_type +msgid "Backend Type" +msgstr "" + +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_bucket +msgid "Bucket" +msgstr "" + +#. module: storage_backend_s3 +#: selection:storage.backend,backend_type:0 +msgid "Filesystem" +msgstr "" + +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_host +msgid "Host" +msgstr "" + +#. module: storage_backend_s3 +#: model:ir.model.fields,help:storage_backend_s3.field_storage_backend__aws_host +msgid "If you are using a different host than standard AWS ones, eg: Exoscale" +msgstr "" + +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_region +msgid "Region" +msgstr "" + +#. module: storage_backend_s3 +#: selection:storage.backend,backend_type:0 +msgid "SFTP" +msgstr "" + +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_secret_access_key +msgid "Secret Access Key" +msgstr "" + +#. module: storage_backend_s3 +#: code:addons/storage_backend_s3/components/s3_adapter.py:92 +#, python-format +msgid "The file could not be stored: %s" +msgstr "" + +#. module: storage_backend_s3 +#: model:ir.model,name:storage_backend_s3.model_storage_backend +msgid "storage.backend" +msgstr "" + From 29634e7d8c5a1bf33b2479142c3ef2304d0032fe Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 4 Nov 2019 15:20:35 +0000 Subject: [PATCH 16/49] [ADD] icon.png --- storage_backend_s3/static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 storage_backend_s3/static/description/icon.png diff --git a/storage_backend_s3/static/description/icon.png b/storage_backend_s3/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From 3ca3e7128724b7002f3d54c17d94e6de555fde75 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Fri, 22 Nov 2019 10:36:46 +0100 Subject: [PATCH 17/49] S3: add file ACL control --- storage_backend_s3/components/s3_adapter.py | 2 ++ storage_backend_s3/models/storage_backend.py | 10 ++++++++++ storage_backend_s3/views/backend_storage_view.xml | 1 + 3 files changed, 13 insertions(+) diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 8ab3da4a4a..6eec929708 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -98,6 +98,8 @@ def _aws_upload_fileobj_params(self, mimetype=None, **kw): extra_args["ContentType"] = mimetype if self.collection.aws_cache_control: extra_args["CacheControl"] = self.collection.aws_cache_control + if self.collection.aws_file_acl: + extra_args["ACL"] = self.collection.aws_file_acl if extra_args: return {"ExtraArgs": extra_args} return {} diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 5004e8c514..ff9746a1a7 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -30,6 +30,16 @@ class StorageBackend(models.Model): selection='_selection_aws_region', string="Region" ) aws_cache_control = fields.Char(default="max-age=31536000, public") + aws_file_acl = fields.Selection(selection=[ + ('', ''), + ('private', 'private'), + ('public-read', 'public-read'), + ('public-read-write', 'public-read-write'), + ('aws-exec-read', 'aws-exec-read'), + ('authenticated-read', 'authenticated-read'), + ('bucket-owner-read', 'bucket-owner-read'), + ('bucket-owner-full-control', 'bucket-owner-full-control'), + ]) def _selection_aws_region(self): session = boto3.session.Session() diff --git a/storage_backend_s3/views/backend_storage_view.xml b/storage_backend_s3/views/backend_storage_view.xml index cf10efbeb5..386fceaaf7 100644 --- a/storage_backend_s3/views/backend_storage_view.xml +++ b/storage_backend_s3/views/backend_storage_view.xml @@ -12,6 +12,7 @@ + From 2e5f90151f34fcb8f2b2d82d80679d6bc4ccf9ad Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Fri, 22 Nov 2019 16:05:45 +0100 Subject: [PATCH 18/49] Fix runbot warning on clashing labels --- storage_backend_s3/models/storage_backend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index ff9746a1a7..83262aa31c 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -19,7 +19,7 @@ class StorageBackend(models.Model): backend_type = fields.Selection(selection_add=[("amazon_s3", "Amazon S3")]) aws_host = fields.Char( - string="Host", + string="AWS Host", help="If you are using a different host than standard AWS ones, " "eg: Exoscale", ) From 0624629ecd20305791de8f0d03707f81b96457e6 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Fri, 22 Nov 2019 18:31:41 +0100 Subject: [PATCH 19/49] Add server_env support --- storage_backend_s3/components/s3_adapter.py | 2 ++ storage_backend_s3/models/storage_backend.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 6eec929708..3cf85b754a 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -1,5 +1,7 @@ # Copyright 2017 Akretion (http://www.akretion.com). # @author Sébastien BEAU +# Copyright 2019 Camptocamp SA (http://www.camptocamp.com). +# @author Simone Orsi # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import io diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 83262aa31c..01fa7d0d47 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -1,5 +1,7 @@ # Copyright 2017 Akretion (http://www.akretion.com). # @author Sébastien BEAU +# Copyright 2019 Camptocamp SA (http://www.camptocamp.com). +# @author Simone Orsi # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging @@ -41,6 +43,20 @@ class StorageBackend(models.Model): ('bucket-owner-full-control', 'bucket-owner-full-control'), ]) + @property + def _server_env_fields(self): + env_fields = super()._server_env_fields + env_fields.update({ + "aws_host": {}, + "aws_bucket": {}, + "aws_access_key_id": {}, + "aws_secret_access_key": {}, + "aws_region": {}, + "aws_cache_control": {}, + "aws_file_acl": {}, + }) + return env_fields + def _selection_aws_region(self): session = boto3.session.Session() return [ From c22db6cdb04e9c44c5ba0920936d0dfd807ee935 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 25 Nov 2019 09:49:38 +0000 Subject: [PATCH 20/49] [UPD] Update storage_backend_s3.pot --- .../i18n/storage_backend_s3.pot | 52 ++++++++++++++++--- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/storage_backend_s3/i18n/storage_backend_s3.pot b/storage_backend_s3/i18n/storage_backend_s3.pot index e9eff904ff..4a356edca2 100644 --- a/storage_backend_s3/i18n/storage_backend_s3.pot +++ b/storage_backend_s3/i18n/storage_backend_s3.pot @@ -13,6 +13,11 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_host +msgid "AWS Host" +msgstr "" + #. module: storage_backend_s3 #: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_access_key_id msgid "Access Key ID" @@ -29,6 +34,11 @@ msgstr "" msgid "Aws Cache Control" msgstr "" +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_file_acl +msgid "Aws File Acl" +msgstr "" + #. module: storage_backend_s3 #: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__backend_type msgid "Backend Type" @@ -44,11 +54,6 @@ msgstr "" msgid "Filesystem" msgstr "" -#. module: storage_backend_s3 -#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_host -msgid "Host" -msgstr "" - #. module: storage_backend_s3 #: model:ir.model.fields,help:storage_backend_s3.field_storage_backend__aws_host msgid "If you are using a different host than standard AWS ones, eg: Exoscale" @@ -70,11 +75,46 @@ msgid "Secret Access Key" msgstr "" #. module: storage_backend_s3 -#: code:addons/storage_backend_s3/components/s3_adapter.py:92 +#: code:addons/storage_backend_s3/components/s3_adapter.py:94 #, python-format msgid "The file could not be stored: %s" msgstr "" +#. module: storage_backend_s3 +#: selection:storage.backend,aws_file_acl:0 +msgid "authenticated-read" +msgstr "" + +#. module: storage_backend_s3 +#: selection:storage.backend,aws_file_acl:0 +msgid "aws-exec-read" +msgstr "" + +#. module: storage_backend_s3 +#: selection:storage.backend,aws_file_acl:0 +msgid "bucket-owner-full-control" +msgstr "" + +#. module: storage_backend_s3 +#: selection:storage.backend,aws_file_acl:0 +msgid "bucket-owner-read" +msgstr "" + +#. module: storage_backend_s3 +#: selection:storage.backend,aws_file_acl:0 +msgid "private" +msgstr "" + +#. module: storage_backend_s3 +#: selection:storage.backend,aws_file_acl:0 +msgid "public-read" +msgstr "" + +#. module: storage_backend_s3 +#: selection:storage.backend,aws_file_acl:0 +msgid "public-read-write" +msgstr "" + #. module: storage_backend_s3 #: model:ir.model,name:storage_backend_s3.model_storage_backend msgid "storage.backend" From ba9f1bdc42d82b744c6d84c672d07f6be9d31cf1 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 25 Nov 2019 09:57:01 +0000 Subject: [PATCH 21/49] storage_backend_s3 12.0.2.0.0 --- storage_backend_s3/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index ad7cda38f6..c295a7d99d 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", - "version": "12.0.1.0.0", + "version": "12.0.2.0.0", "category": "Storage", "website": "https://www.github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", From 348ff3d8b6171a54155046d510e5a942edff8771 Mon Sep 17 00:00:00 2001 From: Jasmin Solanki Date: Thu, 21 Jul 2022 10:40:26 +0530 Subject: [PATCH 22/49] [IMP] storage_backend_s3: black, isort, prettier --- storage_backend_s3/__manifest__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index c295a7d99d..b109b24ed4 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,7 +5,11 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", +<<<<<<< HEAD "version": "12.0.2.0.0", +======= + "version": "13.0.1.0.0", +>>>>>>> [MIG] storage_backend: Migration to 13.0 "category": "Storage", "website": "https://www.github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", From f502397d1063e2163109e703a2ae916e61baefa4 Mon Sep 17 00:00:00 2001 From: Laurent-Corron Date: Tue, 22 Oct 2019 09:28:24 +0200 Subject: [PATCH 23/49] [MIG] storage_backend: Migration to 13.0 --- storage_backend_s3/__manifest__.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index b109b24ed4..ad2c672c31 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,11 +5,7 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", -<<<<<<< HEAD - "version": "12.0.2.0.0", -======= "version": "13.0.1.0.0", ->>>>>>> [MIG] storage_backend: Migration to 13.0 "category": "Storage", "website": "https://www.github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", From 812a87b9dfd2b2f78671bf926ec24bdb0e979cab Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Mon, 11 Nov 2019 13:35:43 -0300 Subject: [PATCH 24/49] [NEW] Make s3 compatible with services that need region_name eg: scaleway --- storage_backend_s3/components/s3_adapter.py | 10 +++++-- storage_backend_s3/models/storage_backend.py | 29 +++---------------- .../views/backend_storage_view.xml | 21 +++++++++----- 3 files changed, 25 insertions(+), 35 deletions(-) diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 3cf85b754a..6dc5bee817 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -26,15 +26,19 @@ class S3StorageAdapter(Component): _usage = "amazon_s3" def _aws_bucket_params(self): + params = { "aws_access_key_id": self.collection.aws_access_key_id, "aws_secret_access_key": self.collection.aws_secret_access_key, - "region_name": self.collection.aws_region, } if self.collection.aws_host: params["endpoint_url"] = self.collection.aws_host - # region must be excluded, otherwise endpoint is ignored - params.pop("region_name", None) + + if not self.collection.aws_region == 'other': + params['region_name'] = self.collection.aws_region + elif self.collection.aws_region == 'other' and \ + self.collection.aws_other_region: + params['region_name'] = self.collection.aws_other_region return params def _get_bucket(self): diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 01fa7d0d47..2330f0c2e9 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -32,34 +32,13 @@ class StorageBackend(models.Model): selection='_selection_aws_region', string="Region" ) aws_cache_control = fields.Char(default="max-age=31536000, public") - aws_file_acl = fields.Selection(selection=[ - ('', ''), - ('private', 'private'), - ('public-read', 'public-read'), - ('public-read-write', 'public-read-write'), - ('aws-exec-read', 'aws-exec-read'), - ('authenticated-read', 'authenticated-read'), - ('bucket-owner-read', 'bucket-owner-read'), - ('bucket-owner-full-control', 'bucket-owner-full-control'), - ]) - - @property - def _server_env_fields(self): - env_fields = super()._server_env_fields - env_fields.update({ - "aws_host": {}, - "aws_bucket": {}, - "aws_access_key_id": {}, - "aws_secret_access_key": {}, - "aws_region": {}, - "aws_cache_control": {}, - "aws_file_acl": {}, - }) - return env_fields + aws_other_region = fields.Char( + string="Other region" + ) def _selection_aws_region(self): session = boto3.session.Session() return [ (region, region.replace("-", " ").capitalize()) for region in session.get_available_regions("s3") - ] + ] + [('other', 'Empty or Other (Manually specify below)')] diff --git a/storage_backend_s3/views/backend_storage_view.xml b/storage_backend_s3/views/backend_storage_view.xml index 386fceaaf7..ee5e2a1e41 100644 --- a/storage_backend_s3/views/backend_storage_view.xml +++ b/storage_backend_s3/views/backend_storage_view.xml @@ -6,13 +6,20 @@ - - - - - - - + + + + + + + + + + + From c91dfd486ab00050ba6d521c1f4c9a2a7f7e4e53 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Tue, 12 Nov 2019 14:07:31 -0300 Subject: [PATCH 25/49] [NEW] Test fake s3 --- storage_backend_s3/tests/__init__.py | 1 + storage_backend_s3/tests/test_fake_s3.py | 44 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 storage_backend_s3/tests/test_fake_s3.py diff --git a/storage_backend_s3/tests/__init__.py b/storage_backend_s3/tests/__init__.py index 1282cd2ce0..3eddde333a 100644 --- a/storage_backend_s3/tests/__init__.py +++ b/storage_backend_s3/tests/__init__.py @@ -1 +1,2 @@ from . import test_amazon_s3 +from . import test_fake_s3 diff --git a/storage_backend_s3/tests/test_fake_s3.py b/storage_backend_s3/tests/test_fake_s3.py new file mode 100644 index 0000000000..e74cb352dc --- /dev/null +++ b/storage_backend_s3/tests/test_fake_s3.py @@ -0,0 +1,44 @@ +# Copyright 2019 KMEE (http://www.akretion.com). +# @author Luis Felipe Mileo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import logging +import os +from odoo.addons.storage_backend.tests.common import Common + +_logger = logging.getLogger(__name__) + + +class FakeS3Case(Common): + + def setUp(self): + super(FakeS3Case, self).setUp() + self.backend.write( + { + "backend_type": "amazon_s3", + "aws_bucket": os.environ.get( + "AWS_BUCKET", "test-storage-backend" + ), + "aws_access_key_id": os.environ.get("AWS_ACCESS_KEY_ID", ""), + "aws_secret_access_key": os.environ.get( + "AWS_SECRET_ACCESS_KEY", "" + ), + "aws_host": os.environ.get( + "AWS_HOST", "http://s3.fr-par.scw.cloud" + ), + "aws_region": "other", + } + ) + + def test_aws_other_region_filled(self): + self.backend.aws_other_region = "fr-par" + adapter = self.backend._get_adapter() + params = adapter._aws_bucket_params() + self.assertIn("region_name", params) + self.assertEqual(params["region_name"], "fr-par") + + def test_aws_other_region_empty(self): + self.backend.aws_other_region = "" + adapter = self.backend._get_adapter() + params = adapter._aws_bucket_params() + self.assertNotIn("region_name", params) From 0a78a29e5864c5b46fb7123cd6580effc7b9d268 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Thu, 16 Jan 2020 10:57:48 +0100 Subject: [PATCH 26/49] storage_backend_s3: fix other region name handling --- storage_backend_s3/components/s3_adapter.py | 11 +++-- storage_backend_s3/models/storage_backend.py | 2 +- storage_backend_s3/tests/__init__.py | 1 - storage_backend_s3/tests/test_amazon_s3.py | 17 ++++++++ storage_backend_s3/tests/test_fake_s3.py | 44 -------------------- 5 files changed, 23 insertions(+), 52 deletions(-) delete mode 100644 storage_backend_s3/tests/test_fake_s3.py diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 6dc5bee817..ffd1cc4437 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -26,7 +26,6 @@ class S3StorageAdapter(Component): _usage = "amazon_s3" def _aws_bucket_params(self): - params = { "aws_access_key_id": self.collection.aws_access_key_id, "aws_secret_access_key": self.collection.aws_secret_access_key, @@ -34,11 +33,11 @@ def _aws_bucket_params(self): if self.collection.aws_host: params["endpoint_url"] = self.collection.aws_host - if not self.collection.aws_region == 'other': - params['region_name'] = self.collection.aws_region - elif self.collection.aws_region == 'other' and \ - self.collection.aws_other_region: - params['region_name'] = self.collection.aws_other_region + if self.collection.aws_region: + if self.collection.aws_region != 'other': + params['region_name'] = self.collection.aws_region + elif self.collection.aws_other_region: + params['region_name'] = self.collection.aws_other_region return params def _get_bucket(self): diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 2330f0c2e9..6a46443219 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -38,7 +38,7 @@ class StorageBackend(models.Model): def _selection_aws_region(self): session = boto3.session.Session() - return [ + return [('', 'None')] + [ (region, region.replace("-", " ").capitalize()) for region in session.get_available_regions("s3") ] + [('other', 'Empty or Other (Manually specify below)')] diff --git a/storage_backend_s3/tests/__init__.py b/storage_backend_s3/tests/__init__.py index 3eddde333a..1282cd2ce0 100644 --- a/storage_backend_s3/tests/__init__.py +++ b/storage_backend_s3/tests/__init__.py @@ -1,2 +1 @@ from . import test_amazon_s3 -from . import test_fake_s3 diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index 0d1a568786..1d7675a978 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -51,3 +51,20 @@ def test_params(self): self.backend.aws_host = "another.s3.endpoint.com" params = adapter._aws_bucket_params() self.assertEqual(params["endpoint_url"], "another.s3.endpoint.com") + + def test_aws_other_region_filled(self): + adapter = self.backend._get_adapter() + self.assertFalse(self.backend.aws_region) + self.backend.aws_other_region = "fr-par" + params = adapter._aws_bucket_params() + # no region as "aws_region" is empty + self.assertNotIn("region_name", params) + self.backend.aws_region = "other" + params = adapter._aws_bucket_params() + self.assertEqual(params["region_name"], "fr-par") + + def test_aws_other_region_empty(self): + self.backend.aws_other_region = "" + adapter = self.backend._get_adapter() + params = adapter._aws_bucket_params() + self.assertNotIn("region_name", params) diff --git a/storage_backend_s3/tests/test_fake_s3.py b/storage_backend_s3/tests/test_fake_s3.py deleted file mode 100644 index e74cb352dc..0000000000 --- a/storage_backend_s3/tests/test_fake_s3.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright 2019 KMEE (http://www.akretion.com). -# @author Luis Felipe Mileo -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -import logging -import os -from odoo.addons.storage_backend.tests.common import Common - -_logger = logging.getLogger(__name__) - - -class FakeS3Case(Common): - - def setUp(self): - super(FakeS3Case, self).setUp() - self.backend.write( - { - "backend_type": "amazon_s3", - "aws_bucket": os.environ.get( - "AWS_BUCKET", "test-storage-backend" - ), - "aws_access_key_id": os.environ.get("AWS_ACCESS_KEY_ID", ""), - "aws_secret_access_key": os.environ.get( - "AWS_SECRET_ACCESS_KEY", "" - ), - "aws_host": os.environ.get( - "AWS_HOST", "http://s3.fr-par.scw.cloud" - ), - "aws_region": "other", - } - ) - - def test_aws_other_region_filled(self): - self.backend.aws_other_region = "fr-par" - adapter = self.backend._get_adapter() - params = adapter._aws_bucket_params() - self.assertIn("region_name", params) - self.assertEqual(params["region_name"], "fr-par") - - def test_aws_other_region_empty(self): - self.backend.aws_other_region = "" - adapter = self.backend._get_adapter() - params = adapter._aws_bucket_params() - self.assertNotIn("region_name", params) From 1b7536e3c1d77ad43624d97d8155ac526d97243b Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Thu, 16 Jan 2020 11:17:17 +0100 Subject: [PATCH 27/49] S3 aws_other_region: support env override --- storage_backend_s3/models/storage_backend.py | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 6a46443219..185460a968 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -35,6 +35,31 @@ class StorageBackend(models.Model): aws_other_region = fields.Char( string="Other region" ) + aws_file_acl = fields.Selection(selection=[ + ('', ''), + ('private', 'private'), + ('public-read', 'public-read'), + ('public-read-write', 'public-read-write'), + ('aws-exec-read', 'aws-exec-read'), + ('authenticated-read', 'authenticated-read'), + ('bucket-owner-read', 'bucket-owner-read'), + ('bucket-owner-full-control', 'bucket-owner-full-control'), + ]) + + @property + def _server_env_fields(self): + env_fields = super()._server_env_fields + env_fields.update({ + "aws_host": {}, + "aws_bucket": {}, + "aws_access_key_id": {}, + "aws_secret_access_key": {}, + "aws_region": {}, + "aws_other_region": {}, + "aws_cache_control": {}, + "aws_file_acl": {}, + }) + return env_fields def _selection_aws_region(self): session = boto3.session.Session() From 4fa65993da7022b514f4c718643f893813a6261d Mon Sep 17 00:00:00 2001 From: oca-travis Date: Thu, 16 Jan 2020 13:06:48 +0000 Subject: [PATCH 28/49] [UPD] Update storage_backend_s3.pot --- .../i18n/storage_backend_s3.pot | 46 ++++++++----------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/storage_backend_s3/i18n/storage_backend_s3.pot b/storage_backend_s3/i18n/storage_backend_s3.pot index 4a356edca2..57030fcdd8 100644 --- a/storage_backend_s3/i18n/storage_backend_s3.pot +++ b/storage_backend_s3/i18n/storage_backend_s3.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * storage_backend_s3 +# * storage_backend_s3 # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,8 +24,8 @@ msgid "Access Key ID" msgstr "" #. module: storage_backend_s3 +#: model:ir.model.fields.selection,name:storage_backend_s3.selection__storage_backend__backend_type__amazon_s3 #: model_terms:ir.ui.view,arch_db:storage_backend_s3.storage_backend_view_form -#: selection:storage.backend,backend_type:0 msgid "Amazon S3" msgstr "" @@ -50,13 +50,13 @@ msgid "Bucket" msgstr "" #. module: storage_backend_s3 -#: selection:storage.backend,backend_type:0 -msgid "Filesystem" +#: model:ir.model.fields,help:storage_backend_s3.field_storage_backend__aws_host +msgid "If you are using a different host than standard AWS ones, eg: Exoscale" msgstr "" #. module: storage_backend_s3 -#: model:ir.model.fields,help:storage_backend_s3.field_storage_backend__aws_host -msgid "If you are using a different host than standard AWS ones, eg: Exoscale" +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_other_region +msgid "Other region" msgstr "" #. module: storage_backend_s3 @@ -65,58 +65,52 @@ msgid "Region" msgstr "" #. module: storage_backend_s3 -#: selection:storage.backend,backend_type:0 -msgid "SFTP" +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_secret_access_key +msgid "Secret Access Key" msgstr "" #. module: storage_backend_s3 -#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_secret_access_key -msgid "Secret Access Key" +#: model:ir.model,name:storage_backend_s3.model_storage_backend +msgid "Storage Backend" msgstr "" #. module: storage_backend_s3 -#: code:addons/storage_backend_s3/components/s3_adapter.py:94 +#: code:addons/storage_backend_s3/components/s3_adapter.py:0 #, python-format msgid "The file could not be stored: %s" msgstr "" #. module: storage_backend_s3 -#: selection:storage.backend,aws_file_acl:0 +#: model:ir.model.fields.selection,name:storage_backend_s3.selection__storage_backend__aws_file_acl__authenticated-read msgid "authenticated-read" msgstr "" #. module: storage_backend_s3 -#: selection:storage.backend,aws_file_acl:0 +#: model:ir.model.fields.selection,name:storage_backend_s3.selection__storage_backend__aws_file_acl__aws-exec-read msgid "aws-exec-read" msgstr "" #. module: storage_backend_s3 -#: selection:storage.backend,aws_file_acl:0 +#: model:ir.model.fields.selection,name:storage_backend_s3.selection__storage_backend__aws_file_acl__bucket-owner-full-control msgid "bucket-owner-full-control" msgstr "" #. module: storage_backend_s3 -#: selection:storage.backend,aws_file_acl:0 +#: model:ir.model.fields.selection,name:storage_backend_s3.selection__storage_backend__aws_file_acl__bucket-owner-read msgid "bucket-owner-read" msgstr "" #. module: storage_backend_s3 -#: selection:storage.backend,aws_file_acl:0 +#: model:ir.model.fields.selection,name:storage_backend_s3.selection__storage_backend__aws_file_acl__private msgid "private" msgstr "" #. module: storage_backend_s3 -#: selection:storage.backend,aws_file_acl:0 +#: model:ir.model.fields.selection,name:storage_backend_s3.selection__storage_backend__aws_file_acl__public-read msgid "public-read" msgstr "" #. module: storage_backend_s3 -#: selection:storage.backend,aws_file_acl:0 +#: model:ir.model.fields.selection,name:storage_backend_s3.selection__storage_backend__aws_file_acl__public-read-write msgid "public-read-write" msgstr "" - -#. module: storage_backend_s3 -#: model:ir.model,name:storage_backend_s3.model_storage_backend -msgid "storage.backend" -msgstr "" - From f86cc5f5c1f81c1f9a6835e6ce3b8c278f99365e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sat, 14 Mar 2020 12:30:06 +0100 Subject: [PATCH 29/49] pre-commit update --- storage_backend_s3/components/s3_adapter.py | 19 +- storage_backend_s3/models/storage_backend.py | 62 +- ...est_setting_and_getting_data_from_dir.yaml | 1010 +++++++++-------- ...st_setting_and_getting_data_from_root.yaml | 1010 +++++++++-------- storage_backend_s3/tests/test_amazon_s3.py | 12 +- .../views/backend_storage_view.xml | 64 +- 6 files changed, 1100 insertions(+), 1077 deletions(-) diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index ffd1cc4437..8fbe95f171 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -8,6 +8,7 @@ import logging from odoo import _, exceptions + from odoo.addons.component.core import Component _logger = logging.getLogger(__name__) @@ -34,10 +35,10 @@ def _aws_bucket_params(self): params["endpoint_url"] = self.collection.aws_host if self.collection.aws_region: - if self.collection.aws_region != 'other': - params['region_name'] = self.collection.aws_region + if self.collection.aws_region != "other": + params["region_name"] = self.collection.aws_region elif self.collection.aws_other_region: - params['region_name'] = self.collection.aws_other_region + params["region_name"] = self.collection.aws_other_region return params def _get_bucket(self): @@ -65,9 +66,7 @@ def _get_bucket(self): else: bucket = s3.create_bucket( Bucket=bucket_name, - CreateBucketConfiguration={ - "LocationConstraint": region_name - }, + CreateBucketConfiguration={"LocationConstraint": region_name}, ) return bucket @@ -80,9 +79,7 @@ def _get_object(self, relative_path=None): def add(self, relative_path, bin_data, mimetype=None, **kwargs): s3object = self._get_object(relative_path) - file_params = self._aws_upload_fileobj_params( - mimetype=mimetype, **kwargs - ) + file_params = self._aws_upload_fileobj_params(mimetype=mimetype, **kwargs) with io.BytesIO() as fileobj: fileobj.write(bin_data) fileobj.seek(0) @@ -90,9 +87,7 @@ def add(self, relative_path, bin_data, mimetype=None, **kwargs): s3object.upload_fileobj(fileobj, **file_params) except ClientError as error: # log verbose error from s3, return short message for user - _logger.exception( - "Error during storage of the file %s" % relative_path - ) + _logger.exception("Error during storage of the file %s" % relative_path) raise exceptions.UserError( _("The file could not be stored: %s") % str(error) ) diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 185460a968..4969de614d 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -28,42 +28,46 @@ class StorageBackend(models.Model): aws_bucket = fields.Char(string="Bucket") aws_access_key_id = fields.Char(string="Access Key ID") aws_secret_access_key = fields.Char(string="Secret Access Key") - aws_region = fields.Selection( - selection='_selection_aws_region', string="Region" - ) + aws_region = fields.Selection(selection="_selection_aws_region", string="Region") aws_cache_control = fields.Char(default="max-age=31536000, public") - aws_other_region = fields.Char( - string="Other region" + aws_other_region = fields.Char(string="Other region") + aws_file_acl = fields.Selection( + selection=[ + ("", ""), + ("private", "private"), + ("public-read", "public-read"), + ("public-read-write", "public-read-write"), + ("aws-exec-read", "aws-exec-read"), + ("authenticated-read", "authenticated-read"), + ("bucket-owner-read", "bucket-owner-read"), + ("bucket-owner-full-control", "bucket-owner-full-control"), + ] ) - aws_file_acl = fields.Selection(selection=[ - ('', ''), - ('private', 'private'), - ('public-read', 'public-read'), - ('public-read-write', 'public-read-write'), - ('aws-exec-read', 'aws-exec-read'), - ('authenticated-read', 'authenticated-read'), - ('bucket-owner-read', 'bucket-owner-read'), - ('bucket-owner-full-control', 'bucket-owner-full-control'), - ]) @property def _server_env_fields(self): env_fields = super()._server_env_fields - env_fields.update({ - "aws_host": {}, - "aws_bucket": {}, - "aws_access_key_id": {}, - "aws_secret_access_key": {}, - "aws_region": {}, - "aws_other_region": {}, - "aws_cache_control": {}, - "aws_file_acl": {}, - }) + env_fields.update( + { + "aws_host": {}, + "aws_bucket": {}, + "aws_access_key_id": {}, + "aws_secret_access_key": {}, + "aws_region": {}, + "aws_other_region": {}, + "aws_cache_control": {}, + "aws_file_acl": {}, + } + ) return env_fields def _selection_aws_region(self): session = boto3.session.Session() - return [('', 'None')] + [ - (region, region.replace("-", " ").capitalize()) - for region in session.get_available_regions("s3") - ] + [('other', 'Empty or Other (Manually specify below)')] + return ( + [("", "None")] + + [ + (region, region.replace("-", " ").capitalize()) + for region in session.get_available_regions("s3") + ] + + [("other", "Empty or Other (Manually specify below)")] + ) diff --git a/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml index 8b8a75ae9c..310c838b1d 100644 --- a/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml +++ b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_dir.yaml @@ -1,504 +1,510 @@ interactions: -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ1Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:45 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - a85cafab-77af-4f67-8e06-37a3ab1b637b - x-amz-request-id: - - a85cafab-77af-4f67-8e06-37a3ab1b637b - x-amz-requestid: - - a85cafab-77af-4f67-8e06-37a3ab1b637b - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ1Wg== - method: GET - uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix=subdirectory%2Fhere - response: - body: - string: test-storage-backendsubdirectory/here1000urlfalse - headers: - Connection: - - keep-alive - Content-Length: - - '300' - Content-Type: - - application/xml - Date: - - Sat, 02 Nov 2019 14:42:45 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 97757b05-7d88-480f-be75-98786a9492e8 - x-amz-request-id: - - 97757b05-7d88-480f-be75-98786a9492e8 - x-amzn-requestid: - - 97757b05-7d88-480f-be75-98786a9492e8 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ1Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:45 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 69932919-580b-4d66-bf3d-1916710b4543 - x-amz-request-id: - - 69932919-580b-4d66-bf3d-1916710b4543 - x-amz-requestid: - - 69932919-580b-4d66-bf3d-1916710b4543 - status: - code: 200 - message: OK -- request: - body: !!python/object/new:_io.BytesIO - state: !!python/tuple - - !!binary | - VGhpcyBpcyBhIHNpbXBsZSBmaWxl - - 0 - - null - headers: - Cache-Control: - - !!binary | - bWF4LWFnZT0zMTUzNjAwMCwgcHVibGlj - Content-Length: - - '21' - Content-MD5: - - !!binary | - R1FxakVYc1JxclB5eGZUbDk5bmtBZz09 - Content-Type: - - !!binary | - dGV4dC9wbGFpbg== - Expect: - - !!binary | - MTAwLWNvbnRpbnVl - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - VU5TSUdORUQtUEFZTE9BRA== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ1Wg== - method: PUT - uri: https://sos-ch-dk-2.exo.io/test-storage-backend/subdirectory/here/test_file.txt - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:45 GMT - Server: - - nginx - etag: - - '"190aa3117b11aab3f2c5f4e5f7d9e402"' - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - a10aa8d7-4b08-4a01-89fd-66ea990783e4 - x-amz-request-id: - - a10aa8d7-4b08-4a01-89fd-66ea990783e4 - x-amz-requestid: - - a10aa8d7-4b08-4a01-89fd-66ea990783e4 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ1Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:46 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 0245bcda-d484-468c-98f4-5dc16e7f6aa5 - x-amz-request-id: - - 0245bcda-d484-468c-98f4-5dc16e7f6aa5 - x-amz-requestid: - - 0245bcda-d484-468c-98f4-5dc16e7f6aa5 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ2Wg== - method: GET - uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix=subdirectory%2Fhere - response: - body: - string: test-storage-backendsubdirectory/here1000urlfalsesubdirectory/here/test_file.txt2019-11-02T14:42:45.855Z"190aa3117b11aab3f2c5f4e5f7d9e402"21odoo-plateformeodoo-plateformeStandard - headers: - Connection: - - keep-alive - Content-Length: - - '596' - Content-Type: - - application/xml - Date: - - Sat, 02 Nov 2019 14:42:46 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 5db74b47-e834-41c2-8b9c-d1575542f4f1 - x-amz-request-id: - - 5db74b47-e834-41c2-8b9c-d1575542f4f1 - x-amzn-requestid: - - 5db74b47-e834-41c2-8b9c-d1575542f4f1 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ2Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:46 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 3393f9c7-9201-41c6-b8dd-a2ca873cca62 - x-amz-request-id: - - 3393f9c7-9201-41c6-b8dd-a2ca873cca62 - x-amz-requestid: - - 3393f9c7-9201-41c6-b8dd-a2ca873cca62 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ2Wg== - method: GET - uri: https://sos-ch-dk-2.exo.io/test-storage-backend/subdirectory/here/test_file.txt - response: - body: - string: This is a simple file - headers: - Connection: - - keep-alive - Content-Length: - - '21' - Content-Type: - - text/plain - Date: - - Sat, 02 Nov 2019 14:42:46 GMT - Server: - - nginx - cache-control: - - max-age=31536000, public - etag: - - '"190aa3117b11aab3f2c5f4e5f7d9e402"' - last-modified: - - Sat, 02 Nov 2019 14:42:45 GMT - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 04ac2feb-ccb9-4b10-a7ca-0630a87bf65e - x-amz-request-id: - - 04ac2feb-ccb9-4b10-a7ca-0630a87bf65e - x-amzn-requestid: - - 04ac2feb-ccb9-4b10-a7ca-0630a87bf65e - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ2Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:46 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - d6dac54b-96a1-4336-90ab-ee6784f1a4f7 - x-amz-request-id: - - d6dac54b-96a1-4336-90ab-ee6784f1a4f7 - x-amz-requestid: - - d6dac54b-96a1-4336-90ab-ee6784f1a4f7 - status: - code: 200 - message: OK -- request: - body: null - headers: - Content-Length: - - '0' - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ2Wg== - method: DELETE - uri: https://sos-ch-dk-2.exo.io/test-storage-backend/subdirectory/here/test_file.txt - response: - body: - string: '' - headers: - Connection: - - keep-alive - Date: - - Sat, 02 Nov 2019 14:42:46 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 647fc062-5a74-4435-ab61-810d31aefde7 - x-amz-request-id: - - 647fc062-5a74-4435-ab61-810d31aefde7 - x-amz-requestid: - - 647fc062-5a74-4435-ab61-810d31aefde7 - status: - code: 204 - message: No Content -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ2Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:47 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - f7261bc7-8d44-40ea-bbbf-030073cf1e51 - x-amz-request-id: - - f7261bc7-8d44-40ea-bbbf-030073cf1e51 - x-amz-requestid: - - f7261bc7-8d44-40ea-bbbf-030073cf1e51 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ3Wg== - method: GET - uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix=subdirectory%2Fhere - response: - body: - string: test-storage-backendsubdirectory/here1000urlfalse - headers: - Connection: - - keep-alive - Content-Length: - - '300' - Content-Type: - - application/xml - Date: - - Sat, 02 Nov 2019 14:42:47 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 1cf7a3a2-cd2c-4f59-be26-85a2eb947e35 - x-amz-request-id: - - 1cf7a3a2-cd2c-4f59-be26-85a2eb947e35 - x-amzn-requestid: - - 1cf7a3a2-cd2c-4f59-be26-85a2eb947e35 - status: - code: 200 - message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ1Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:45 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - a85cafab-77af-4f67-8e06-37a3ab1b637b + x-amz-request-id: + - a85cafab-77af-4f67-8e06-37a3ab1b637b + x-amz-requestid: + - a85cafab-77af-4f67-8e06-37a3ab1b637b + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ1Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix=subdirectory%2Fhere + response: + body: + string: + test-storage-backendsubdirectory/here1000urlfalse + headers: + Connection: + - keep-alive + Content-Length: + - "300" + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:45 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 97757b05-7d88-480f-be75-98786a9492e8 + x-amz-request-id: + - 97757b05-7d88-480f-be75-98786a9492e8 + x-amzn-requestid: + - 97757b05-7d88-480f-be75-98786a9492e8 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ1Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:45 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 69932919-580b-4d66-bf3d-1916710b4543 + x-amz-request-id: + - 69932919-580b-4d66-bf3d-1916710b4543 + x-amz-requestid: + - 69932919-580b-4d66-bf3d-1916710b4543 + status: + code: 200 + message: OK + - request: + body: !!python/object/new:_io.BytesIO + state: !!python/tuple + - !!binary | + VGhpcyBpcyBhIHNpbXBsZSBmaWxl + - 0 + - null + headers: + Cache-Control: + - !!binary | + bWF4LWFnZT0zMTUzNjAwMCwgcHVibGlj + Content-Length: + - "21" + Content-MD5: + - !!binary | + R1FxakVYc1JxclB5eGZUbDk5bmtBZz09 + Content-Type: + - !!binary | + dGV4dC9wbGFpbg== + Expect: + - !!binary | + MTAwLWNvbnRpbnVl + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + VU5TSUdORUQtUEFZTE9BRA== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ1Wg== + method: PUT + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/subdirectory/here/test_file.txt + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:45 GMT + Server: + - nginx + etag: + - '"190aa3117b11aab3f2c5f4e5f7d9e402"' + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - a10aa8d7-4b08-4a01-89fd-66ea990783e4 + x-amz-request-id: + - a10aa8d7-4b08-4a01-89fd-66ea990783e4 + x-amz-requestid: + - a10aa8d7-4b08-4a01-89fd-66ea990783e4 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ1Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 0245bcda-d484-468c-98f4-5dc16e7f6aa5 + x-amz-request-id: + - 0245bcda-d484-468c-98f4-5dc16e7f6aa5 + x-amz-requestid: + - 0245bcda-d484-468c-98f4-5dc16e7f6aa5 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix=subdirectory%2Fhere + response: + body: + string: + test-storage-backendsubdirectory/here1000urlfalsesubdirectory/here/test_file.txt2019-11-02T14:42:45.855Z"190aa3117b11aab3f2c5f4e5f7d9e402"21odoo-plateformeodoo-plateformeStandard + headers: + Connection: + - keep-alive + Content-Length: + - "596" + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 5db74b47-e834-41c2-8b9c-d1575542f4f1 + x-amz-request-id: + - 5db74b47-e834-41c2-8b9c-d1575542f4f1 + x-amzn-requestid: + - 5db74b47-e834-41c2-8b9c-d1575542f4f1 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 3393f9c7-9201-41c6-b8dd-a2ca873cca62 + x-amz-request-id: + - 3393f9c7-9201-41c6-b8dd-a2ca873cca62 + x-amz-requestid: + - 3393f9c7-9201-41c6-b8dd-a2ca873cca62 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/subdirectory/here/test_file.txt + response: + body: + string: This is a simple file + headers: + Connection: + - keep-alive + Content-Length: + - "21" + Content-Type: + - text/plain + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + cache-control: + - max-age=31536000, public + etag: + - '"190aa3117b11aab3f2c5f4e5f7d9e402"' + last-modified: + - Sat, 02 Nov 2019 14:42:45 GMT + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 04ac2feb-ccb9-4b10-a7ca-0630a87bf65e + x-amz-request-id: + - 04ac2feb-ccb9-4b10-a7ca-0630a87bf65e + x-amzn-requestid: + - 04ac2feb-ccb9-4b10-a7ca-0630a87bf65e + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - d6dac54b-96a1-4336-90ab-ee6784f1a4f7 + x-amz-request-id: + - d6dac54b-96a1-4336-90ab-ee6784f1a4f7 + x-amz-requestid: + - d6dac54b-96a1-4336-90ab-ee6784f1a4f7 + status: + code: 200 + message: OK + - request: + body: null + headers: + Content-Length: + - "0" + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: DELETE + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/subdirectory/here/test_file.txt + response: + body: + string: "" + headers: + Connection: + - keep-alive + Date: + - Sat, 02 Nov 2019 14:42:46 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 647fc062-5a74-4435-ab61-810d31aefde7 + x-amz-request-id: + - 647fc062-5a74-4435-ab61-810d31aefde7 + x-amz-requestid: + - 647fc062-5a74-4435-ab61-810d31aefde7 + status: + code: 204 + message: No Content + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ2Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:47 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - f7261bc7-8d44-40ea-bbbf-030073cf1e51 + x-amz-request-id: + - f7261bc7-8d44-40ea-bbbf-030073cf1e51 + x-amz-requestid: + - f7261bc7-8d44-40ea-bbbf-030073cf1e51 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ3Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix=subdirectory%2Fhere + response: + body: + string: + test-storage-backendsubdirectory/here1000urlfalse + headers: + Connection: + - keep-alive + Content-Length: + - "300" + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:47 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 1cf7a3a2-cd2c-4f59-be26-85a2eb947e35 + x-amz-request-id: + - 1cf7a3a2-cd2c-4f59-be26-85a2eb947e35 + x-amzn-requestid: + - 1cf7a3a2-cd2c-4f59-be26-85a2eb947e35 + status: + code: 200 + message: OK version: 1 diff --git a/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml index 329c395ab0..ea8af73967 100644 --- a/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml +++ b/storage_backend_s3/tests/cassettes/AmazonS3Case.test_setting_and_getting_data_from_root.yaml @@ -1,504 +1,510 @@ interactions: -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ3Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:47 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 29a34678-f089-4df0-82be-6ea48fa074fc - x-amz-request-id: - - 29a34678-f089-4df0-82be-6ea48fa074fc - x-amz-requestid: - - 29a34678-f089-4df0-82be-6ea48fa074fc - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ3Wg== - method: GET - uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix= - response: - body: - string: test-storage-backend1000urlfalse - headers: - Connection: - - keep-alive - Content-Length: - - '283' - Content-Type: - - application/xml - Date: - - Sat, 02 Nov 2019 14:42:47 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 1dab5d2a-721c-44bb-b98b-c4bee9abd720 - x-amz-request-id: - - 1dab5d2a-721c-44bb-b98b-c4bee9abd720 - x-amzn-requestid: - - 1dab5d2a-721c-44bb-b98b-c4bee9abd720 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ3Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:47 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 4be173e4-123b-497c-9a9c-c4acf4d0dcfd - x-amz-request-id: - - 4be173e4-123b-497c-9a9c-c4acf4d0dcfd - x-amz-requestid: - - 4be173e4-123b-497c-9a9c-c4acf4d0dcfd - status: - code: 200 - message: OK -- request: - body: !!python/object/new:_io.BytesIO - state: !!python/tuple - - !!binary | - VGhpcyBpcyBhIHNpbXBsZSBmaWxl - - 0 - - null - headers: - Cache-Control: - - !!binary | - bWF4LWFnZT0zMTUzNjAwMCwgcHVibGlj - Content-Length: - - '21' - Content-MD5: - - !!binary | - R1FxakVYc1JxclB5eGZUbDk5bmtBZz09 - Content-Type: - - !!binary | - dGV4dC9wbGFpbg== - Expect: - - !!binary | - MTAwLWNvbnRpbnVl - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - VU5TSUdORUQtUEFZTE9BRA== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ3Wg== - method: PUT - uri: https://sos-ch-dk-2.exo.io/test-storage-backend/test_file.txt - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:48 GMT - Server: - - nginx - etag: - - '"190aa3117b11aab3f2c5f4e5f7d9e402"' - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 6b3a20b8-79de-4146-89e3-6014ac70a811 - x-amz-request-id: - - 6b3a20b8-79de-4146-89e3-6014ac70a811 - x-amz-requestid: - - 6b3a20b8-79de-4146-89e3-6014ac70a811 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ4Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:48 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - efeeb2fc-f22c-4afe-80c4-ac5b4fa2aa33 - x-amz-request-id: - - efeeb2fc-f22c-4afe-80c4-ac5b4fa2aa33 - x-amz-requestid: - - efeeb2fc-f22c-4afe-80c4-ac5b4fa2aa33 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ4Wg== - method: GET - uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix= - response: - body: - string: test-storage-backend1000urlfalsetest_file.txt2019-11-02T14:42:48.041Z"190aa3117b11aab3f2c5f4e5f7d9e402"21odoo-plateformeodoo-plateformeStandard - headers: - Connection: - - keep-alive - Content-Length: - - '561' - Content-Type: - - application/xml - Date: - - Sat, 02 Nov 2019 14:42:48 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 313f3b01-a1d5-40ae-8ae8-87eaf491b38e - x-amz-request-id: - - 313f3b01-a1d5-40ae-8ae8-87eaf491b38e - x-amzn-requestid: - - 313f3b01-a1d5-40ae-8ae8-87eaf491b38e - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ4Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:48 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - a095635b-ac42-489e-bf67-f87c30ce4dfd - x-amz-request-id: - - a095635b-ac42-489e-bf67-f87c30ce4dfd - x-amz-requestid: - - a095635b-ac42-489e-bf67-f87c30ce4dfd - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ4Wg== - method: GET - uri: https://sos-ch-dk-2.exo.io/test-storage-backend/test_file.txt - response: - body: - string: This is a simple file - headers: - Connection: - - keep-alive - Content-Length: - - '21' - Content-Type: - - text/plain - Date: - - Sat, 02 Nov 2019 14:42:48 GMT - Server: - - nginx - cache-control: - - max-age=31536000, public - etag: - - '"190aa3117b11aab3f2c5f4e5f7d9e402"' - last-modified: - - Sat, 02 Nov 2019 14:42:48 GMT - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 9d6ba5a1-90d6-4106-81f4-40ba427cb124 - x-amz-request-id: - - 9d6ba5a1-90d6-4106-81f4-40ba427cb124 - x-amzn-requestid: - - 9d6ba5a1-90d6-4106-81f4-40ba427cb124 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ4Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:48 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - b5f09cc0-4e00-4ce4-826e-72295237ab45 - x-amz-request-id: - - b5f09cc0-4e00-4ce4-826e-72295237ab45 - x-amz-requestid: - - b5f09cc0-4e00-4ce4-826e-72295237ab45 - status: - code: 200 - message: OK -- request: - body: null - headers: - Content-Length: - - '0' - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ4Wg== - method: DELETE - uri: https://sos-ch-dk-2.exo.io/test-storage-backend/test_file.txt - response: - body: - string: '' - headers: - Connection: - - keep-alive - Date: - - Sat, 02 Nov 2019 14:42:48 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - bc2092e4-173a-465f-b87b-64a63fc18d17 - x-amz-request-id: - - bc2092e4-173a-465f-b87b-64a63fc18d17 - x-amz-requestid: - - bc2092e4-173a-465f-b87b-64a63fc18d17 - status: - code: 204 - message: No Content -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ4Wg== - method: HEAD - uri: https://sos-ch-dk-2.exo.io/test-storage-backend - response: - body: - string: '' - headers: - Connection: - - keep-alive - Content-Length: - - '0' - Date: - - Sat, 02 Nov 2019 14:42:49 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - 70d48c9e-b13b-4b16-abd2-4c853ca55855 - x-amz-request-id: - - 70d48c9e-b13b-4b16-abd2-4c853ca55855 - x-amz-requestid: - - 70d48c9e-b13b-4b16-abd2-4c853ca55855 - status: - code: 200 - message: OK -- request: - body: null - headers: - User-Agent: - - !!binary | - Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv - cmUvMS4xMi4yNTMgUmVzb3VyY2U= - X-Amz-Content-SHA256: - - !!binary | - ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 - ODUyYjg1NQ== - X-Amz-Date: - - !!binary | - MjAxOTExMDJUMTQ0MjQ5Wg== - method: GET - uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix= - response: - body: - string: test-storage-backend1000urlfalse - headers: - Connection: - - keep-alive - Content-Length: - - '283' - Content-Type: - - application/xml - Date: - - Sat, 02 Nov 2019 14:42:49 GMT - Server: - - nginx - x-amz-bucket-region: - - ch-dk-2 - x-amz-id-2: - - f6a89089-3bda-45da-ad7b-9645679252c2 - x-amz-request-id: - - f6a89089-3bda-45da-ad7b-9645679252c2 - x-amzn-requestid: - - f6a89089-3bda-45da-ad7b-9645679252c2 - status: - code: 200 - message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ3Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:47 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 29a34678-f089-4df0-82be-6ea48fa074fc + x-amz-request-id: + - 29a34678-f089-4df0-82be-6ea48fa074fc + x-amz-requestid: + - 29a34678-f089-4df0-82be-6ea48fa074fc + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ3Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix= + response: + body: + string: + test-storage-backend1000urlfalse + headers: + Connection: + - keep-alive + Content-Length: + - "283" + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:47 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 1dab5d2a-721c-44bb-b98b-c4bee9abd720 + x-amz-request-id: + - 1dab5d2a-721c-44bb-b98b-c4bee9abd720 + x-amzn-requestid: + - 1dab5d2a-721c-44bb-b98b-c4bee9abd720 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ3Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:47 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 4be173e4-123b-497c-9a9c-c4acf4d0dcfd + x-amz-request-id: + - 4be173e4-123b-497c-9a9c-c4acf4d0dcfd + x-amz-requestid: + - 4be173e4-123b-497c-9a9c-c4acf4d0dcfd + status: + code: 200 + message: OK + - request: + body: !!python/object/new:_io.BytesIO + state: !!python/tuple + - !!binary | + VGhpcyBpcyBhIHNpbXBsZSBmaWxl + - 0 + - null + headers: + Cache-Control: + - !!binary | + bWF4LWFnZT0zMTUzNjAwMCwgcHVibGlj + Content-Length: + - "21" + Content-MD5: + - !!binary | + R1FxakVYc1JxclB5eGZUbDk5bmtBZz09 + Content-Type: + - !!binary | + dGV4dC9wbGFpbg== + Expect: + - !!binary | + MTAwLWNvbnRpbnVl + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + VU5TSUdORUQtUEFZTE9BRA== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ3Wg== + method: PUT + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/test_file.txt + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + etag: + - '"190aa3117b11aab3f2c5f4e5f7d9e402"' + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 6b3a20b8-79de-4146-89e3-6014ac70a811 + x-amz-request-id: + - 6b3a20b8-79de-4146-89e3-6014ac70a811 + x-amz-requestid: + - 6b3a20b8-79de-4146-89e3-6014ac70a811 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - efeeb2fc-f22c-4afe-80c4-ac5b4fa2aa33 + x-amz-request-id: + - efeeb2fc-f22c-4afe-80c4-ac5b4fa2aa33 + x-amz-requestid: + - efeeb2fc-f22c-4afe-80c4-ac5b4fa2aa33 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix= + response: + body: + string: + test-storage-backend1000urlfalsetest_file.txt2019-11-02T14:42:48.041Z"190aa3117b11aab3f2c5f4e5f7d9e402"21odoo-plateformeodoo-plateformeStandard + headers: + Connection: + - keep-alive + Content-Length: + - "561" + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 313f3b01-a1d5-40ae-8ae8-87eaf491b38e + x-amz-request-id: + - 313f3b01-a1d5-40ae-8ae8-87eaf491b38e + x-amzn-requestid: + - 313f3b01-a1d5-40ae-8ae8-87eaf491b38e + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - a095635b-ac42-489e-bf67-f87c30ce4dfd + x-amz-request-id: + - a095635b-ac42-489e-bf67-f87c30ce4dfd + x-amz-requestid: + - a095635b-ac42-489e-bf67-f87c30ce4dfd + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/test_file.txt + response: + body: + string: This is a simple file + headers: + Connection: + - keep-alive + Content-Length: + - "21" + Content-Type: + - text/plain + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + cache-control: + - max-age=31536000, public + etag: + - '"190aa3117b11aab3f2c5f4e5f7d9e402"' + last-modified: + - Sat, 02 Nov 2019 14:42:48 GMT + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 9d6ba5a1-90d6-4106-81f4-40ba427cb124 + x-amz-request-id: + - 9d6ba5a1-90d6-4106-81f4-40ba427cb124 + x-amzn-requestid: + - 9d6ba5a1-90d6-4106-81f4-40ba427cb124 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - b5f09cc0-4e00-4ce4-826e-72295237ab45 + x-amz-request-id: + - b5f09cc0-4e00-4ce4-826e-72295237ab45 + x-amz-requestid: + - b5f09cc0-4e00-4ce4-826e-72295237ab45 + status: + code: 200 + message: OK + - request: + body: null + headers: + Content-Length: + - "0" + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: DELETE + uri: https://sos-ch-dk-2.exo.io/test-storage-backend/test_file.txt + response: + body: + string: "" + headers: + Connection: + - keep-alive + Date: + - Sat, 02 Nov 2019 14:42:48 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - bc2092e4-173a-465f-b87b-64a63fc18d17 + x-amz-request-id: + - bc2092e4-173a-465f-b87b-64a63fc18d17 + x-amz-requestid: + - bc2092e4-173a-465f-b87b-64a63fc18d17 + status: + code: 204 + message: No Content + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ4Wg== + method: HEAD + uri: https://sos-ch-dk-2.exo.io/test-storage-backend + response: + body: + string: "" + headers: + Connection: + - keep-alive + Content-Length: + - "0" + Date: + - Sat, 02 Nov 2019 14:42:49 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - 70d48c9e-b13b-4b16-abd2-4c853ca55855 + x-amz-request-id: + - 70d48c9e-b13b-4b16-abd2-4c853ca55855 + x-amz-requestid: + - 70d48c9e-b13b-4b16-abd2-4c853ca55855 + status: + code: 200 + message: OK + - request: + body: null + headers: + User-Agent: + - !!binary | + Qm90bzMvMS45LjEwMiBQeXRob24vMy41LjMgTGludXgvNC4xNS4wLTU0LWdlbmVyaWMgQm90b2Nv + cmUvMS4xMi4yNTMgUmVzb3VyY2U= + X-Amz-Content-SHA256: + - !!binary | + ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3 + ODUyYjg1NQ== + X-Amz-Date: + - !!binary | + MjAxOTExMDJUMTQ0MjQ5Wg== + method: GET + uri: https://sos-ch-dk-2.exo.io/test-storage-backend?encoding-type=url&prefix= + response: + body: + string: + test-storage-backend1000urlfalse + headers: + Connection: + - keep-alive + Content-Length: + - "283" + Content-Type: + - application/xml + Date: + - Sat, 02 Nov 2019 14:42:49 GMT + Server: + - nginx + x-amz-bucket-region: + - ch-dk-2 + x-amz-id-2: + - f6a89089-3bda-45da-ad7b-9645679252c2 + x-amz-request-id: + - f6a89089-3bda-45da-ad7b-9645679252c2 + x-amzn-requestid: + - f6a89089-3bda-45da-ad7b-9645679252c2 + status: + code: 200 + message: OK version: 1 diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index 1d7675a978..7307f653f7 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -30,16 +30,10 @@ def setUp(self): self.backend.write( { "backend_type": "amazon_s3", - "aws_bucket": os.environ.get( - "AWS_BUCKET", "test-storage-backend" - ), + "aws_bucket": os.environ.get("AWS_BUCKET", "test-storage-backend"), "aws_access_key_id": os.environ.get("AWS_ACCESS_KEY_ID", ""), - "aws_secret_access_key": os.environ.get( - "AWS_SECRET_ACCESS_KEY", "" - ), - "aws_host": os.environ.get( - "AWS_HOST", "https://sos-ch-dk-2.exo.io" - ), + "aws_secret_access_key": os.environ.get("AWS_SECRET_ACCESS_KEY", ""), + "aws_host": os.environ.get("AWS_HOST", "https://sos-ch-dk-2.exo.io"), } ) diff --git a/storage_backend_s3/views/backend_storage_view.xml b/storage_backend_s3/views/backend_storage_view.xml index ee5e2a1e41..80a0df38d2 100644 --- a/storage_backend_s3/views/backend_storage_view.xml +++ b/storage_backend_s3/views/backend_storage_view.xml @@ -1,27 +1,45 @@ - + - - storage.backend - - - - - - - - - - - - - - + + storage.backend + + + + + + + + + + + + + + + + - - - + + From eb0aa94664759f4da8a6d28e6265fffba8b8e580 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Thu, 29 Oct 2020 11:51:40 +0100 Subject: [PATCH 30/49] storage_backend: run permission tests explicitely --- storage_backend_s3/tests/test_amazon_s3.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index 7307f653f7..9bbcd98670 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -11,12 +11,12 @@ from vcr_unittest import VCRMixin -from odoo.addons.storage_backend.tests.common import Common, GenericStoreCase +from odoo.addons.storage_backend.tests.common import BackendStorageTestMixin, CommonCase _logger = logging.getLogger(__name__) -class AmazonS3Case(VCRMixin, Common, GenericStoreCase): +class AmazonS3Case(VCRMixin, CommonCase, BackendStorageTestMixin): def _get_vcr_kwargs(self, **kwargs): return { "record_mode": "once", @@ -37,6 +37,12 @@ def setUp(self): } ) + def test_setting_and_getting_data_from_root(self): + self._test_setting_and_getting_data_from_root() + + def test_setting_and_getting_data_from_dir(self): + self._test_setting_and_getting_data_from_dir() + def test_params(self): adapter = self.backend._get_adapter() self.backend.aws_host = "" From 635005b28d4d2bab0f157b0bd8536531bafecd8f Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Mon, 23 Nov 2020 08:55:34 +0100 Subject: [PATCH 31/49] storage_backend_s3 bump 13.0.1.1.0 --- storage_backend_s3/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index ad2c672c31..18f8e20a59 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", - "version": "13.0.1.0.0", + "version": "13.0.1.1.0", "category": "Storage", "website": "https://www.github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", From 5728d2b32df5c5dd827898892f825e0e937ec8a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Sun, 6 Dec 2020 09:53:40 +0100 Subject: [PATCH 32/49] [ADD] add new V14 config --- storage_backend_s3/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 18f8e20a59..b3369b0efa 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -10,7 +10,7 @@ "website": "https://www.github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", "license": "AGPL-3", - "installable": True, + "installable": False, "external_dependencies": {"python": ["boto3"]}, "depends": ["storage_backend"], "data": ["views/backend_storage_view.xml"], From db722ae869d00ad503b4d6830116f66473b0aa6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Sun, 6 Dec 2020 10:10:22 +0100 Subject: [PATCH 33/49] [IMP] all: black, isort, prettier --- storage_backend_s3/__manifest__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index b3369b0efa..7f6deb4f25 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -7,10 +7,10 @@ "summary": "Implement amazon S3 Storage", "version": "13.0.1.1.0", "category": "Storage", - "website": "https://www.github.com/OCA/storage", + "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", "license": "AGPL-3", - "installable": False, + "installable": True, "external_dependencies": {"python": ["boto3"]}, "depends": ["storage_backend"], "data": ["views/backend_storage_view.xml"], From e9cb4df6ea14e085043230f38cf7c9c9d73589ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Sun, 6 Dec 2020 10:17:45 +0100 Subject: [PATCH 34/49] [MIG] batch migration of modules --- storage_backend_s3/__manifest__.py | 2 +- storage_backend_s3/models/storage_backend.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 7f6deb4f25..c0671eb98b 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", - "version": "13.0.1.1.0", + "version": "14.0.1.0.0", "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 4969de614d..d23de23b43 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -19,7 +19,10 @@ class StorageBackend(models.Model): _inherit = "storage.backend" - backend_type = fields.Selection(selection_add=[("amazon_s3", "Amazon S3")]) + backend_type = fields.Selection( + selection_add=[("amazon_s3", "Amazon S3")], + ondelete={"amazon_s3": "set default"}, + ) aws_host = fields.Char( string="AWS Host", help="If you are using a different host than standard AWS ones, " From e7532107c0283603368bde2d3a35ee14e44e01ed Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 1 Mar 2021 12:20:30 +0000 Subject: [PATCH 35/49] storage_backend_s3 14.0.1.0.1 --- storage_backend_s3/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index c0671eb98b..1414536772 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", From cc281b3a7d3628e2d890c607d7081c9235c926a9 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Wed, 9 Jun 2021 19:07:11 +0000 Subject: [PATCH 36/49] [UPD] Update storage_backend_s3.pot --- storage_backend_s3/i18n/storage_backend_s3.pot | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/storage_backend_s3/i18n/storage_backend_s3.pot b/storage_backend_s3/i18n/storage_backend_s3.pot index 57030fcdd8..991e976a4f 100644 --- a/storage_backend_s3/i18n/storage_backend_s3.pot +++ b/storage_backend_s3/i18n/storage_backend_s3.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -49,11 +49,26 @@ msgstr "" msgid "Bucket" msgstr "" +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__display_name +msgid "Display Name" +msgstr "" + +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__id +msgid "ID" +msgstr "" + #. module: storage_backend_s3 #: model:ir.model.fields,help:storage_backend_s3.field_storage_backend__aws_host msgid "If you are using a different host than standard AWS ones, eg: Exoscale" msgstr "" +#. module: storage_backend_s3 +#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend____last_update +msgid "Last Modified on" +msgstr "" + #. module: storage_backend_s3 #: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_other_region msgid "Other region" From 8a487663c02bc4f72c9baaf9e0595173f1afdb24 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Wed, 10 Mar 2021 15:36:45 +0100 Subject: [PATCH 37/49] [CHG] storage: Use more permissive licence: AGPL-> LGPL --- storage_backend_s3/README.rst | 6 +++--- storage_backend_s3/__manifest__.py | 4 ++-- storage_backend_s3/components/s3_adapter.py | 2 +- storage_backend_s3/models/storage_backend.py | 2 +- storage_backend_s3/tests/test_amazon_s3.py | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/storage_backend_s3/README.rst b/storage_backend_s3/README.rst index a94807a059..485699e209 100644 --- a/storage_backend_s3/README.rst +++ b/storage_backend_s3/README.rst @@ -1,7 +1,7 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 +.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 =================== Storage backend S3 diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 1414536772..c1f165b97b 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -1,6 +1,6 @@ # Copyright 2017 Akretion (http://www.akretion.com). # @author Sébastien BEAU -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). { "name": "Storage Backend S3", @@ -9,7 +9,7 @@ "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", - "license": "AGPL-3", + "license": "LGPL-3", "installable": True, "external_dependencies": {"python": ["boto3"]}, "depends": ["storage_backend"], diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 8fbe95f171..628962a034 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -2,7 +2,7 @@ # @author Sébastien BEAU # Copyright 2019 Camptocamp SA (http://www.camptocamp.com). # @author Simone Orsi -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). import io import logging diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index d23de23b43..656ea27ccc 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -2,7 +2,7 @@ # @author Sébastien BEAU # Copyright 2019 Camptocamp SA (http://www.camptocamp.com). # @author Simone Orsi -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). import logging diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index 9bbcd98670..269f8499a3 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -1,6 +1,6 @@ # Copyright 2017 Akretion (http://www.akretion.com). # @author Sébastien BEAU -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). # pylint: disable=missing-manifest-dependency # disable warning on 'vcr' missing in manifest: this is only a dependency for From 7e0546b498f9d5e7d1acb7e48fde9a4077ab9e64 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 2 Aug 2021 18:42:28 +0000 Subject: [PATCH 38/49] storage_backend_s3 14.0.2.0.0 --- storage_backend_s3/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index c1f165b97b..5cdbddedf1 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", - "version": "14.0.1.0.1", + "version": "14.0.2.0.0", "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", From bd1f44394f2de2357b9c2fc35cc81f0cc22fd5c5 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Wed, 3 Feb 2021 11:28:22 +0100 Subject: [PATCH 39/49] storage_s3: fix aws regions lookup to load once Every time the selection field was loaded S3 API were called to retrieve regions. This can have a big impact on computing URLs and in any case is useless if we assume that regions do not change every now and then. --- storage_backend_s3/models/storage_backend.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/storage_backend_s3/models/storage_backend.py b/storage_backend_s3/models/storage_backend.py index 656ea27ccc..6a0d04a706 100644 --- a/storage_backend_s3/models/storage_backend.py +++ b/storage_backend_s3/models/storage_backend.py @@ -16,6 +16,20 @@ _logger.debug(err) +def _load_aws_regions(): + _logger.info("Loading available AWS regions") + session = boto3.session.Session() + return [ + (region, region.replace("-", " ").capitalize()) + for region in session.get_available_regions("s3") + ] + + +# AWS regions won't change that often, fine to retrieve them at instance load. +# Also, this prevents to call AWS every time the selection list is accessed. +AWS_REGIONS = _load_aws_regions() + + class StorageBackend(models.Model): _inherit = "storage.backend" @@ -65,12 +79,8 @@ def _server_env_fields(self): return env_fields def _selection_aws_region(self): - session = boto3.session.Session() return ( [("", "None")] - + [ - (region, region.replace("-", " ").capitalize()) - for region in session.get_available_regions("s3") - ] + + AWS_REGIONS + [("other", "Empty or Other (Manually specify below)")] ) From 8eec98ec2fc99397c4eb6ba240ebf317cbb46956 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 30 Nov 2021 12:44:12 +0000 Subject: [PATCH 40/49] storage_backend_s3 14.0.2.0.1 --- storage_backend_s3/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 5cdbddedf1..301e103dc0 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", - "version": "14.0.2.0.0", + "version": "14.0.2.0.1", "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", From 1212e25ce01321432d804ba272b190112bca3e18 Mon Sep 17 00:00:00 2001 From: amg dell Date: Wed, 1 Dec 2021 16:55:08 +0100 Subject: [PATCH 41/49] [UPD] Reflect boto3 version issue in readme --- storage_backend_s3/README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/storage_backend_s3/README.rst b/storage_backend_s3/README.rst index 485699e209..c3289fd3be 100644 --- a/storage_backend_s3/README.rst +++ b/storage_backend_s3/README.rst @@ -24,6 +24,9 @@ Known issues / Roadmap Update README with the last model of README when migration to v11 in OCA +There is an issue with the latest version of `boto3` and `urllib3` +- boto3 needs to be `boto3<=1.15.17` related with https://github.com/OCA/storage/issues/67 + Credits ======= From 3ffc0d01e8589a17a2a64c9033124ddbb23df27b Mon Sep 17 00:00:00 2001 From: Jasmin Solanki Date: Thu, 21 Jul 2022 16:51:48 +0530 Subject: [PATCH 42/49] [MIG] storage_backend_s3: Migration to 15.0 --- storage_backend_s3/README.rst | 2 -- storage_backend_s3/__manifest__.py | 4 ++-- storage_backend_s3/components/s3_adapter.py | 4 ++-- storage_backend_s3/readme/CONTRIBUTORS.rst | 2 ++ storage_backend_s3/readme/DESCRIPTION.rst | 1 + storage_backend_s3/readme/ROADMAP.rst | 2 ++ 6 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 storage_backend_s3/readme/CONTRIBUTORS.rst create mode 100644 storage_backend_s3/readme/DESCRIPTION.rst create mode 100644 storage_backend_s3/readme/ROADMAP.rst diff --git a/storage_backend_s3/README.rst b/storage_backend_s3/README.rst index c3289fd3be..7713e597cd 100644 --- a/storage_backend_s3/README.rst +++ b/storage_backend_s3/README.rst @@ -22,8 +22,6 @@ To install this module, you need to: Known issues / Roadmap ====================== -Update README with the last model of README when migration to v11 in OCA - There is an issue with the latest version of `boto3` and `urllib3` - boto3 needs to be `boto3<=1.15.17` related with https://github.com/OCA/storage/issues/67 diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 301e103dc0..41fd99aa8e 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,13 +5,13 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", - "version": "14.0.2.0.1", + "version": "15.0.1.0.0", "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", "license": "LGPL-3", "installable": True, - "external_dependencies": {"python": ["boto3"]}, + "external_dependencies": {"python": ["boto3<=1.15.17"]}, "depends": ["storage_backend"], "data": ["views/backend_storage_view.xml"], } diff --git a/storage_backend_s3/components/s3_adapter.py b/storage_backend_s3/components/s3_adapter.py index 628962a034..15d9d40528 100644 --- a/storage_backend_s3/components/s3_adapter.py +++ b/storage_backend_s3/components/s3_adapter.py @@ -58,7 +58,7 @@ def _get_bucket(self): except EndpointConnectionError as error: # log verbose error from s3, return short message for user _logger.exception("Error during connection on S3") - raise exceptions.UserError(str(error)) + raise exceptions.UserError(str(error)) from error region_name = params.get("region_name") if not exists: if not region_name: @@ -90,7 +90,7 @@ def add(self, relative_path, bin_data, mimetype=None, **kwargs): _logger.exception("Error during storage of the file %s" % relative_path) raise exceptions.UserError( _("The file could not be stored: %s") % str(error) - ) + ) from error def _aws_upload_fileobj_params(self, mimetype=None, **kw): extra_args = {} diff --git a/storage_backend_s3/readme/CONTRIBUTORS.rst b/storage_backend_s3/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..3cd662081b --- /dev/null +++ b/storage_backend_s3/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Sebastien Beau +* Raphaël Reverdy diff --git a/storage_backend_s3/readme/DESCRIPTION.rst b/storage_backend_s3/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..8d9fd944e8 --- /dev/null +++ b/storage_backend_s3/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Add the possibility to store and get data from amazon S3 for your storage backend diff --git a/storage_backend_s3/readme/ROADMAP.rst b/storage_backend_s3/readme/ROADMAP.rst new file mode 100644 index 0000000000..2af6358a95 --- /dev/null +++ b/storage_backend_s3/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +There is an issue with the latest version of `boto3` and `urllib3` +- boto3 needs to be `boto3<=1.15.17` related with https://github.com/OCA/storage/issues/67 From 9fc0528bd2d22dd18114981a58997915a8ef157c Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 18 Oct 2022 16:02:04 +0000 Subject: [PATCH 43/49] [UPD] Update storage_backend_s3.pot --- storage_backend_s3/i18n/storage_backend_s3.pot | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/storage_backend_s3/i18n/storage_backend_s3.pot b/storage_backend_s3/i18n/storage_backend_s3.pot index 991e976a4f..954bdea0fc 100644 --- a/storage_backend_s3/i18n/storage_backend_s3.pot +++ b/storage_backend_s3/i18n/storage_backend_s3.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -49,26 +49,11 @@ msgstr "" msgid "Bucket" msgstr "" -#. module: storage_backend_s3 -#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__display_name -msgid "Display Name" -msgstr "" - -#. module: storage_backend_s3 -#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__id -msgid "ID" -msgstr "" - #. module: storage_backend_s3 #: model:ir.model.fields,help:storage_backend_s3.field_storage_backend__aws_host msgid "If you are using a different host than standard AWS ones, eg: Exoscale" msgstr "" -#. module: storage_backend_s3 -#: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend____last_update -msgid "Last Modified on" -msgstr "" - #. module: storage_backend_s3 #: model:ir.model.fields,field_description:storage_backend_s3.field_storage_backend__aws_other_region msgid "Other region" From c33e2c4c51da88afd2ce58c87e1f581c7b7739ee Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 18 Oct 2022 16:04:34 +0000 Subject: [PATCH 44/49] [UPD] README.rst --- storage_backend_s3/README.rst | 77 +++- .../static/description/index.html | 426 ++++++++++++++++++ 2 files changed, 483 insertions(+), 20 deletions(-) create mode 100644 storage_backend_s3/static/description/index.html diff --git a/storage_backend_s3/README.rst b/storage_backend_s3/README.rst index 7713e597cd..2220f2ed5f 100644 --- a/storage_backend_s3/README.rst +++ b/storage_backend_s3/README.rst @@ -1,23 +1,36 @@ - -.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg - :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html - :alt: License: LGPL-3 - -=================== -Storage backend S3 -=================== +================== +Storage Backend S3 +================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstorage-lightgray.png?logo=github + :target: https://github.com/OCA/storage/tree/15.0/storage_backend_s3 + :alt: OCA/storage +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/storage-15-0/storage-15-0-storage_backend_s3 + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/275/15.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| Add the possibility to store and get data from amazon S3 for your storage backend +**Table of contents** - -Installation -============ - -To install this module, you need to: - -#. (root) pip install boto - +.. contents:: + :local: Known issues / Roadmap ====================== @@ -25,19 +38,43 @@ Known issues / Roadmap There is an issue with the latest version of `boto3` and `urllib3` - boto3 needs to be `boto3<=1.15.17` related with https://github.com/OCA/storage/issues/67 +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= +Authors +~~~~~~~ + +* Akretion Contributors ------------- +~~~~~~~~~~~~ * Sebastien Beau * Raphaël Reverdy +Maintainers +~~~~~~~~~~~ -Maintainer ----------- +This module is maintained by the OCA. -* Akretion +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/storage `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/storage_backend_s3/static/description/index.html b/storage_backend_s3/static/description/index.html new file mode 100644 index 0000000000..38d7c49f4a --- /dev/null +++ b/storage_backend_s3/static/description/index.html @@ -0,0 +1,426 @@ + + + + + + +Storage Backend S3 + + + +
+

Storage Backend S3

+ + +

Beta License: LGPL-3 OCA/storage Translate me on Weblate Try me on Runbot

+

Add the possibility to store and get data from amazon S3 for your storage backend

+

Table of contents

+ +
+

Known issues / Roadmap

+

There is an issue with the latest version of boto3 and urllib3 +- boto3 needs to be boto3<=1.15.17 related with https://github.com/OCA/storage/issues/67

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Akretion
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/storage project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From 9ae145bc05d2ba498fd77d1db690e7b9763a29e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miquel=20Ra=C3=AFch?= Date: Wed, 19 Oct 2022 15:38:16 +0200 Subject: [PATCH 45/49] [IMP] boto3 version bump --- storage_backend_s3/__manifest__.py | 2 +- storage_backend_s3/readme/ROADMAP.rst | 2 +- storage_backend_s3/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 41fd99aa8e..0ef0dd5363 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -11,7 +11,7 @@ "author": " Akretion, Odoo Community Association (OCA)", "license": "LGPL-3", "installable": True, - "external_dependencies": {"python": ["boto3<=1.15.17"]}, + "external_dependencies": {"python": ["boto3<=1.15.18"]}, "depends": ["storage_backend"], "data": ["views/backend_storage_view.xml"], } diff --git a/storage_backend_s3/readme/ROADMAP.rst b/storage_backend_s3/readme/ROADMAP.rst index 2af6358a95..898d925979 100644 --- a/storage_backend_s3/readme/ROADMAP.rst +++ b/storage_backend_s3/readme/ROADMAP.rst @@ -1,2 +1,2 @@ There is an issue with the latest version of `boto3` and `urllib3` -- boto3 needs to be `boto3<=1.15.17` related with https://github.com/OCA/storage/issues/67 +- boto3 needs to be `boto3<=1.15.18` related with https://github.com/OCA/storage/issues/67 diff --git a/storage_backend_s3/static/description/index.html b/storage_backend_s3/static/description/index.html index 38d7c49f4a..53ef73c63e 100644 --- a/storage_backend_s3/static/description/index.html +++ b/storage_backend_s3/static/description/index.html @@ -385,7 +385,7 @@

Storage Backend S3

Known issues / Roadmap

There is an issue with the latest version of boto3 and urllib3 -- boto3 needs to be boto3<=1.15.17 related with https://github.com/OCA/storage/issues/67

+- boto3 needs to be boto3<=1.15.18 related with https://github.com/OCA/storage/issues/67

Bug Tracker

From 8e9d999ded73ac04f41f20f1c608eadb26121ff5 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 20 Oct 2022 09:34:31 +0000 Subject: [PATCH 46/49] [UPD] README.rst --- storage_backend_s3/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/README.rst b/storage_backend_s3/README.rst index 2220f2ed5f..0288170990 100644 --- a/storage_backend_s3/README.rst +++ b/storage_backend_s3/README.rst @@ -36,7 +36,7 @@ Known issues / Roadmap ====================== There is an issue with the latest version of `boto3` and `urllib3` -- boto3 needs to be `boto3<=1.15.17` related with https://github.com/OCA/storage/issues/67 +- boto3 needs to be `boto3<=1.15.18` related with https://github.com/OCA/storage/issues/67 Bug Tracker =========== From b7ffff141cdf7e8d1a4899cddbeb381e1999eae0 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 20 Oct 2022 09:34:32 +0000 Subject: [PATCH 47/49] storage_backend_s3 15.0.1.0.1 --- storage_backend_s3/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 0ef0dd5363..5b744afef9 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", - "version": "15.0.1.0.0", + "version": "15.0.1.0.1", "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", From 64708c0509f28381a96f61248a81682e6d1d745d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Piernas=20Andr=C3=A9s?= Date: Tue, 8 Aug 2023 15:33:17 +0200 Subject: [PATCH 48/49] [IMP] storage_backend_s3: pre-commit stuff --- requirements.txt | 2 ++ setup/storage_backend_s3/odoo/addons/storage_backend_s3 | 1 + setup/storage_backend_s3/setup.py | 6 ++++++ 3 files changed, 9 insertions(+) create mode 100644 requirements.txt create mode 120000 setup/storage_backend_s3/odoo/addons/storage_backend_s3 create mode 100644 setup/storage_backend_s3/setup.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000..66751eb7ec --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +# generated from manifests external_dependencies +boto3<=1.15.18 diff --git a/setup/storage_backend_s3/odoo/addons/storage_backend_s3 b/setup/storage_backend_s3/odoo/addons/storage_backend_s3 new file mode 120000 index 0000000000..ec8c7ff362 --- /dev/null +++ b/setup/storage_backend_s3/odoo/addons/storage_backend_s3 @@ -0,0 +1 @@ +../../../../storage_backend_s3 \ No newline at end of file diff --git a/setup/storage_backend_s3/setup.py b/setup/storage_backend_s3/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/storage_backend_s3/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 842bcf6b742bc08469dd5742328ba7716405bdfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Piernas=20Andr=C3=A9s?= Date: Wed, 9 Aug 2023 11:19:56 +0200 Subject: [PATCH 49/49] [MIG] storage_backend_s3: Migration to 16.0 --- requirements.txt | 1 + storage_backend_s3/__manifest__.py | 4 +-- storage_backend_s3/tests/test_amazon_s3.py | 30 +++++++++++++--------- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/requirements.txt b/requirements.txt index 66751eb7ec..8820ed6b99 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ # generated from manifests external_dependencies boto3<=1.15.18 +vcrpy-unittest diff --git a/storage_backend_s3/__manifest__.py b/storage_backend_s3/__manifest__.py index 5b744afef9..d58006e7cb 100644 --- a/storage_backend_s3/__manifest__.py +++ b/storage_backend_s3/__manifest__.py @@ -5,13 +5,13 @@ { "name": "Storage Backend S3", "summary": "Implement amazon S3 Storage", - "version": "15.0.1.0.1", + "version": "16.0.1.0.0", "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", "license": "LGPL-3", "installable": True, - "external_dependencies": {"python": ["boto3<=1.15.18"]}, + "external_dependencies": {"python": ["boto3<=1.15.18", "vcrpy-unittest"]}, "depends": ["storage_backend"], "data": ["views/backend_storage_view.xml"], } diff --git a/storage_backend_s3/tests/test_amazon_s3.py b/storage_backend_s3/tests/test_amazon_s3.py index 269f8499a3..1256126aee 100644 --- a/storage_backend_s3/tests/test_amazon_s3.py +++ b/storage_backend_s3/tests/test_amazon_s3.py @@ -17,6 +17,24 @@ class AmazonS3Case(VCRMixin, CommonCase, BackendStorageTestMixin): + @classmethod + def setUpClass(cls): + super(AmazonS3Case, cls).setUpClass() + cls.backend = cls.env.ref("storage_backend.default_storage_backend") + cls.backend.write( + { + "backend_type": "amazon_s3", + "aws_bucket": os.environ.get("AWS_BUCKET", "test-storage-backend"), + "aws_access_key_id": os.environ.get( + "AWS_ACCESS_KEY_ID", "test-access-key" + ), + "aws_secret_access_key": os.environ.get( + "AWS_SECRET_ACCESS_KEY", "test-secret-access-key" + ), + "aws_host": os.environ.get("AWS_HOST", "https://sos-ch-dk-2.exo.io"), + } + ) + def _get_vcr_kwargs(self, **kwargs): return { "record_mode": "once", @@ -25,18 +43,6 @@ def _get_vcr_kwargs(self, **kwargs): "decode_compressed_response": True, } - def setUp(self): - super(AmazonS3Case, self).setUp() - self.backend.write( - { - "backend_type": "amazon_s3", - "aws_bucket": os.environ.get("AWS_BUCKET", "test-storage-backend"), - "aws_access_key_id": os.environ.get("AWS_ACCESS_KEY_ID", ""), - "aws_secret_access_key": os.environ.get("AWS_SECRET_ACCESS_KEY", ""), - "aws_host": os.environ.get("AWS_HOST", "https://sos-ch-dk-2.exo.io"), - } - ) - def test_setting_and_getting_data_from_root(self): self._test_setting_and_getting_data_from_root()