Traceback Switch to copy-and-paste view
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/core/handlers/exception.py, line 55, in innerreturn inner
else:
@wraps(get_response)
def inner(request):
try:
response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^…
except Exception as exc:
response = response_for_exception(request, exc)
return response
return inner
Local vars
Variable Value exc FieldError("Cannot resolve keyword 'created_at' into field. Choices are: downloaded_at, entry, entry_id, id, user, user_id")get_response <bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x78ffeb4e7ce0>>
request <WSGIRequest: GET '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/'>
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/core/handlers/base.py, line 197, in _get_responseif response is None:
wrapped_callback = self.make_view_atomic(callback)
# If it is an asynchronous view, run it in a subthread.
if iscoroutinefunction(wrapped_callback):
wrapped_callback = async_to_sync(wrapped_callback)
try:
response = wrapped_callback(request, *callback_args, **callback_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^…
except Exception as e:
response = self.process_exception_by_middleware(e, request)
if response is None:
raise
# Complain if the view returned None (a common error).
Local vars
Variable Value callback <function View.as_view.<locals>.view at 0x78ffe794c900>
callback_args ()
callback_kwargs {'entry_id': UUID('354a22f1-6eb7-450d-bad0-2d8a70b985fc')}middleware_method <bound method CsrfViewMiddleware.process_view of <CsrfViewMiddleware get_response=convert_exception_to_response.<locals>.inner>>
request <WSGIRequest: GET '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/'>
response None
self <django.core.handlers.wsgi.WSGIHandler object at 0x78ffeb4e7ce0>
wrapped_callback <function View.as_view.<locals>.view at 0x78ffe794c900>
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/views/decorators/csrf.py, line 65, in _view_wrapperasync def _view_wrapper(request, *args, **kwargs):
return await view_func(request, *args, **kwargs)
else:
def _view_wrapper(request, *args, **kwargs):
return view_func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^…
_view_wrapper.csrf_exempt = True
return wraps(view_func)(_view_wrapper)
Local vars
Variable Value args ()
kwargs {'entry_id': UUID('354a22f1-6eb7-450d-bad0-2d8a70b985fc')}request <WSGIRequest: GET '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/'>
view_func <function View.as_view.<locals>.view at 0x78ffe7a2c680>
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/views/generic/base.py, line 105, in viewself = cls(**initkwargs)
self.setup(request, *args, **kwargs)
if not hasattr(self, "request"):
raise AttributeError(
"%s instance has no 'request' attribute. Did you override "
"setup() and forget to call super()?" % cls.__name__
)
return self.dispatch(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^…
view.view_class = cls
view.view_initkwargs = initkwargs
# __name__ and __qualname__ are intentionally left unchanged as
# view_class should be used to robustly determine the name of the view
Local vars
Variable Value args ()
cls <class 'storage.views.FileDownloadTimeSeriesView'>
initkwargs {}kwargs {'entry_id': UUID('354a22f1-6eb7-450d-bad0-2d8a70b985fc')}request <WSGIRequest: GET '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/'>
self <storage.views.FileDownloadTimeSeriesView object at 0x78ffe687e2d0>
-
/var/www/development/backend/venv/lib/python3.12/site-packages/rest_framework/views.py, line 515, in dispatchself.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
response = handler(request, *args, **kwargs)
except Exception as exc:
response = self.handle_exception(exc) ^^^^^^^^^^^^^^^^^^^^^^^^^^…
self.response = self.finalize_response(request, response, *args, **kwargs)
return self.response
def options(self, request, *args, **kwargs):
"""
Local vars
Variable Value args ()
handler <bound method FileDownloadTimeSeriesView.get of <storage.views.FileDownloadTimeSeriesView object at 0x78ffe687e2d0>>
kwargs {'entry_id': UUID('354a22f1-6eb7-450d-bad0-2d8a70b985fc')}request <rest_framework.request.Request: GET '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/'>
self <storage.views.FileDownloadTimeSeriesView object at 0x78ffe687e2d0>
-
/var/www/development/backend/venv/lib/python3.12/site-packages/rest_framework/views.py, line 475, in handle_exceptionexception_handler = self.get_exception_handler()
context = self.get_exception_handler_context()
response = exception_handler(exc, context)
if response is None:
self.raise_uncaught_exception(exc) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^…
response.exception = True
return response
def raise_uncaught_exception(self, exc):
if settings.DEBUG:
Local vars
Variable Value context {'args': (), 'kwargs': {'entry_id': UUID('354a22f1-6eb7-450d-bad0-2d8a70b985fc')}, 'request': <rest_framework.request.Request: GET '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/'>, 'view': <storage.views.FileDownloadTimeSeriesView object at 0x78ffe687e2d0>}exc FieldError("Cannot resolve keyword 'created_at' into field. Choices are: downloaded_at, entry, entry_id, id, user, user_id")exception_handler <function custom_exception_handler at 0x78ffe68594e0>
response None
self <storage.views.FileDownloadTimeSeriesView object at 0x78ffe687e2d0>
-
/var/www/development/backend/venv/lib/python3.12/site-packages/rest_framework/views.py, line 486, in raise_uncaught_exceptiondef raise_uncaught_exception(self, exc):
if settings.DEBUG:
request = self.request
renderer_format = getattr(request.accepted_renderer, 'format')
use_plaintext_traceback = renderer_format not in ('html', 'api', 'admin')request.force_plaintext_errors(use_plaintext_traceback)
raise exc ^^^^^^^^^…
# Note: Views are made CSRF exempt from within `as_view` as to prevent
# accidental removal of this exemption in cases where `dispatch` needs to
# be overridden.
def dispatch(self, request, *args, **kwargs):
"""
Local vars
Variable Value exc FieldError("Cannot resolve keyword 'created_at' into field. Choices are: downloaded_at, entry, entry_id, id, user, user_id")renderer_format 'json'
request <rest_framework.request.Request: GET '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/'>
self <storage.views.FileDownloadTimeSeriesView object at 0x78ffe687e2d0>
use_plaintext_traceback True
-
/var/www/development/backend/venv/lib/python3.12/site-packages/rest_framework/views.py, line 512, in dispatch# Get the appropriate handler method
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(),
self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
response = handler(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^…
except Exception as exc:
response = self.handle_exception(exc)
self.response = self.finalize_response(request, response, *args, **kwargs)
return self.response
Local vars
Variable Value args ()
handler <bound method FileDownloadTimeSeriesView.get of <storage.views.FileDownloadTimeSeriesView object at 0x78ffe687e2d0>>
kwargs {'entry_id': UUID('354a22f1-6eb7-450d-bad0-2d8a70b985fc')}request <rest_framework.request.Request: GET '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/'>
self <storage.views.FileDownloadTimeSeriesView object at 0x78ffe687e2d0>
-
/var/www/development/backend/storage/views.py, line 4639, in gettime_bucket = TruncHour("created_at")elif granularity == "month":
time_bucket = TruncMonth("created_at")else:
time_bucket = TruncDay("created_at")stats = (
qs.annotate(ts=time_bucket) ^^^^^^^^^^^^^^^^^^^^^^^^^^^…
.values("ts").annotate(downloads=Count("id")).order_by("ts"))
data = {
Local vars
Variable Value end None
entry_id UUID('354a22f1-6eb7-450d-bad0-2d8a70b985fc')granularity 'day'
qs <QuerySet []>
request <rest_framework.request.Request: GET '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/'>
self <storage.views.FileDownloadTimeSeriesView object at 0x78ffe687e2d0>
start None
time_bucket TruncDay(F(created_at))
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/db/models/query.py, line 1654, in annotatedef annotate(self, *args, **kwargs):
"""
Return a query set in which the returned objects have been annotated
with extra data or aggregations.
"""
self._not_support_combined_queries("annotate")
return self._annotate(args, kwargs, select=True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^…
def alias(self, *args, **kwargs):
"""
Return a query set with added aliases for extra data or aggregations.
"""
self._not_support_combined_queries("alias")
Local vars
Variable Value args ()
kwargs {'ts': TruncDay(F(created_at))}self <QuerySet []>
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/db/models/query.py, line 1706, in _annotateraise ValueError(
"The annotation '%s' conflicts with a field on "
"the model." % alias
)
if isinstance(annotation, FilteredRelation):
clone.query.add_filtered_relation(annotation, alias)
else:
clone.query.add_annotation( ^…
annotation,
alias,
select=select,
)
for alias, annotation in clone.query.annotations.items():
if alias in annotations and annotation.contains_aggregate:
Local vars
Variable Value alias 'ts'
annotation TruncDay(F(created_at))
annotations {'ts': TruncDay(F(created_at))}args ()
clone <QuerySet []>
kwargs {'ts': TruncDay(F(created_at))}names {'id', 'user', 'user_id', 'downloaded_at', 'entry_id', 'entry'}select True
self <QuerySet []>
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/db/models/sql/query.py, line 1218, in add_annotation"Column aliases cannot contain whitespace characters, hashes, "
"quotation marks, semicolons, or SQL comments."
)
def add_annotation(self, annotation, alias, select=True):
"""Add a single annotation expression to the Query."""
self.check_alias(alias)
annotation = annotation.resolve_expression(self, allow_joins=True, reuse=None) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^…
if select:
self.append_annotation_mask([alias])
else:
self.set_annotation_mask(set(self.annotation_select).difference({alias}))self.annotations[alias] = annotation
if select and self.selected:
Local vars
Variable Value alias 'ts'
annotation TruncDay(F(created_at))
select True
self <django.db.models.sql.query.Query object at 0x78ffe687e510>
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/db/models/functions/datetime.py, line 287, in resolve_expression"Trunc only valid on DateField, TimeField, or DateTimeField."
)
return sql, params
def resolve_expression(
self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False
):
copy = super().resolve_expression(…
query, allow_joins, reuse, summarize, for_save
)
field = copy.lhs.output_field
# DateTimeField is a subclass of DateField so this works for both.
if not isinstance(field, (DateField, TimeField)):
raise TypeError(
Local vars
Variable Value __class__ <class 'django.db.models.functions.datetime.TruncBase'>
allow_joins True
for_save False
query <django.db.models.sql.query.Query object at 0x78ffe687e510>
reuse None
self TruncDay(F(created_at))
summarize False
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/db/models/expressions.py, line 300, in resolve_expressionReturn: an Expression to be added to the query.
"""
c = self.copy()
c.is_summary = summarize
source_expressions = [
(
expr.resolve_expression(query, allow_joins, reuse, summarize, for_save) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^…
if expr is not None
else None
)
for expr in c.get_source_expressions()
]
if not self.allows_composite_expressions and any(
Local vars
Variable Value allow_joins True
c TruncDay(F(created_at))
for_save False
query <django.db.models.sql.query.Query object at 0x78ffe687e510>
reuse None
self TruncDay(F(created_at))
summarize False
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/db/models/expressions.py, line 902, in resolve_expression# Disable old-style iteration protocol inherited from implementing
# __getitem__() to prevent this method from hanging.
raise TypeError(f"argument of type '{self.__class__.__name__}' is not iterable")def resolve_expression(
self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False
):
return query.resolve_ref(self.name, allow_joins, reuse, summarize) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^…
def replace_expressions(self, replacements):
if (replacement := replacements.get(self)) is not None:
return replacement
field_name, *transforms = self.name.split(LOOKUP_SEP)
# Avoid unnecessarily looking up replacements with field_name again as
Local vars
Variable Value allow_joins True
for_save False
query <django.db.models.sql.query.Query object at 0x78ffe687e510>
reuse None
self F(created_at)
summarize False
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/db/models/sql/query.py, line 2050, in resolve_refelse:
field_list = name.split(LOOKUP_SEP)
annotation = self.annotations.get(field_list[0])
if annotation is not None:
for transform in field_list[1:]:
annotation = self.try_transform(annotation, transform)
return annotation
join_info = self.setup_joins(…
field_list, self.get_meta(), self.get_initial_alias(), can_reuse=reuse
)
targets, final_alias, join_list = self.trim_joins(
join_info.targets, join_info.joins, join_info.path
)
if not allow_joins and len(join_list) > 1:
Local vars
Variable Value allow_joins True
annotation None
field_list ['created_at']
name 'created_at'
reuse None
self <django.db.models.sql.query.Query object at 0x78ffe687e510>
summarize False
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/db/models/sql/query.py, line 1901, in setup_joinsreturn field.get_col(alias)
# Try resolving all the names as fields first. If there's an error,
# treat trailing names as lookups until a field can be resolved.
last_field_exception = None
for pivot in range(len(names), 0, -1):
try:
path, final_field, targets, rest = self.names_to_path(…
names[:pivot],
opts,
allow_many,
fail_on_missing=True,
)
except FieldError as exc:
Local vars
Variable Value alias 'storage_filedownloadstat'
allow_many True
can_reuse None
final_transformer <function Query.setup_joins.<locals>.final_transformer at 0x78ffe6859b20>
joins ['storage_filedownloadstat']
last_field_exception None
names ['created_at']
opts <Options for FileDownloadStat>
pivot 1
self <django.db.models.sql.query.Query object at 0x78ffe687e510>
-
/var/www/development/backend/venv/lib/python3.12/site-packages/django/db/models/sql/query.py, line 1806, in names_to_pathavailable = sorted(
[
*get_field_names_from_opts(opts),
*self.annotation_select,
*self._filtered_relations,
]
)
raise FieldError( ^…
"Cannot resolve keyword '%s' into field. "
"Choices are: %s" % (name, ", ".join(available))
)
break
# Check if we need any joins for concrete inheritance cases (the
# field lives in parent, but we are currently in one of its
Local vars
Variable Value allow_many True
available ['downloaded_at', 'entry', 'entry_id', 'id', 'user', 'user_id']
cur_names_with_path ('created_at', [])fail_on_missing True
field None
filtered_relation None
name 'created_at'
names ['created_at']
names_with_path []
opts <Options for FileDownloadStat>
path []
pos -1
self <django.db.models.sql.query.Query object at 0x78ffe687e510>
Request information
USER
Parsa
GET
No GET data
POST
No POST data
FILES
No FILES data
COOKIES
| Variable | Value |
|---|---|
| csrftoken | '********************' |
META
| Variable | Value |
|---|---|
| CSRF_COOKIE | 'HJWosw9NdaEdbKoabTfcj2vacSGaAvc9' |
| HTTP_ACCEPT | '*/*' |
| HTTP_ACCEPT_ENCODING | 'gzip, deflate, br, zstd' |
| HTTP_ACCEPT_LANGUAGE | 'en-US,en;q=0.9' |
| HTTP_AUTHORIZATION | '********************' |
| HTTP_CONNECTION | 'close' |
| HTTP_COOKIE | '********************' |
| HTTP_HOST | 'netnest.org' |
| HTTP_PRIORITY | 'u=0' |
| HTTP_REFERER | 'https://netnest.org/api/schema/swagger-ui/' |
| HTTP_SEC_FETCH_DEST | 'empty' |
| HTTP_SEC_FETCH_MODE | 'cors' |
| HTTP_SEC_FETCH_SITE | 'same-origin' |
| HTTP_USER_AGENT | ('Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 '
'Firefox/149.0') |
| HTTP_X_FORWARDED_FOR | '217.218.37.40' |
| HTTP_X_FORWARDED_PROTO | 'https' |
| HTTP_X_REAL_IP | '217.218.37.40' |
| PATH_INFO | '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/' |
| QUERY_STRING | '' |
| RAW_URI | '/api/storage/files/354a22f1-6eb7-450d-bad0-2d8a70b985fc/download-stats/' |
| REMOTE_ADDR | '127.0.0.1' |
| REMOTE_PORT | '51114' |
| REQUEST_METHOD | 'GET' |
| SCRIPT_NAME | '' |
| SERVER_NAME | '127.0.0.1' |
| SERVER_PORT | '8001' |
| SERVER_PROTOCOL | 'HTTP/1.0' |
| SERVER_SOFTWARE | 'gunicorn/23.0.0' |
| gunicorn.socket | <socket.socket fd=11, family=2, type=1, proto=0, laddr=('127.0.0.1', 8001), raddr=('127.0.0.1', 51114)> |
| wsgi.errors | <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x78ffe687d6f0> |
| wsgi.file_wrapper | <class 'gunicorn.http.wsgi.FileWrapper'> |
| wsgi.input | <gunicorn.http.body.Body object at 0x78ffe687dbe0> |
| wsgi.input_terminated | True |
| wsgi.multiprocess | True |
| wsgi.multithread | True |
| wsgi.run_once | False |
| wsgi.url_scheme | 'https' |
| wsgi.version | (1, 0) |
Settings
Using settings module filemanager.settings
| Setting | Value |
|---|---|
| ABSOLUTE_URL_OVERRIDES | {} |
| ADMINS | [] |
| ALLOWED_HOSTS | ['*'] |
| ALLOWED_HOSTS_ENV | '*' |
| APPEND_SLASH | True |
| AUTHENTICATION_BACKENDS | '********************' |
| AUTH_PASSWORD_VALIDATORS | '********************' |
| AUTH_USER_MODEL | '********************' |
| BACKEND_BASE_URL | 'https://netnest.org' |
| BALE_API_KEY | '********************' |
| BALE_BOT_ID | 1569399072 |
| BASE_DIR | PosixPath('/var/www/development/backend') |
| BILLING_DEFAULT_PLAN_SLUG | 'Free' |
| BILLING_PURGE_HANDLER | 'storage.services.purge.purge_user_files' |
| CACHES | {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} |
| CACHE_MIDDLEWARE_ALIAS | 'default' |
| CACHE_MIDDLEWARE_KEY_PREFIX | '********************' |
| CACHE_MIDDLEWARE_SECONDS | 600 |
| CELERY_ACCEPT_CONTENT | ['json'] |
| CELERY_BEAT_SCHEDULE | {'billing-enforce-expiry-and-purge-daily': {'schedule': <crontab: 0 3 * * * (m/h/dM/MY/d)>,
'task': 'billing.tasks.enforce_subscription_expiry_and_purge'}} |
| CELERY_BROKER_URL | 'redis://127.0.0.1:6379/0' |
| CELERY_RESULT_BACKEND | 'redis://127.0.0.1:6379/1' |
| CELERY_RESULT_SERIALIZER | 'json' |
| CELERY_TASK_SERIALIZER | 'json' |
| CELERY_TIMEZONE | 'UTC' |
| CERTBOT_EMAIL | 'admin@netnest.org' |
| CORS_ALLOW_ALL_ORIGINS | True |
| CSRF_COOKIE_AGE | 31449600 |
| CSRF_COOKIE_DOMAIN | None |
| CSRF_COOKIE_HTTPONLY | False |
| CSRF_COOKIE_NAME | 'csrftoken' |
| CSRF_COOKIE_PATH | '/' |
| CSRF_COOKIE_SAMESITE | 'Lax' |
| CSRF_COOKIE_SECURE | True |
| CSRF_FAILURE_VIEW | 'django.views.csrf.csrf_failure' |
| CSRF_HEADER_NAME | 'HTTP_X_CSRFTOKEN' |
| CSRF_TRUSTED_ORIGINS | [] |
| CSRF_USE_SESSIONS | False |
| CUSTOM_DOMAIN_CERTBOT_EMAIL | 'admin@netnest.org' |
| CUSTOM_DOMAIN_NGINX_BIN | '/usr/sbin/nginx' |
| CUSTOM_DOMAIN_NGINX_DIR | '/etc/nginx/conf.d' |
| CUSTOM_DOMAIN_NGINX_NAME | 'custom_domains.conf' |
| CUSTOM_DOMAIN_NGINX_RELOAD_CMD | ['/usr/bin/systemctl', 'reload', 'nginx'] |
| CUSTOM_DOMAIN_NGINX_TEST_CMD | ['/usr/sbin/nginx', '-t'] |
| CUSTOM_DOMAIN_PROVISION_SYNC | True |
| DATABASES | {'default': {'ATOMIC_REQUESTS': False,
'AUTOCOMMIT': True,
'CONN_HEALTH_CHECKS': False,
'CONN_MAX_AGE': 0,
'ENGINE': 'django.db.backends.postgresql',
'HOST': 'localhost',
'NAME': 'netnestdb7',
'OPTIONS': {},
'PASSWORD': '********************',
'PORT': '5432',
'TEST': {'CHARSET': None,
'COLLATION': None,
'MIGRATE': True,
'MIRROR': None,
'NAME': None},
'TIME_ZONE': None,
'USER': 'rpuser4net'}} |
| DATABASE_ROUTERS | [] |
| DATA_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
| DATA_UPLOAD_MAX_NUMBER_FIELDS | 1000 |
| DATA_UPLOAD_MAX_NUMBER_FILES | 100 |
| DATETIME_FORMAT | 'N j, Y, P' |
| DATETIME_INPUT_FORMATS | ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] |
| DATE_FORMAT | 'N j, Y' |
| DATE_INPUT_FORMATS | ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] |
| DEBUG | True |
| DEBUG_PROPAGATE_EXCEPTIONS | False |
| DECIMAL_SEPARATOR | '.' |
| DEFAULT_AUTO_FIELD | 'django.db.models.BigAutoField' |
| DEFAULT_CHARSET | 'utf-8' |
| DEFAULT_EXCEPTION_REPORTER | 'django.views.debug.ExceptionReporter' |
| DEFAULT_EXCEPTION_REPORTER_FILTER | 'django.views.debug.SafeExceptionReporterFilter' |
| DEFAULT_FROM_EMAIL | 'info@netnest.org' |
| DEFAULT_INDEX_TABLESPACE | '' |
| DEFAULT_TABLESPACE | '' |
| DISALLOWED_USER_AGENTS | [] |
| EMAIL_BACKEND | 'django.core.mail.backends.smtp.EmailBackend' |
| EMAIL_HOST | 'smtp.c1.liara.email' |
| EMAIL_HOST_PASSWORD | '********************' |
| EMAIL_HOST_USER | 'sweet_payne_qqpbhs' |
| EMAIL_PORT | 587 |
| EMAIL_SSL_CERTFILE | None |
| EMAIL_SSL_KEYFILE | '********************' |
| EMAIL_SUBJECT_PREFIX | '[Django] ' |
| EMAIL_TIMEOUT | 15 |
| EMAIL_USE_LOCALTIME | False |
| EMAIL_USE_SSL | False |
| EMAIL_USE_TLS | True |
| FILE_UPLOAD_DIRECTORY_PERMISSIONS | None |
| FILE_UPLOAD_HANDLERS | ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] |
| FILE_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
| FILE_UPLOAD_PERMISSIONS | 420 |
| FILE_UPLOAD_TEMP_DIR | None |
| FIRST_DAY_OF_WEEK | 0 |
| FIXTURE_DIRS | [] |
| FORCE_SCRIPT_NAME | None |
| FORMAT_MODULE_PATH | None |
| FORMS_URLFIELD_ASSUME_HTTPS | False |
| FORM_RENDERER | 'django.forms.renderers.DjangoTemplates' |
| FRONTEND_BASE_URL | 'https://netnest.org' |
| IGNORABLE_404_URLS | [] |
| INSTALLED_APPS | ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django_filters', 'rest_framework', 'corsheaders', 'drf_spectacular', 'rest_framework_simplejwt', 'rest_framework_simplejwt.token_blacklist', 'accounts', 'storage', 'api', 'tickets', 'billing', 'ftp', 'admin_api', 'notes', 'logs'] |
| INTERNAL_IPS | [] |
| KAVENEGAR_API_KEY | '********************' |
| KAVENEGAR_TEMPLATE_SIGNUP | None |
| KAVENEGAR_VERIFY_TAG | '' |
| KAVENEGAR_VERIFY_TYPE | 'sms' |
| LANGUAGES | [('af', 'Afrikaans'),
('ar', 'Arabic'),
('ar-dz', 'Algerian Arabic'),
('ast', 'Asturian'),
('az', 'Azerbaijani'),
('bg', 'Bulgarian'),
('be', 'Belarusian'),
('bn', 'Bengali'),
('br', 'Breton'),
('bs', 'Bosnian'),
('ca', 'Catalan'),
('ckb', 'Central Kurdish (Sorani)'),
('cs', 'Czech'),
('cy', 'Welsh'),
('da', 'Danish'),
('de', 'German'),
('dsb', 'Lower Sorbian'),
('el', 'Greek'),
('en', 'English'),
('en-au', 'Australian English'),
('en-gb', 'British English'),
('eo', 'Esperanto'),
('es', 'Spanish'),
('es-ar', 'Argentinian Spanish'),
('es-co', 'Colombian Spanish'),
('es-mx', 'Mexican Spanish'),
('es-ni', 'Nicaraguan Spanish'),
('es-ve', 'Venezuelan Spanish'),
('et', 'Estonian'),
('eu', 'Basque'),
('fa', 'Persian'),
('fi', 'Finnish'),
('fr', 'French'),
('fy', 'Frisian'),
('ga', 'Irish'),
('gd', 'Scottish Gaelic'),
('gl', 'Galician'),
('he', 'Hebrew'),
('hi', 'Hindi'),
('hr', 'Croatian'),
('hsb', 'Upper Sorbian'),
('hu', 'Hungarian'),
('hy', 'Armenian'),
('ia', 'Interlingua'),
('id', 'Indonesian'),
('ig', 'Igbo'),
('io', 'Ido'),
('is', 'Icelandic'),
('it', 'Italian'),
('ja', 'Japanese'),
('ka', 'Georgian'),
('kab', 'Kabyle'),
('kk', 'Kazakh'),
('km', 'Khmer'),
('kn', 'Kannada'),
('ko', 'Korean'),
('ky', 'Kyrgyz'),
('lb', 'Luxembourgish'),
('lt', 'Lithuanian'),
('lv', 'Latvian'),
('mk', 'Macedonian'),
('ml', 'Malayalam'),
('mn', 'Mongolian'),
('mr', 'Marathi'),
('ms', 'Malay'),
('my', 'Burmese'),
('nb', 'Norwegian Bokmål'),
('ne', 'Nepali'),
('nl', 'Dutch'),
('nn', 'Norwegian Nynorsk'),
('os', 'Ossetic'),
('pa', 'Punjabi'),
('pl', 'Polish'),
('pt', 'Portuguese'),
('pt-br', 'Brazilian Portuguese'),
('ro', 'Romanian'),
('ru', 'Russian'),
('sk', 'Slovak'),
('sl', 'Slovenian'),
('sq', 'Albanian'),
('sr', 'Serbian'),
('sr-latn', 'Serbian Latin'),
('sv', 'Swedish'),
('sw', 'Swahili'),
('ta', 'Tamil'),
('te', 'Telugu'),
('tg', 'Tajik'),
('th', 'Thai'),
('tk', 'Turkmen'),
('tr', 'Turkish'),
('tt', 'Tatar'),
('udm', 'Udmurt'),
('ug', 'Uyghur'),
('uk', 'Ukrainian'),
('ur', 'Urdu'),
('uz', 'Uzbek'),
('vi', 'Vietnamese'),
('zh-hans', 'Simplified Chinese'),
('zh-hant', 'Traditional Chinese')] |
| LANGUAGES_BIDI | ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', 'ur'] |
| LANGUAGE_CODE | 'en-us' |
| LANGUAGE_COOKIE_AGE | None |
| LANGUAGE_COOKIE_DOMAIN | None |
| LANGUAGE_COOKIE_HTTPONLY | False |
| LANGUAGE_COOKIE_NAME | 'django_language' |
| LANGUAGE_COOKIE_PATH | '/' |
| LANGUAGE_COOKIE_SAMESITE | None |
| LANGUAGE_COOKIE_SECURE | False |
| LOCALE_PATHS | [] |
| LOGGING | {'handlers': {'file': {'class': 'logging.FileHandler',
'filename': '/var/log/netnest/django.log',
'level': 'ERROR'}},
'root': {'handlers': ['file'], 'level': 'ERROR'},
'version': 1} |
| LOGGING_CONFIG | 'logging.config.dictConfig' |
| LOGIN_REDIRECT_URL | '/accounts/profile/' |
| LOGIN_URL | '/accounts/login/' |
| LOGOUT_REDIRECT_URL | None |
| MANAGERS | [] |
| MEDIA_ROOT | PosixPath('/var/www/development/backend/media') |
| MEDIA_URL | '/media/' |
| MESSAGE_STORAGE | 'django.contrib.messages.storage.fallback.FallbackStorage' |
| MIDDLEWARE | ['corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'storage.middleware.AllowedHostsFromDBMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'accounts.middleware.UpdateLastSeenMiddleware'] |
| MIGRATION_MODULES | {} |
| MONTH_DAY_FORMAT | 'F j' |
| NETNEST_PRIMARY_HOSTS | ['netnest.org', 'www.netnest.org', 'localhost', '127.0.0.1'] |
| NUMBER_GROUPING | 0 |
| OTP_CODE_LENGTH | 6 |
| OTP_EXPIRE_MINUTES | 5 |
| PASSWORD_HASHERS | '********************' |
| PASSWORD_RESET_TIMEOUT | '********************' |
| PREPEND_WWW | False |
| PUBLIC_SCHEME | 'https' |
| PUBLIC_SITE_DOMAIN | 'netnest.org' |
| REST_FRAMEWORK | {'DEFAULT_AUTHENTICATION_CLASSES': '********************',
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated',),
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
'DEFAULT_THROTTLE_CLASSES': ['rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'],
'DEFAULT_THROTTLE_RATES': {'anon': '30/min',
'sftp_sync_now': '6/min',
'user': '120/min'},
'EXCEPTION_HANDLER': 'filemanager.exception_handler.custom_exception_handler'} |
| ROOT_URLCONF | 'filemanager.urls' |
| SECRET_KEY | '********************' |
| SECRET_KEY_FALLBACKS | '********************' |
| SECURE_CONTENT_TYPE_NOSNIFF | True |
| SECURE_CROSS_ORIGIN_OPENER_POLICY | 'same-origin' |
| SECURE_HSTS_INCLUDE_SUBDOMAINS | False |
| SECURE_HSTS_PRELOAD | False |
| SECURE_HSTS_SECONDS | 0 |
| SECURE_PROXY_SSL_HEADER | ('HTTP_X_FORWARDED_PROTO', 'https') |
| SECURE_REDIRECT_EXEMPT | [] |
| SECURE_REFERRER_POLICY | 'same-origin' |
| SECURE_SSL_HOST | None |
| SECURE_SSL_REDIRECT | True |
| SERVER_EMAIL | 'root@localhost' |
| SESSION_CACHE_ALIAS | 'default' |
| SESSION_COOKIE_AGE | 1209600 |
| SESSION_COOKIE_DOMAIN | None |
| SESSION_COOKIE_HTTPONLY | True |
| SESSION_COOKIE_NAME | 'sessionid' |
| SESSION_COOKIE_PATH | '/' |
| SESSION_COOKIE_SAMESITE | 'Lax' |
| SESSION_COOKIE_SECURE | True |
| SESSION_ENGINE | 'django.contrib.sessions.backends.db' |
| SESSION_EXPIRE_AT_BROWSER_CLOSE | False |
| SESSION_FILE_PATH | None |
| SESSION_SAVE_EVERY_REQUEST | False |
| SESSION_SERIALIZER | 'django.contrib.sessions.serializers.JSONSerializer' |
| SETTINGS_MODULE | 'filemanager.settings' |
| SHORT_DATETIME_FORMAT | 'm/d/Y P' |
| SHORT_DATE_FORMAT | 'm/d/Y' |
| SIGNING_BACKEND | 'django.core.signing.TimestampSigner' |
| SILENCED_SYSTEM_CHECKS | [] |
| SIMPLE_JWT | {'ACCESS_TOKEN_LIFETIME': '********************',
'AUTH_HEADER_TYPES': '********************',
'BLACKLIST_AFTER_ROTATION': True,
'REFRESH_TOKEN_LIFETIME': '********************',
'ROTATE_REFRESH_TOKENS': '********************'} |
| SMSIR_API_KEY | '********************' |
| SMSIR_ENABLE_NOTIFICATIONS | True |
| SMSIR_OTP_PARAM_NAME | 'TOKEN' |
| SMSIR_TEMPLATE_ID_LOGIN | '967388' |
| SMSIR_TEMPLATE_ID_RESET | '967388' |
| SMSIR_TEMPLATE_ID_SIGNUP | '967388' |
| SMSIR_TEMPLATE_ID_TICKET_UPDATE_ADMIN | 724011 |
| SMSIR_TEMPLATE_ID_USER_ALERT | 310159 |
| SMSIR_TEMPLATE_ID_VERIFY_PHONE | '' |
| SMSIR_TICKET_PARAM_NAME | 'SHOMARETICKET' |
| SMSIR_USER_PARAM_NAME | 'NAME' |
| STATICFILES_DIRS | [] |
| STATICFILES_FINDERS | ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] |
| STATIC_ROOT | PosixPath('/var/www/development/backend/staticfiles') |
| STATIC_URL | '/static/' |
| STORAGES | {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}} |
| STORAGE_VIRUS_SCAN_ENABLED | False |
| TEMPLATES | [{'APP_DIRS': True,
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'OPTIONS': {'context_processors': ['django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages']}}] |
| TEST_NON_SERIALIZED_APPS | [] |
| TEST_RUNNER | 'django.test.runner.DiscoverRunner' |
| THOUSAND_SEPARATOR | ',' |
| TIME_FORMAT | 'P' |
| TIME_INPUT_FORMATS | ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] |
| TIME_ZONE | 'UTC' |
| USE_I18N | True |
| USE_THOUSAND_SEPARATOR | False |
| USE_TZ | True |
| USE_X_FORWARDED_HOST | True |
| USE_X_FORWARDED_PORT | False |
| WSGI_APPLICATION | 'filemanager.wsgi.application' |
| X_FRAME_OPTIONS | 'DENY' |
| YEAR_MONTH_FORMAT | 'F Y' |
| ZARINPAL_MERCHANT_ID | 'd146b535-d2e6-43b1-9b0a-30c3d55138f1' |