Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
news
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Sartika Aritonang
news
Commits
3948976d
Commit
3948976d
authored
May 29, 2020
by
Sartika Aritonang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
8a2bd1a5
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
236 additions
and
0 deletions
+236
-0
__init__.py
stbi/Lib/site-packages/django/conf/__init__.py
+236
-0
No files found.
stbi/Lib/site-packages/django/conf/__init__.py
0 → 100644
View file @
3948976d
"""
Settings and configuration for Django.
Read values from the module specified by the DJANGO_SETTINGS_MODULE environment
variable, and then from django.conf.global_settings; see the global_settings.py
for a list of all possible variables.
"""
import
importlib
import
os
import
time
import
traceback
import
warnings
from
pathlib
import
Path
import
django
from
django.conf
import
global_settings
from
django.core.exceptions
import
ImproperlyConfigured
from
django.utils.deprecation
import
RemovedInDjango31Warning
from
django.utils.functional
import
LazyObject
,
empty
ENVIRONMENT_VARIABLE
=
"DJANGO_SETTINGS_MODULE"
FILE_CHARSET_DEPRECATED_MSG
=
(
'The FILE_CHARSET setting is deprecated. Starting with Django 3.1, all '
'files read from disk must be UTF-8 encoded.'
)
class
SettingsReference
(
str
):
"""
String subclass which references a current settings value. It's treated as
the value in memory but serializes to a settings.NAME attribute reference.
"""
def
__new__
(
self
,
value
,
setting_name
):
return
str
.
__new__
(
self
,
value
)
def
__init__
(
self
,
value
,
setting_name
):
self
.
setting_name
=
setting_name
class
LazySettings
(
LazyObject
):
"""
A lazy proxy for either global Django settings or a custom settings object.
The user can manually configure settings prior to using them. Otherwise,
Django uses the settings module pointed to by DJANGO_SETTINGS_MODULE.
"""
def
_setup
(
self
,
name
=
None
):
"""
Load the settings module pointed to by the environment variable. This
is used the first time settings are needed, if the user hasn't
configured settings manually.
"""
settings_module
=
os
.
environ
.
get
(
ENVIRONMENT_VARIABLE
)
if
not
settings_module
:
desc
=
(
"setting
%
s"
%
name
)
if
name
else
"settings"
raise
ImproperlyConfigured
(
"Requested
%
s, but settings are not configured. "
"You must either define the environment variable
%
s "
"or call settings.configure() before accessing settings."
%
(
desc
,
ENVIRONMENT_VARIABLE
))
self
.
_wrapped
=
Settings
(
settings_module
)
def
__repr__
(
self
):
# Hardcode the class name as otherwise it yields 'Settings'.
if
self
.
_wrapped
is
empty
:
return
'<LazySettings [Unevaluated]>'
return
'<LazySettings "
%(settings_module)
s">'
%
{
'settings_module'
:
self
.
_wrapped
.
SETTINGS_MODULE
,
}
def
__getattr__
(
self
,
name
):
"""Return the value of a setting and cache it in self.__dict__."""
if
self
.
_wrapped
is
empty
:
self
.
_setup
(
name
)
val
=
getattr
(
self
.
_wrapped
,
name
)
self
.
__dict__
[
name
]
=
val
return
val
def
__setattr__
(
self
,
name
,
value
):
"""
Set the value of setting. Clear all cached values if _wrapped changes
(@override_settings does this) or clear single values when set.
"""
if
name
==
'_wrapped'
:
self
.
__dict__
.
clear
()
else
:
self
.
__dict__
.
pop
(
name
,
None
)
super
()
.
__setattr__
(
name
,
value
)
def
__delattr__
(
self
,
name
):
"""Delete a setting and clear it from cache if needed."""
super
()
.
__delattr__
(
name
)
self
.
__dict__
.
pop
(
name
,
None
)
def
configure
(
self
,
default_settings
=
global_settings
,
**
options
):
"""
Called to manually configure the settings. The 'default_settings'
parameter sets where to retrieve any unspecified values from (its
argument must support attribute access (__getattr__)).
"""
if
self
.
_wrapped
is
not
empty
:
raise
RuntimeError
(
'Settings already configured.'
)
holder
=
UserSettingsHolder
(
default_settings
)
for
name
,
value
in
options
.
items
():
if
not
name
.
isupper
():
raise
TypeError
(
'Setting
%
r must be uppercase.'
%
name
)
setattr
(
holder
,
name
,
value
)
self
.
_wrapped
=
holder
@property
def
configured
(
self
):
"""Return True if the settings have already been configured."""
return
self
.
_wrapped
is
not
empty
@property
def
FILE_CHARSET
(
self
):
stack
=
traceback
.
extract_stack
()
# Show a warning if the setting is used outside of Django.
# Stack index: -1 this line, -2 the caller.
filename
,
_line_number
,
_function_name
,
_text
=
stack
[
-
2
]
if
not
filename
.
startswith
(
os
.
path
.
dirname
(
django
.
__file__
)):
warnings
.
warn
(
FILE_CHARSET_DEPRECATED_MSG
,
RemovedInDjango31Warning
,
stacklevel
=
2
,
)
return
self
.
__getattr__
(
'FILE_CHARSET'
)
class
Settings
:
def
__init__
(
self
,
settings_module
):
# update this dict from global settings (but only for ALL_CAPS settings)
for
setting
in
dir
(
global_settings
):
if
setting
.
isupper
():
setattr
(
self
,
setting
,
getattr
(
global_settings
,
setting
))
# store the settings module in case someone later cares
self
.
SETTINGS_MODULE
=
settings_module
mod
=
importlib
.
import_module
(
self
.
SETTINGS_MODULE
)
tuple_settings
=
(
"INSTALLED_APPS"
,
"TEMPLATE_DIRS"
,
"LOCALE_PATHS"
,
)
self
.
_explicit_settings
=
set
()
for
setting
in
dir
(
mod
):
if
setting
.
isupper
():
setting_value
=
getattr
(
mod
,
setting
)
if
(
setting
in
tuple_settings
and
not
isinstance
(
setting_value
,
(
list
,
tuple
))):
raise
ImproperlyConfigured
(
"The
%
s setting must be a list or a tuple. "
%
setting
)
setattr
(
self
,
setting
,
setting_value
)
self
.
_explicit_settings
.
add
(
setting
)
if
not
self
.
SECRET_KEY
:
raise
ImproperlyConfigured
(
"The SECRET_KEY setting must not be empty."
)
if
self
.
is_overridden
(
'FILE_CHARSET'
):
warnings
.
warn
(
FILE_CHARSET_DEPRECATED_MSG
,
RemovedInDjango31Warning
)
if
hasattr
(
time
,
'tzset'
)
and
self
.
TIME_ZONE
:
# When we can, attempt to validate the timezone. If we can't find
# this file, no check happens and it's harmless.
zoneinfo_root
=
Path
(
'/usr/share/zoneinfo'
)
zone_info_file
=
zoneinfo_root
.
joinpath
(
*
self
.
TIME_ZONE
.
split
(
'/'
))
if
zoneinfo_root
.
exists
()
and
not
zone_info_file
.
exists
():
raise
ValueError
(
"Incorrect timezone setting:
%
s"
%
self
.
TIME_ZONE
)
# Move the time zone info into os.environ. See ticket #2315 for why
# we don't do this unconditionally (breaks Windows).
os
.
environ
[
'TZ'
]
=
self
.
TIME_ZONE
time
.
tzset
()
def
is_overridden
(
self
,
setting
):
return
setting
in
self
.
_explicit_settings
def
__repr__
(
self
):
return
'<
%(cls)
s "
%(settings_module)
s">'
%
{
'cls'
:
self
.
__class__
.
__name__
,
'settings_module'
:
self
.
SETTINGS_MODULE
,
}
class
UserSettingsHolder
:
"""Holder for user configured settings."""
# SETTINGS_MODULE doesn't make much sense in the manually configured
# (standalone) case.
SETTINGS_MODULE
=
None
def
__init__
(
self
,
default_settings
):
"""
Requests for configuration variables not in this class are satisfied
from the module specified in default_settings (if possible).
"""
self
.
__dict__
[
'_deleted'
]
=
set
()
self
.
default_settings
=
default_settings
def
__getattr__
(
self
,
name
):
if
not
name
.
isupper
()
or
name
in
self
.
_deleted
:
raise
AttributeError
return
getattr
(
self
.
default_settings
,
name
)
def
__setattr__
(
self
,
name
,
value
):
self
.
_deleted
.
discard
(
name
)
if
name
==
'FILE_CHARSET'
:
warnings
.
warn
(
FILE_CHARSET_DEPRECATED_MSG
,
RemovedInDjango31Warning
)
super
()
.
__setattr__
(
name
,
value
)
def
__delattr__
(
self
,
name
):
self
.
_deleted
.
add
(
name
)
if
hasattr
(
self
,
name
):
super
()
.
__delattr__
(
name
)
def
__dir__
(
self
):
return
sorted
(
s
for
s
in
[
*
self
.
__dict__
,
*
dir
(
self
.
default_settings
)]
if
s
not
in
self
.
_deleted
)
def
is_overridden
(
self
,
setting
):
deleted
=
(
setting
in
self
.
_deleted
)
set_locally
=
(
setting
in
self
.
__dict__
)
set_on_default
=
getattr
(
self
.
default_settings
,
'is_overridden'
,
lambda
s
:
False
)(
setting
)
return
deleted
or
set_locally
or
set_on_default
def
__repr__
(
self
):
return
'<
%(cls)
s>'
%
{
'cls'
:
self
.
__class__
.
__name__
,
}
settings
=
LazySettings
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment