/usr/lib/python2.7/dist-packages/sitetree/fields.py is in python-django-sitetree 1.5.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | from django import template
from django.template.base import Parser, Token, TOKEN_BLOCK
from django.forms import ChoiceField
from django.utils.safestring import mark_safe
from .templatetags.sitetree import sitetree_tree
from .utils import get_tree_model, get_tree_item_model
MODEL_TREE_CLASS = get_tree_model()
MODEL_TREE_ITEM_CLASS = get_tree_item_model()
class TreeItemChoiceField(ChoiceField):
"""Generic sitetree item field.
Customized ChoiceField with TreeItems of a certain tree.
Accepts the `tree` kwarg - tree model or alias.
Use `initial` kwarg to set initial sitetree item by its ID.
"""
template = 'admin/sitetree/tree/tree_combo.html'
root_title = '---------'
def __init__(self, tree, required=True, widget=None, label=None, initial=None, help_text=None, *args, **kwargs):
super(TreeItemChoiceField, self).__init__(required=required, widget=widget, label=label, initial=initial,
help_text=help_text, *args, **kwargs)
if isinstance(tree, MODEL_TREE_CLASS):
tree = tree.alias
self.tree = tree
self.choices = self._build_choices()
def _build_choices(self):
"""Build choices list runtime using 'sitetree_tree' tag"""
tree_token = u'sitetree_tree from "%s" template "%s"' % (self.tree, self.template)
choices_str = sitetree_tree(
Parser(None), Token(token_type=TOKEN_BLOCK, contents=tree_token)
).render(template.Context(current_app='admin'))
tree_choices = [('', self.root_title)]
for line in choices_str.splitlines():
if line.strip():
splitted = line.split(':::')
tree_choices.append((splitted[0], mark_safe(splitted[1])))
return tree_choices
def clean(self, value):
if not value:
return None
return MODEL_TREE_ITEM_CLASS.objects.get(pk=value)
|