def get_app(self): cfg = Config(SECURITY_KEY='MYKEY') cfg.LOADER = "thumbor.loaders.file_loader" cfg.FILE_LOADER_ROOT_PATH = storage_path cfg.ALLOW_UNSAFE_URL = False cfg.ALLOW_OLD_URLS = True cfg.STORES_CRYPTO_KEY_FOR_EACH_IMAGE = True importer = Importer(cfg) importer.import_modules() server = ServerParameters(8891, 'localhost', 'thumbor.conf', None, 'info', None) server.security_key = 'MYKEY' ctx = Context(server, cfg, importer) application = ThumborServiceApp(ctx) storage = FileStorage(Context(config=cfg, server=server)) # Store fixtures (image.jpg and image.txt) into the file storage storage.put('image.jpg', file(join(storage_path, 'image.jpg')).read()) storage.put_crypto( 'image.jpg' ) # Write a file on the file storage containing the security key return application
def topic(self): config = Config( FILE_STORAGE_ROOT_PATH="/tmp/thumbor/file_storage/", STORES_CRYPTO_KEY_FOR_EACH_IMAGE=True) storage = FileStorage( Context(config=config, server=get_server('ACME-SEC'))) return storage.get_crypto(IMAGE_URL % 9999)
def topic(self): config = Config( FILE_STORAGE_ROOT_PATH="/tmp/thumbor/file_storage/") storage = FileStorage( Context(config=config, server=get_server('ACME-SEC'))) storage.put(IMAGE_URL % 1, IMAGE_BYTES) return storage.get(IMAGE_URL % 1)
def test_does_not_store_if_config_says_not_to(self): iurl = self.get_image_url('image_5.jpg') ibytes = self.get_image_bytes('image.jpg') storage = FileStorage(self.context) storage.put(iurl, ibytes) storage.put_crypto(iurl) got = yield storage.get_crypto(iurl) expect(got).to_be_null()
def test_can_get_if_expire_set_to_none(self): iurl = self.get_image_url('image_2.jpg') ibytes = self.get_image_bytes('image.jpg') storage = FileStorage(self.context) storage.put(iurl, ibytes) got = yield storage.get(iurl) expect(got).not_to_be_null() expect(got).not_to_be_an_error()
def topic(self): config = Config( FILE_STORAGE_ROOT_PATH="/tmp/thumbor/file_storage/", STORES_CRYPTO_KEY_FOR_EACH_IMAGE=True) storage = FileStorage( Context(config=config, server=get_server(''))) storage.put(IMAGE_URL % 3, IMAGE_BYTES) storage.put_crypto(IMAGE_URL % 3)
async def test_does_not_store_if_config_says_not_to(self): iurl = self.get_image_url("image_5.jpg") ibytes = self.get_image_bytes("image.jpg") storage = FileStorage(self.context) await storage.put(iurl, ibytes) await storage.put_crypto(iurl) got = await storage.get_crypto(iurl) expect(got).to_be_null()
def topic(self): config = Config( FILE_STORAGE_ROOT_PATH="/tmp/thumbor/file_storage/%s" % random.randint(1, 10000000)) storage = FileStorage( Context(config=config, server=get_server('ACME-SEC'))) storage.ensure_dir(config.FILE_STORAGE_ROOT_PATH) return exists(config.FILE_STORAGE_ROOT_PATH)
async def test_can_store_image_should_be_in_catalog(self): url = self.get_image_url("image.jpg") image_bytes = self.get_image_bytes("image.jpg") storage = FileStorage(self.context) await storage.put(url, image_bytes) got = await storage.get(url) expect(got).not_to_be_null() expect(got).not_to_be_an_error()
def test_can_store_image_should_be_in_catalog(self): url = self.get_image_url('image.jpg') image_bytes = self.get_image_bytes('image.jpg') storage = FileStorage(self.context) storage.put(url, image_bytes) got = yield storage.get(url) expect(got).not_to_be_null() expect(got).not_to_be_an_error()
async def test_can_get_if_expire_set_to_none(self): iurl = self.get_image_url("image_2.jpg") ibytes = self.get_image_bytes("image.jpg") storage = FileStorage(self.context) await storage.put(iurl, ibytes) got = await storage.get(iurl) expect(got).not_to_be_null() expect(got).not_to_be_an_error()
async def test_can_store_image_with_spaces_encoded(self): url = self.get_image_url("image%20.jpg") image_bytes = self.get_image_bytes("image .jpg") storage = FileStorage(self.context) await storage.put(url, image_bytes) got = await storage.get(url) expect(got).not_to_be_null() expect(got).not_to_be_an_error() expect(got).to_equal(image_bytes)
def test_can_store_image_with_spaces(self): url = self.get_image_url('image .jpg') image_bytes = self.get_image_bytes('image .jpg') storage = FileStorage(self.context) storage.put(url, image_bytes) got = yield storage.get(url) expect(got).not_to_be_null() expect(got).not_to_be_an_error() expect(got).to_equal(image_bytes)
def test_detector_can_store_detector_data(self): iurl = self.get_image_url('image_7.jpg') ibytes = self.get_image_bytes('image.jpg') storage = FileStorage(self.context) storage.put(iurl, ibytes) storage.put_detector_data(iurl, 'some-data') got = yield storage.get_detector_data(iurl) expect(got).not_to_be_null() expect(got).not_to_be_an_error() expect(got).to_equal('some-data')
async def test_detector_can_store_detector_data(self): iurl = self.get_image_url("image_7.jpg") ibytes = self.get_image_bytes("image.jpg") storage = FileStorage(self.context) await storage.put(iurl, ibytes) await storage.put_detector_data(iurl, "some-data") got = await storage.get_detector_data(iurl) expect(got).not_to_be_null() expect(got).not_to_be_an_error() expect(got).to_equal("some-data")
def test_can_store_crypto(self): iurl = self.get_image_url('image_6.jpg') ibytes = self.get_image_bytes('image.jpg') storage = FileStorage(self.context) storage.put(iurl, ibytes) storage.put_crypto(iurl) got = yield storage.get_crypto(iurl) expect(got).not_to_be_null() expect(got).not_to_be_an_error() expect(got).to_equal('ACME-SEC')
async def test_can_store_crypto(self): iurl = self.get_image_url("image_6.jpg") ibytes = self.get_image_bytes("image.jpg") storage = FileStorage(self.context) await storage.put(iurl, ibytes) await storage.put_crypto(iurl) got = await storage.get_crypto(iurl) expect(got).not_to_be_null() expect(got).not_to_be_an_error() expect(got).to_equal("ACME-SEC")
async def test_should_be_an_error(self): iurl = self.get_image_url("image_3.jpg") ibytes = self.get_image_bytes("image.jpg") storage = FileStorage(self.context) await storage.put(iurl, ibytes) msg = "STORES_CRYPTO_KEY_FOR_EACH_IMAGE can't be True if no SECURITY_KEY specified" with expect.error_to_happen( RuntimeError, message=msg, ): await storage.put_crypto(iurl)
async def test_cannot_get_expired_1_day_old_image(self): iurl = self.get_image_url("image_2.jpg") ibytes = self.get_image_bytes("image.jpg") storage = FileStorage(self.context) await storage.put(iurl, ibytes) current_timestamp = (datetime.utcnow() - datetime(1970, 1, 1)).total_seconds() new_mtime = current_timestamp - 60 * 60 * 24 with mock.patch( "thumbor.storages.file_storage.getmtime", return_value=new_mtime ): got = await storage.get(iurl) expect(got).to_be_null() expect(got).not_to_be_an_error()
async def test_can_store_images_in_same_folder(self): iurl = self.get_image_url("image_999.jpg") other_iurl = iurl.replace("/some/", "/some_other/") root_path = join(self.config.FILE_STORAGE_ROOT_PATH, dirname(other_iurl)) if exists(root_path): shutil.rmtree(root_path) storage = FileStorage(self.context) ibytes = self.get_image_bytes("image.jpg") await storage.put(other_iurl.replace("999", "998"), ibytes) await storage.put(other_iurl, ibytes) got = await storage.get(other_iurl) expect(got).not_to_be_null() expect(got).not_to_be_an_error()
def test_can_store_images_in_same_folder(self): iurl = self.get_image_url('image_999.jpg') other_iurl = iurl.replace('/some/', '/some_other/') root_path = join(self.config.FILE_STORAGE_ROOT_PATH, dirname(other_iurl)) if exists(root_path): shutil.rmtree(root_path) storage = FileStorage(self.context) ibytes = self.get_image_bytes('image.jpg') storage.put(other_iurl.replace('999', '998'), ibytes) storage.put(other_iurl, ibytes) got = yield storage.get(other_iurl) expect(got).not_to_be_null() expect(got).not_to_be_an_error()
def topic(self): config = Config( FILE_STORAGE_ROOT_PATH="/tmp/thumbor/file_storage/") storage = FileStorage( Context(config=config, server=get_server('ACME-SEC'))) return storage.get_detector_data(IMAGE_URL % 10000)
async def test_creates_root_path_if_none_found(self): storage = FileStorage(self.context) storage.ensure_dir(self.config.FILE_STORAGE_ROOT_PATH) expect(exists(self.config.FILE_STORAGE_ROOT_PATH)).to_be_true()
async def test_getting_crypto_for_a_new_image_returns_none(self): iurl = self.get_image_url("image_9999.jpg") storage = FileStorage(self.context) got = await storage.get_crypto(iurl) expect(got).to_be_null()
async def test_detector_returns_none_if_no_detector_data(self): iurl = self.get_image_url("image_10000.jpg") storage = FileStorage(self.context) got = await storage.get_detector_data(iurl) expect(got).to_be_null()