Jul 14 - Using CDN - Phase 4a

This commit is contained in:
2026-07-14 13:35:34 -04:00
parent 9d5a280ca6
commit 2d87a15b0d
4 changed files with 56 additions and 10 deletions
+9 -6
View File
@@ -76,10 +76,12 @@ class LocalBackend:
def abs_local_path(self, key):
return os.path.normpath(os.path.join(self._static_folder(), key))
def media_url(self, key):
def media_url(self, key, external=False):
if not key:
return ''
return url_for('static', filename=key)
# external=True yields an absolute URL (scheme+host) for API responses
# consumed off-origin (the iPad); templates call with external=False.
return url_for('static', filename=key, _external=external)
def read(self, key):
with open(self.abs_local_path(key), 'rb') as fh:
@@ -164,13 +166,14 @@ class S3Backend:
# not exist) so transition code / callers can still reference it.
return self._local.abs_local_path(key)
def media_url(self, key):
def media_url(self, key, external=False):
if not key:
return ''
if self.fallback and not self._head(key):
# Object not in R2 yet — serve the local copy during transition.
if self._local.exists(key):
return self._local.media_url(key)
return self._local.media_url(key, external=external)
# Presigned R2 URLs are always absolute; the external flag is moot.
return self._client.generate_presigned_url(
'get_object',
Params={'Bucket': self.bucket, 'Key': key},
@@ -259,8 +262,8 @@ def save(file_obj, subfolder):
return get_backend().save(file_obj, subfolder)
def media_url(key):
return get_backend().media_url(key)
def media_url(key, external=False):
return get_backend().media_url(key, external=external)
def read(key):