mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-05-15 10:43:15 +00:00
48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
import re
|
|
from django.db.models import Model, get_model
|
|
from six import string_types
|
|
|
|
|
|
def camelcase_to_underscore(str):
|
|
# http://djangosnippets.org/snippets/585/
|
|
return re.sub('(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))', '_\\1', str).lower().strip('_')
|
|
|
|
|
|
def resolve_model_string(model_string, default_app=None):
|
|
"""
|
|
Resolve an 'app_label.model_name' string into an actual model class.
|
|
If a model class is passed in, just return that.
|
|
"""
|
|
if isinstance(model_string, string_types):
|
|
try:
|
|
app_label, model_name = model_string.split(".")
|
|
except ValueError:
|
|
if default_app is not None:
|
|
# If we can't split, assume a model in current app
|
|
app_label = default_app
|
|
model_name = model_string
|
|
else:
|
|
raise ValueError("Can not resolve {0!r} into a model. Model names "
|
|
"should be in the form app_label.model_name".format(
|
|
model_string), model_string)
|
|
|
|
model = get_model(app_label, model_name)
|
|
if not model:
|
|
raise LookupError("Can not resolve {0!r} into a model".format(model_string), model_string)
|
|
return model
|
|
|
|
elif isinstance(model_string, type) and issubclass(model_string, Model):
|
|
return model_string
|
|
|
|
else:
|
|
raise LookupError("Can not resolve {0!r} into a model".format(model_string), model_string)
|
|
|
|
|
|
SCRIPT_RE = re.compile(r'<(-*)/script>')
|
|
def escape_script(text):
|
|
"""
|
|
Escape `</script>` tags in 'text' so that it can be placed within a `<script>` block without
|
|
accidentally closing it. A '-' character will be inserted for each time it is escaped:
|
|
`<-/script>`, `<--/script>` etc.
|
|
"""
|
|
return SCRIPT_RE.sub(r'<-\1/script>', text)
|