marazmiki / django-selectel-storage Goto Github PK
View Code? Open in Web Editor NEWLet you use the Selectel Cloud as a storage backend of your Django application.
Home Page: https://pypi.org/project/django-selectel-storage/
License: MIT License
Let you use the Selectel Cloud as a storage backend of your Django application.
Home Page: https://pypi.org/project/django-selectel-storage/
License: MIT License
Hi. I'm using your storage as a default file storage. I'm reading file content in some celery tasks and everything works ok, but after some moment I'm starting to get HTTP 401 Error. After restarting celery the error disappears but on the next day it's come back.
It's looks like your Auth class for some reason doesn't reauthenticate after token expired. It's weird because the container is public and file content can be accessed without authentication.
Stacktrace (most recent call last):
File "mail/tasks.py", line 46, in send_email
content = attachment.file.read()
File "django/core/files/utils.py", line 16, in <lambda>
read = property(lambda self: self.file.read)
File "django/db/models/fields/files.py", line 43, in _get_file
self._file = self.storage.open(self.name, 'rb')
File "queued_storage/backends.py", line 172, in open
return self.get_storage(name).open(name, mode)
File "django/core/files/storage.py", line 36, in open
return self._open(name, mode)
File "django_selectel_storage/storage.py", line 13, in _open
return base.ContentFile(self.container.open(name).read())
File "django_selectel_storage/selectel.py", line 110, in open
stream=True).raw
File "django_selectel_storage/selectel.py", line 106, in perform_request
**kwargs)
File "django_selectel_storage/selectel.py", line 79, in perform_request
resp.raise_for_status()
File "requests/models.py", line 941, in raise_for_status
raise HTTPError(http_error_msg, response=self)
401 Client Error: Unauthorized for url: https://144411.selcdn.ru/3dplitka_media/uploads/organizations/requisites/Hafizova.docx
I'm using Python 3.7.6 with Django 2.2.12 and django-selectel-storage 1.0.0
Есть ли поддержка сохранения/раздачи django static в библиотеке?
Traceback (most recent call last):
File "./manage.py", line 4, in <module>
main()
...
File "/opt/vluki/vluki/base/management/commands/cdn_sync.py", line 41, in handle
if cdn_storage.exists(cdn_filename):
File "/usr/local/lib/python2.7/dist-packages/django_selectel_storage/storage.py", line 98, in exists
self.container.info(self._name(name))
File "/usr/local/lib/python2.7/dist-packages/selectel/storage.py", line 234, in method
return fn(self.name, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/selectel/storage.py", line 15, in wrapper
return fn(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/selectel/storage.py", line 190, in info
"downloads": int(r.headers["X-Object-Downloads"])
File "/usr/local/lib/python2.7/dist-packages/requests/structures.py", line 54, in __getitem__
return self._store[key.lower()][1]
KeyError: 'x-object-downloads'
Добрый день.
Реализована ли поддержка загрузки файлов при вызове collectstatic?
Запускаю collectstatic --no-input и после загрузки нескольких файлов возникает:
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 107, in collect
handler(path, prefixed_path, storage)
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 325, in copy_file
if not self.delete_file(path, prefixed_path, source_storage):
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 275, in delete_file
self.storage.delete(prefixed_path)
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django_selectel_storage/storage.py", line 85, in delete
self.container.remove(self._name(name), force=True)
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 260, in method
return fn(self.name, *args, **kwargs)
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 22, in wrapper
raise err
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 16, in wrapper
return fn(storage, *args, **kwargs)
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 176, in remove
r.raise_for_status()
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/requests/models.py", line 844, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 507 Server Error: status code 507 for url: https://187509.selcdn.ru/community/img/info_communities_2x.jpg
Судя по этому стэктрейсу файл удаляется при том, что контейнер совершенно пустой на момент запуска collectstatic.
А если вызвать команду с ключом --clear:
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 176, in handle
collected = self.collect()
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 89, in collect
self.clear_dir('')
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 210, in clear_dir
if not self.storage.exists(path):
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django_selectel_storage/storage.py", line 89, in exists
self.container.info(self._name(name))
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 260, in method
return fn(self.name, *args, **kwargs)
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 16, in wrapper
return fn(storage, *args, **kwargs)
File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 200, in info
assert r.status_code == (200 if path else 204)
AssertionError
>>> fix_site_offer(135406)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/aggregator/aggregator/src/apps/images/utils.py", line 218, in fix_site_offer
if not default_storage.exists('%s' % image.image):
File "/home/aggregator/aggregator/.env/local/lib/python2.7/site-packages/django_selectel_storage/storage.py", line 89, in exists
self.container.info(self._name(name))
File "/home/aggregator/aggregator/.env/local/lib/python2.7/site-packages/selectel/storage.py", line 213, in method
return fn(self.name, *args, **kwargs)
File "/home/aggregator/aggregator/.env/local/lib/python2.7/site-packages/selectel/storage.py", line 13, in wrapper
return fn(*args, **kwargs)
File "/home/aggregator/aggregator/.env/local/lib/python2.7/site-packages/selectel/storage.py", line 162, in info
dt = datetime.strptime(r.headers["Last-Modified"],
File "/home/aggregator/aggregator/.env/local/lib/python2.7/site-packages/requests/structures.py", line 54, in __getitem__
return self._store[key.lower()][1]
KeyError: 'last-modified'
Привет, Михаил! Мне нужно при выгрузке файлов добавлять метаданные (заголовки для Content-Disposition).
Предлагаю сделать так, как реализовано на амазоновской либе (см. тут )
Настройка AWS_S3_METADATA.
Как считаешь? Могу сделать пулл реквест
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.