evennia/docs/1.0-dev/_modules/evennia/contrib/awsstorage/tests.html
2021-02-27 20:21:31 +01:00

696 lines
No EOL
107 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.contrib.awsstorage.tests &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/underscore.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script src="../../../../_static/language_data.js"></script>
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.awsstorage.tests</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.contrib.awsstorage.tests</h1><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">unittest</span> <span class="kn">import</span> <span class="n">skipIf</span>
<span class="kn">from</span> <span class="nn">django.test</span> <span class="kn">import</span> <span class="n">override_settings</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="kn">import</span> <span class="n">ImproperlyConfigured</span>
<span class="kn">from</span> <span class="nn">django.core.files.base</span> <span class="kn">import</span> <span class="n">ContentFile</span>
<span class="kn">from</span> <span class="nn">django.test</span> <span class="kn">import</span> <span class="n">TestCase</span>
<span class="kn">from</span> <span class="nn">django.utils.timezone</span> <span class="kn">import</span> <span class="n">is_aware</span><span class="p">,</span> <span class="n">utc</span>
<span class="kn">import</span> <span class="nn">datetime</span><span class="o">,</span> <span class="nn">gzip</span><span class="o">,</span> <span class="nn">pickle</span><span class="o">,</span> <span class="nn">threading</span>
<span class="kn">from</span> <span class="nn">botocore.exceptions</span> <span class="kn">import</span> <span class="n">ClientError</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.awsstorage</span> <span class="kn">import</span> <span class="n">aws_s3_cdn</span> <span class="k">as</span> <span class="n">s3boto3</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">django.utils.six.moves.urllib</span> <span class="kn">import</span> <span class="n">parse</span> <span class="k">as</span> <span class="n">urlparse</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">urllib</span> <span class="kn">import</span> <span class="n">parse</span> <span class="k">as</span> <span class="n">urlparse</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">unittest</span> <span class="kn">import</span> <span class="n">mock</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> <span class="c1"># Python 3.2 and below</span>
<span class="kn">import</span> <span class="nn">mock</span>
<div class="viewcode-block" id="S3Boto3TestCase"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3TestCase">[docs]</a><span class="k">class</span> <span class="nc">S3Boto3TestCase</span><span class="p">(</span><span class="n">TestCase</span><span class="p">):</span>
<div class="viewcode-block" id="S3Boto3TestCase.setUp"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3TestCase.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">(</span><span class="n">access_key</span><span class="o">=</span><span class="s2">&quot;foo&quot;</span><span class="p">,</span> <span class="n">secret_key</span><span class="o">=</span><span class="s2">&quot;bar&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span></div></div>
<div class="viewcode-block" id="S3Boto3StorageTests"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests">[docs]</a><span class="k">class</span> <span class="nc">S3Boto3StorageTests</span><span class="p">(</span><span class="n">S3Boto3TestCase</span><span class="p">):</span>
<div class="viewcode-block" id="S3Boto3StorageTests.test_clean_name"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_clean_name">[docs]</a> <span class="k">def</span> <span class="nf">test_clean_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test the base case of _clean_name</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="s2">&quot;path/to/somewhere&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;path/to/somewhere&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_clean_name_normalize"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_clean_name_normalize">[docs]</a> <span class="k">def</span> <span class="nf">test_clean_name_normalize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test the normalization of _clean_name</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="s2">&quot;path/to/../somewhere&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;path/somewhere&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_clean_name_trailing_slash"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_clean_name_trailing_slash">[docs]</a> <span class="k">def</span> <span class="nf">test_clean_name_trailing_slash</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test the _clean_name when the path has a trailing slash</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="s2">&quot;path/to/somewhere/&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;path/to/somewhere/&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_clean_name_windows"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_clean_name_windows">[docs]</a> <span class="k">def</span> <span class="nf">test_clean_name_windows</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test the _clean_name when the path has a trailing slash</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="s2">&quot;path</span><span class="se">\\</span><span class="s2">to</span><span class="se">\\</span><span class="s2">somewhere&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;path/to/somewhere&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_pickle_with_bucket"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_pickle_with_bucket">[docs]</a> <span class="k">def</span> <span class="nf">test_pickle_with_bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test that the storage can be pickled with a bucket attached</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Ensure the bucket has been used</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_bucket</span><span class="p">)</span>
<span class="c1"># Can&#39;t pickle MagicMock, but you can&#39;t pickle a real Bucket object either</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="p">)</span>
<span class="n">new_storage</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsInstance</span><span class="p">(</span><span class="n">new_storage</span><span class="o">.</span><span class="n">_connections</span><span class="p">,</span> <span class="n">threading</span><span class="o">.</span><span class="n">local</span><span class="p">)</span>
<span class="c1"># Put the mock connection back in</span>
<span class="n">new_storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">new_storage</span><span class="o">.</span><span class="n">_bucket</span><span class="p">)</span>
<span class="n">new_storage</span><span class="o">.</span><span class="n">bucket</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">new_storage</span><span class="o">.</span><span class="n">_bucket</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_pickle_without_bucket"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_pickle_without_bucket">[docs]</a> <span class="k">def</span> <span class="nf">test_pickle_without_bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test that the storage can be pickled, without a bucket instance</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Can&#39;t pickle a threadlocal</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="p">)</span>
<span class="n">new_storage</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsInstance</span><span class="p">(</span><span class="n">new_storage</span><span class="o">.</span><span class="n">_connections</span><span class="p">,</span> <span class="n">threading</span><span class="o">.</span><span class="n">local</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_url_slashes"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_url_slashes">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_url_slashes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test URL generation.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">custom_domain</span> <span class="o">=</span> <span class="s2">&quot;example.com&quot;</span>
<span class="c1"># We expect no leading slashes in the path,</span>
<span class="c1"># and trailing slashes should be preserved.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="s2">&quot;https://example.com/&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">&quot;path&quot;</span><span class="p">),</span> <span class="s2">&quot;https://example.com/path&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">&quot;path/&quot;</span><span class="p">),</span> <span class="s2">&quot;https://example.com/path/&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">&quot;path/1&quot;</span><span class="p">),</span> <span class="s2">&quot;https://example.com/path/1&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">&quot;path/1/&quot;</span><span class="p">),</span> <span class="s2">&quot;https://example.com/path/1/&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_save">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test saving a file</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_storage_save.txt&quot;</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">&quot;new content&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">content</span><span class="p">,</span> <span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;text/plain&quot;</span><span class="p">,</span> <span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,}</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save_with_acl"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_save_with_acl">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save_with_acl</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test saving a file with user defined ACL.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_storage_save.txt&quot;</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">&quot;new content&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span> <span class="o">=</span> <span class="s2">&quot;private&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">content</span><span class="p">,</span> <span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;text/plain&quot;</span><span class="p">,</span> <span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="s2">&quot;private&quot;</span><span class="p">,}</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_content_type"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_content_type">[docs]</a> <span class="k">def</span> <span class="nf">test_content_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test saving a file with a None content type.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_image.jpg&quot;</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">&quot;data&quot;</span><span class="p">)</span>
<span class="n">content</span><span class="o">.</span><span class="n">content_type</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">content</span><span class="p">,</span> <span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;image/jpeg&quot;</span><span class="p">,</span> <span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,}</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save_gzipped"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_save_gzipped">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save_gzipped</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test saving a gzipped file</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_storage_save.gz&quot;</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">&quot;I am gzip&#39;d&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">content</span><span class="p">,</span>
<span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;application/octet-stream&quot;</span><span class="p">,</span>
<span class="s2">&quot;ContentEncoding&quot;</span><span class="p">:</span> <span class="s2">&quot;gzip&quot;</span><span class="p">,</span>
<span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save_gzip"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_save_gzip">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save_gzip</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test saving a file with gzip enabled.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">gzip</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_storage_save.css&quot;</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">&quot;I should be gzip&#39;d&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">mock</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
<span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;text/css&quot;</span><span class="p">,</span>
<span class="s2">&quot;ContentEncoding&quot;</span><span class="p">:</span> <span class="s2">&quot;gzip&quot;</span><span class="p">,</span>
<span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">call_args</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">zfile</span> <span class="o">=</span> <span class="n">gzip</span><span class="o">.</span><span class="n">GzipFile</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;rb&quot;</span><span class="p">,</span> <span class="n">fileobj</span><span class="o">=</span><span class="n">content</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">zfile</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="sa">b</span><span class="s2">&quot;I should be gzip&#39;d&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save_gzip_twice"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_save_gzip_twice">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save_gzip_twice</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test saving the same file content twice with gzip enabled.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Given</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">gzip</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_storage_save.css&quot;</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">&quot;I should be gzip&#39;d&quot;</span><span class="p">)</span>
<span class="c1"># When</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s2">&quot;test_storage_save_2.css&quot;</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="c1"># Then</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">mock</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
<span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;text/css&quot;</span><span class="p">,</span>
<span class="s2">&quot;ContentEncoding&quot;</span><span class="p">:</span> <span class="s2">&quot;gzip&quot;</span><span class="p">,</span>
<span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">call_args</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">zfile</span> <span class="o">=</span> <span class="n">gzip</span><span class="o">.</span><span class="n">GzipFile</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;rb&quot;</span><span class="p">,</span> <span class="n">fileobj</span><span class="o">=</span><span class="n">content</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">zfile</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="sa">b</span><span class="s2">&quot;I should be gzip&#39;d&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_compress_content_len"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_compress_content_len">[docs]</a> <span class="k">def</span> <span class="nf">test_compress_content_len</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test that file returned by _compress_content() is readable.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">gzip</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">&quot;I should be gzip&#39;d&quot;</span><span class="p">)</span>
<span class="n">content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_compress_content</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">content</span><span class="o">.</span><span class="n">read</span><span class="p">())</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_open_write"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_open_write">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_open_write</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test opening a file in write mode</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_open_for_writïng.txt&quot;</span>
<span class="n">content</span> <span class="o">=</span> <span class="s2">&quot;new content&quot;</span>
<span class="c1"># Set the encryption flag used for multipart uploads</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">encryption</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">reduced_redundancy</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span> <span class="o">=</span> <span class="s2">&quot;public-read&quot;</span>
<span class="n">file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="c1"># Set the name of the mock object</span>
<span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">name</span>
<span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
<span class="n">obj</span><span class="o">.</span><span class="n">initiate_multipart_upload</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">ACL</span><span class="o">=</span><span class="s2">&quot;public-read&quot;</span><span class="p">,</span>
<span class="n">ContentType</span><span class="o">=</span><span class="s2">&quot;text/plain&quot;</span><span class="p">,</span>
<span class="n">ServerSideEncryption</span><span class="o">=</span><span class="s2">&quot;AES256&quot;</span><span class="p">,</span>
<span class="n">StorageClass</span><span class="o">=</span><span class="s2">&quot;REDUCED_REDUNDANCY&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Save the internal file before closing</span>
<span class="n">multipart</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">initiate_multipart_upload</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">multipart</span><span class="o">.</span><span class="n">parts</span><span class="o">.</span><span class="n">all</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="p">[</span><span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">(</span><span class="n">e_tag</span><span class="o">=</span><span class="s2">&quot;123&quot;</span><span class="p">,</span> <span class="n">part_number</span><span class="o">=</span><span class="mi">1</span><span class="p">)]</span>
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">multipart</span><span class="o">.</span><span class="n">Part</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">part</span> <span class="o">=</span> <span class="n">multipart</span><span class="o">.</span><span class="n">Part</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">part</span><span class="o">.</span><span class="n">upload</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">Body</span><span class="o">=</span><span class="n">content</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
<span class="n">multipart</span><span class="o">.</span><span class="n">complete</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
<span class="n">MultipartUpload</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;Parts&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;ETag&quot;</span><span class="p">:</span> <span class="s2">&quot;123&quot;</span><span class="p">,</span> <span class="s2">&quot;PartNumber&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">}]}</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_open_no_write"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_open_no_write">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_open_no_write</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test opening file in write mode and closing without writing.</span>
<span class="sd"> A file should be created as by obj.put(...).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_open_no_write.txt&quot;</span>
<span class="c1"># Set the encryption flag used for puts</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">encryption</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">reduced_redundancy</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span> <span class="o">=</span> <span class="s2">&quot;public-read&quot;</span>
<span class="n">file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">load</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="n">ClientError</span><span class="p">(</span>
<span class="p">{</span><span class="s2">&quot;Error&quot;</span><span class="p">:</span> <span class="p">{},</span> <span class="s2">&quot;ResponseMetadata&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;HTTPStatusCode&quot;</span><span class="p">:</span> <span class="mi">404</span><span class="p">}},</span> <span class="s2">&quot;head_bucket&quot;</span>
<span class="p">)</span>
<span class="c1"># Set the name of the mock object</span>
<span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">name</span>
<span class="c1"># Save the internal file before closing</span>
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">obj</span><span class="o">.</span><span class="n">load</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">()</span>
<span class="n">obj</span><span class="o">.</span><span class="n">put</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
<span class="n">ACL</span><span class="o">=</span><span class="s2">&quot;public-read&quot;</span><span class="p">,</span>
<span class="n">Body</span><span class="o">=</span><span class="sa">b</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">ContentType</span><span class="o">=</span><span class="s2">&quot;text/plain&quot;</span><span class="p">,</span>
<span class="n">ServerSideEncryption</span><span class="o">=</span><span class="s2">&quot;AES256&quot;</span><span class="p">,</span>
<span class="n">StorageClass</span><span class="o">=</span><span class="s2">&quot;REDUCED_REDUNDANCY&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_open_no_overwrite_existing"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_open_no_overwrite_existing">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_open_no_overwrite_existing</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test opening an existing file in write mode and closing without writing.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_open_no_overwrite_existing.txt&quot;</span>
<span class="c1"># Set the encryption flag used for puts</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">encryption</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">reduced_redundancy</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span> <span class="o">=</span> <span class="s2">&quot;public-read&quot;</span>
<span class="n">file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="c1"># Set the name of the mock object</span>
<span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">name</span>
<span class="c1"># Save the internal file before closing</span>
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">obj</span><span class="o">.</span><span class="n">load</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">()</span>
<span class="n">obj</span><span class="o">.</span><span class="n">put</span><span class="o">.</span><span class="n">assert_not_called</span><span class="p">()</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_write_beyond_buffer_size"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_write_beyond_buffer_size">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_write_beyond_buffer_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test writing content that exceeds the buffer size</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_open_for_writïng_beyond_buffer_size.txt&quot;</span>
<span class="c1"># Set the encryption flag used for multipart uploads</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">encryption</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">reduced_redundancy</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span> <span class="o">=</span> <span class="s2">&quot;public-read&quot;</span>
<span class="n">file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="c1"># Set the name of the mock object</span>
<span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">name</span>
<span class="c1"># Initiate the multipart upload</span>
<span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">obj</span><span class="o">.</span><span class="n">initiate_multipart_upload</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">ACL</span><span class="o">=</span><span class="s2">&quot;public-read&quot;</span><span class="p">,</span>
<span class="n">ContentType</span><span class="o">=</span><span class="s2">&quot;text/plain&quot;</span><span class="p">,</span>
<span class="n">ServerSideEncryption</span><span class="o">=</span><span class="s2">&quot;AES256&quot;</span><span class="p">,</span>
<span class="n">StorageClass</span><span class="o">=</span><span class="s2">&quot;REDUCED_REDUNDANCY&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">multipart</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">initiate_multipart_upload</span><span class="o">.</span><span class="n">return_value</span>
<span class="c1"># Write content at least twice as long as the buffer size</span>
<span class="n">written_content</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">counter</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">written_content</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">file</span><span class="o">.</span><span class="n">buffer_size</span><span class="p">:</span>
<span class="n">content</span> <span class="o">=</span> <span class="s2">&quot;hello, aws </span><span class="si">{counter}</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">counter</span><span class="o">=</span><span class="n">counter</span><span class="p">)</span>
<span class="c1"># Write more than just a few bytes in each iteration to keep the</span>
<span class="c1"># test reasonably fast</span>
<span class="n">content</span> <span class="o">+=</span> <span class="s2">&quot;*&quot;</span> <span class="o">*</span> <span class="nb">int</span><span class="p">(</span><span class="n">file</span><span class="o">.</span><span class="n">buffer_size</span> <span class="o">/</span> <span class="mi">10</span><span class="p">)</span>
<span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
<span class="n">written_content</span> <span class="o">+=</span> <span class="n">content</span>
<span class="n">counter</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="c1"># Save the internal file before closing</span>
<span class="n">multipart</span><span class="o">.</span><span class="n">parts</span><span class="o">.</span><span class="n">all</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">(</span><span class="n">e_tag</span><span class="o">=</span><span class="s2">&quot;123&quot;</span><span class="p">,</span> <span class="n">part_number</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span>
<span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">(</span><span class="n">e_tag</span><span class="o">=</span><span class="s2">&quot;456&quot;</span><span class="p">,</span> <span class="n">part_number</span><span class="o">=</span><span class="mi">2</span><span class="p">),</span>
<span class="p">]</span>
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertListEqual</span><span class="p">(</span><span class="n">multipart</span><span class="o">.</span><span class="n">Part</span><span class="o">.</span><span class="n">call_args_list</span><span class="p">,</span> <span class="p">[</span><span class="n">mock</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">mock</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="mi">2</span><span class="p">)])</span>
<span class="n">part</span> <span class="o">=</span> <span class="n">multipart</span><span class="o">.</span><span class="n">Part</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">uploaded_content</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">args_list</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">&quot;Body&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">args_list</span> <span class="ow">in</span> <span class="n">part</span><span class="o">.</span><span class="n">upload</span><span class="o">.</span><span class="n">call_args_list</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">uploaded_content</span><span class="p">,</span> <span class="n">written_content</span><span class="p">)</span>
<span class="n">multipart</span><span class="o">.</span><span class="n">complete</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
<span class="n">MultipartUpload</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;Parts&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;ETag&quot;</span><span class="p">:</span> <span class="s2">&quot;123&quot;</span><span class="p">,</span> <span class="s2">&quot;PartNumber&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span> <span class="p">{</span><span class="s2">&quot;ETag&quot;</span><span class="p">:</span> <span class="s2">&quot;456&quot;</span><span class="p">,</span> <span class="s2">&quot;PartNumber&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">},]</span>
<span class="p">}</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_auto_creating_bucket"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_auto_creating_bucket">[docs]</a> <span class="k">def</span> <span class="nf">test_auto_creating_bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">auto_create_bucket</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">Bucket</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">Bucket</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">Bucket</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">region_name</span> <span class="o">=</span> <span class="s2">&quot;sa-east-1&quot;</span>
<span class="n">Bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_bucket</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="n">ClientError</span><span class="p">(</span>
<span class="p">{</span><span class="s2">&quot;Error&quot;</span><span class="p">:</span> <span class="p">{},</span> <span class="s2">&quot;ResponseMetadata&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;HTTPStatusCode&quot;</span><span class="p">:</span> <span class="mi">404</span><span class="p">}},</span> <span class="s2">&quot;head_bucket&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_get_or_create_bucket</span><span class="p">(</span><span class="s2">&quot;testbucketname&quot;</span><span class="p">)</span>
<span class="n">Bucket</span><span class="o">.</span><span class="n">create</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
<span class="n">ACL</span><span class="o">=</span><span class="s2">&quot;public-read&quot;</span><span class="p">,</span> <span class="n">CreateBucketConfiguration</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;LocationConstraint&quot;</span><span class="p">:</span> <span class="s2">&quot;sa-east-1&quot;</span><span class="p">,}</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_auto_creating_bucket_with_acl"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_auto_creating_bucket_with_acl">[docs]</a> <span class="k">def</span> <span class="nf">test_auto_creating_bucket_with_acl</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">auto_create_bucket</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket_acl</span> <span class="o">=</span> <span class="s2">&quot;public-read&quot;</span>
<span class="n">Bucket</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">Bucket</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">Bucket</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">region_name</span> <span class="o">=</span> <span class="s2">&quot;sa-east-1&quot;</span>
<span class="n">Bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_bucket</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="n">ClientError</span><span class="p">(</span>
<span class="p">{</span><span class="s2">&quot;Error&quot;</span><span class="p">:</span> <span class="p">{},</span> <span class="s2">&quot;ResponseMetadata&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;HTTPStatusCode&quot;</span><span class="p">:</span> <span class="mi">404</span><span class="p">}},</span> <span class="s2">&quot;head_bucket&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_get_or_create_bucket</span><span class="p">(</span><span class="s2">&quot;testbucketname&quot;</span><span class="p">)</span>
<span class="n">Bucket</span><span class="o">.</span><span class="n">create</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
<span class="n">ACL</span><span class="o">=</span><span class="s2">&quot;public-read&quot;</span><span class="p">,</span> <span class="n">CreateBucketConfiguration</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;LocationConstraint&quot;</span><span class="p">:</span> <span class="s2">&quot;sa-east-1&quot;</span><span class="p">,}</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_exists"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_exists">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">&quot;file.txt&quot;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">Bucket</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">,</span> <span class="n">Key</span><span class="o">=</span><span class="s2">&quot;file.txt&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_exists_false"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_exists_false">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_exists_false</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_object</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="n">ClientError</span><span class="p">(</span>
<span class="p">{</span><span class="s2">&quot;Error&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;Code&quot;</span><span class="p">:</span> <span class="s2">&quot;404&quot;</span><span class="p">,</span> <span class="s2">&quot;Message&quot;</span><span class="p">:</span> <span class="s2">&quot;Not Found&quot;</span><span class="p">}},</span> <span class="s2">&quot;HeadObject&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">&quot;file.txt&quot;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">Bucket</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">,</span> <span class="n">Key</span><span class="o">=</span><span class="s2">&quot;file.txt&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_exists_doesnt_create_bucket"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_exists_doesnt_create_bucket">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_exists_doesnt_create_bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">with</span> <span class="n">mock</span><span class="o">.</span><span class="n">patch</span><span class="o">.</span><span class="n">object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="p">,</span> <span class="s2">&quot;_get_or_create_bucket&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">method</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">&quot;file.txt&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">method</span><span class="o">.</span><span class="n">called</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_delete"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_delete">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="s2">&quot;path/to/file.txt&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="s2">&quot;path/to/file.txt&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">delete</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">()</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_listdir_base"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_listdir_base">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_listdir_base</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Files:</span>
<span class="c1"># some/path/1.txt</span>
<span class="c1"># 2.txt</span>
<span class="c1"># other/path/3.txt</span>
<span class="c1"># 4.txt</span>
<span class="n">pages</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;CommonPrefixes&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;Prefix&quot;</span><span class="p">:</span> <span class="s2">&quot;some&quot;</span><span class="p">},</span> <span class="p">{</span><span class="s2">&quot;Prefix&quot;</span><span class="p">:</span> <span class="s2">&quot;other&quot;</span><span class="p">},],</span>
<span class="s2">&quot;Contents&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;2.txt&quot;</span><span class="p">},</span> <span class="p">{</span><span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;4.txt&quot;</span><span class="p">},],</span>
<span class="p">},</span>
<span class="p">]</span>
<span class="n">paginator</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
<span class="n">paginator</span><span class="o">.</span><span class="n">paginate</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">pages</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">get_paginator</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">paginator</span>
<span class="n">dirs</span><span class="p">,</span> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">paginator</span><span class="o">.</span><span class="n">paginate</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">Bucket</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">Delimiter</span><span class="o">=</span><span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="n">Prefix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">dirs</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;some&quot;</span><span class="p">,</span> <span class="s2">&quot;other&quot;</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">files</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;2.txt&quot;</span><span class="p">,</span> <span class="s2">&quot;4.txt&quot;</span><span class="p">])</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_listdir_subdir"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_listdir_subdir">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_listdir_subdir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Files:</span>
<span class="c1"># some/path/1.txt</span>
<span class="c1"># some/2.txt</span>
<span class="n">pages</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;CommonPrefixes&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;Prefix&quot;</span><span class="p">:</span> <span class="s2">&quot;some/path&quot;</span><span class="p">},],</span> <span class="s2">&quot;Contents&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;some/2.txt&quot;</span><span class="p">},],},</span>
<span class="p">]</span>
<span class="n">paginator</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
<span class="n">paginator</span><span class="o">.</span><span class="n">paginate</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">pages</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">get_paginator</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">paginator</span>
<span class="n">dirs</span><span class="p">,</span> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="s2">&quot;some/&quot;</span><span class="p">)</span>
<span class="n">paginator</span><span class="o">.</span><span class="n">paginate</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">Bucket</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">Delimiter</span><span class="o">=</span><span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="n">Prefix</span><span class="o">=</span><span class="s2">&quot;some/&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">dirs</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;path&quot;</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">files</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;2.txt&quot;</span><span class="p">])</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_size"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_size">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">content_length</span> <span class="o">=</span> <span class="mi">4098</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;file.txt&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">obj</span><span class="o">.</span><span class="n">content_length</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_mtime"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_mtime">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_mtime</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Test both USE_TZ cases</span>
<span class="k">for</span> <span class="n">use_tz</span> <span class="ow">in</span> <span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">(</span><span class="n">USE_TZ</span><span class="o">=</span><span class="n">use_tz</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_test_storage_mtime</span><span class="p">(</span><span class="n">use_tz</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_test_storage_mtime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">use_tz</span><span class="p">):</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">last_modified</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">utc</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;file.txt&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span>
<span class="n">is_aware</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">modified_time</span><span class="p">(</span><span class="n">name</span><span class="p">)),</span>
<span class="s2">&quot;Naive datetime object expected from modified_time()&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIs</span><span class="p">(</span>
<span class="n">settings</span><span class="o">.</span><span class="n">USE_TZ</span><span class="p">,</span>
<span class="n">is_aware</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">get_modified_time</span><span class="p">(</span><span class="n">name</span><span class="p">)),</span>
<span class="s2">&quot;</span><span class="si">{}</span><span class="s2"> datetime object expected from get_modified_time() when USE_TZ=</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="p">(</span><span class="s2">&quot;Naive&quot;</span><span class="p">,</span> <span class="s2">&quot;Aware&quot;</span><span class="p">)[</span><span class="n">settings</span><span class="o">.</span><span class="n">USE_TZ</span><span class="p">],</span> <span class="n">settings</span><span class="o">.</span><span class="n">USE_TZ</span>
<span class="p">),</span>
<span class="p">)</span>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_url"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_url">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_storage_size.txt&quot;</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;http://aws.amazon.com/</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">generate_presigned_url</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">url</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;bucket&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">url</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">generate_presigned_url</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="s2">&quot;get_object&quot;</span><span class="p">,</span>
<span class="n">Params</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;Bucket&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="n">name</span><span class="p">},</span>
<span class="n">ExpiresIn</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">querystring_expire</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">custom_expire</span> <span class="o">=</span> <span class="mi">123</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">expire</span><span class="o">=</span><span class="n">custom_expire</span><span class="p">),</span> <span class="n">url</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">generate_presigned_url</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="s2">&quot;get_object&quot;</span><span class="p">,</span>
<span class="n">Params</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;Bucket&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="n">name</span><span class="p">},</span>
<span class="n">ExpiresIn</span><span class="o">=</span><span class="n">custom_expire</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_generated_url_is_encoded"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_generated_url_is_encoded">[docs]</a> <span class="k">def</span> <span class="nf">test_generated_url_is_encoded</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">custom_domain</span> <span class="o">=</span> <span class="s2">&quot;mock.cloudfront.net&quot;</span>
<span class="n">filename</span> <span class="o">=</span> <span class="s2">&quot;whacky &amp; filename.mp4&quot;</span>
<span class="n">url</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
<span class="n">parsed_url</span> <span class="o">=</span> <span class="n">urlparse</span><span class="o">.</span><span class="n">urlparse</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">parsed_url</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;/whacky</span><span class="si">%20%</span><span class="s2">26</span><span class="si">%20f</span><span class="s2">ilename.mp4&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">generate_presigned_url</span><span class="o">.</span><span class="n">called</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_special_characters"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_special_characters">[docs]</a> <span class="k">def</span> <span class="nf">test_special_characters</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">custom_domain</span> <span class="o">=</span> <span class="s2">&quot;mock.cloudfront.net&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;ãlöhâ.jpg&quot;</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">&quot;new content&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">url</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">parsed_url</span> <span class="o">=</span> <span class="n">urlparse</span><span class="o">.</span><span class="n">urlparse</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">parsed_url</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;/%C3%A3l%C3%B6h%C3%A2.jpg&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_strip_signing_parameters"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_strip_signing_parameters">[docs]</a> <span class="k">def</span> <span class="nf">test_strip_signing_parameters</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">expected</span> <span class="o">=</span> <span class="s2">&quot;http://bucket.s3-aws-region.amazonaws.com/foo/bar&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_strip_signing_parameters</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">%s</span><span class="s2">?X-Amz-Date=12345678&amp;X-Amz-Signature=Signature&quot;</span> <span class="o">%</span> <span class="n">expected</span>
<span class="p">),</span>
<span class="n">expected</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_strip_signing_parameters</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">%s</span><span class="s2">?expires=12345678&amp;signature=Signature&quot;</span> <span class="o">%</span> <span class="n">expected</span>
<span class="p">),</span>
<span class="n">expected</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_connection_threading"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_connection_threading">[docs]</a> <span class="nd">@skipIf</span><span class="p">(</span><span class="n">threading</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;Test requires threading&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test_connection_threading</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">connections</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">def</span> <span class="nf">thread_storage_connection</span><span class="p">():</span>
<span class="n">connections</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">connection</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">):</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">thread_storage_connection</span><span class="p">)</span>
<span class="n">t</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="n">t</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
<span class="c1"># Connection for each thread needs to be unique</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNot</span><span class="p">(</span><span class="n">connections</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">connections</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_location_leading_slash"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_location_leading_slash">[docs]</a> <span class="k">def</span> <span class="nf">test_location_leading_slash</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">msg</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;S3Boto3Storage.location cannot begin with a leading slash. &quot;</span>
<span class="s2">&quot;Found &#39;/&#39;. Use &#39;&#39; instead.&quot;</span>
<span class="p">)</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="n">ImproperlyConfigured</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="n">msg</span><span class="p">):</span>
<span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">(</span><span class="n">location</span><span class="o">=</span><span class="s2">&quot;/&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_override_class_variable"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_override_class_variable">[docs]</a> <span class="k">def</span> <span class="nf">test_override_class_variable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">MyStorage1</span><span class="p">(</span><span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">):</span>
<span class="n">location</span> <span class="o">=</span> <span class="s2">&quot;foo1&quot;</span>
<span class="n">storage</span> <span class="o">=</span> <span class="n">MyStorage1</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="s2">&quot;foo1&quot;</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">MyStorage2</span><span class="p">(</span><span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">):</span>
<span class="n">location</span> <span class="o">=</span> <span class="s2">&quot;foo2&quot;</span>
<span class="n">storage</span> <span class="o">=</span> <span class="n">MyStorage2</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="s2">&quot;foo2&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_override_init_argument"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_override_init_argument">[docs]</a> <span class="k">def</span> <span class="nf">test_override_init_argument</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">storage</span> <span class="o">=</span> <span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">(</span><span class="n">location</span><span class="o">=</span><span class="s2">&quot;foo1&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="s2">&quot;foo1&quot;</span><span class="p">)</span>
<span class="n">storage</span> <span class="o">=</span> <span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">(</span><span class="n">location</span><span class="o">=</span><span class="s2">&quot;foo2&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="s2">&quot;foo2&quot;</span><span class="p">)</span></div></div>
</pre></div>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
<h3>Versions</h3>
<ul>
<li><a href="tests.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.awsstorage.tests</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>