本文整理汇总了Python中s3utils.s3_unicode函数的典型用法代码示例。如果您正苦于以下问题:Python s3_unicode函数的具体用法?Python s3_unicode怎么用?Python s3_unicode使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了s3_unicode函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: multiple
def multiple(self, values, rows=None, list_type=True, show_link=True):
"""
Represent multiple values as a comma-separated list.
@param values: list of values
@param rows: the referenced rows (if values are foreign keys)
@param show_link: render each representation as link
"""
self._setup()
show_link = show_link and self.show_link
# Get the values
if rows and self.table:
key = self.key
values = [row[key] for row in rows]
elif self.list_type and list_type:
from itertools import chain
try:
hasnone = None in values
if hasnone:
values = [i for i in values if i != None]
values = list(set(chain.from_iterable(values)))
if hasnone:
values.append(None)
except TypeError:
raise ValueError("List of lists expected, got %s" % values)
else:
values = [values] if type(values) is not list else values
# Lookup the representations
if values:
default = self.default
items = self._lookup(values, rows=rows)
if show_link:
link = self.link
labels = [[link(v, s3_unicode(items[v])), ", "]
if v in items else [default, ", "]
for v in values]
if labels:
from itertools import chain
return TAG[""](list(chain.from_iterable(labels))[:-1])
else:
return ""
else:
labels = [s3_unicode(items[v])
if v in items else default for v in values]
if labels:
return ", ".join(labels)
return self.none
示例2: format_date
def format_date(self, dt, dtfmt=None, local=False):
"""
Format a date according to this calendar
@param dt: the date (datetime.date or datetime.datetime)
@return: the date as string
"""
if dt is None:
return current.messages["NONE"]
# Default format
if dtfmt is None:
if local:
dtfmt = current.deployment_settings.get_L10n_date_format()
else:
dtfmt = "%Y-%m-%d" # ISO Date Format
# Deal with T's
try:
dtfmt = str(dtfmt)
except (UnicodeDecodeError, UnicodeEncodeError):
dtfmt = s3_unicode(dtfmt).encode("utf-8")
return self.calendar._format(dt, dtfmt)
示例3: format_datetime
def format_datetime(self, dt, dtfmt=None, local=False):
"""
Format a datetime according to this calendar
@param dt: the datetime (datetime.datetime)
@return: the datetime as string
"""
if dt is None:
return current.messages["NONE"]
# Default format
if dtfmt is None:
if local:
dtfmt = current.deployment_settings.get_L10n_datetime_format()
else:
dtfmt = ISOFORMAT # ISO Date/Time Format
# Deal with T's
try:
dtfmt = str(dtfmt)
except (UnicodeDecodeError, UnicodeEncodeError):
dtfmt = s3_unicode(dtfmt).encode("utf-8")
# Remove microseconds
# - for the case that the calendar falls back to .isoformat
if isinstance(dt, datetime.datetime):
dt = dt.replace(microsecond=0)
return self.calendar._format(dt, dtfmt)
示例4: ajax_options
def ajax_options(self, resource):
"""
Method to Ajax-retrieve the current options of this widget
@param resource: the S3Resource
"""
opts = self.opts
attr = self._attr(resource)
ftype, options, noopt = self._options(resource)
if noopt:
options = {attr["_id"]: noopt}
else:
widget_type = opts["widget"]
if widget_type in ("multiselect-bootstrap", "multiselect"):
# Produce a simple list of tuples
options = {attr["_id"]: [(k, s3_unicode(v))
for k, v in options]}
else:
# Use the widget method to group and sort the options
widget = S3GroupedOptionsWidget(
options = options,
multiple = True,
cols = opts["cols"],
size = opts["size"] or 12,
help_field = opts["help_field"])
options = {attr["_id"]:
widget._options({"type": ftype}, [])}
return options
示例5: json_message
def json_message(success=True,
statuscode=None,
message=None,
**kwargs):
"""
Provide a nicely-formatted JSON Message
@param success: action succeeded or failed
@param status_code: the HTTP status code
@param message: the message text
@param kwargs: other elements for the message
@keyword tree: error tree to include as JSON object (rather
than as string) for easy decoding
"""
if statuscode is None:
statuscode = success and 200 or 404
status = success and "success" or "failed"
code = str(statuscode)
output = {"status": status, "statuscode": str(code)}
tree = kwargs.get("tree", None)
if message:
output["message"] = s3_unicode(message)
for k, v in kwargs.items():
if k != "tree":
output[k] = v
output = json.dumps(output)
if message and tree:
output = output[:-1] + ', "tree": %s}' % tree
return output
示例6: widget
def widget(self, field, attr):
""" Widget renderer (parameter description see base class) """
attr["_readonly"] = "true"
attr["_default"] = s3_unicode(field.default)
return TAG["input"](self.label(), **attr)
示例7: represent_row
def represent_row(self, row):
"""
Represent the referenced row.
(in foreign key representations)
@param row: the row
@return: the representation of the Row, or None if there
is an error in the Row
"""
labels = self.labels
if self.slabels:
# String Template
v = labels % row
elif self.clabels:
# External Renderer
v = labels(row)
else:
# Default
values = [row[f] for f in self.fields if row[f] not in (None, "")]
if values:
v = " ".join([s3_unicode(v) for v in values])
else:
v = self.none
if self.translate and not type(v) is lazyT:
return current.T(v)
else:
return v
示例8: render_list
def render_list(self, value, labels, show_link=True):
"""
Helper method to render list-type representations from
bulk()-results.
@param value: the list
@param labels: the labels as returned from bulk()
@param show_link: render references as links, should
be the same as used with bulk()
"""
show_link = show_link and self.show_link
if show_link:
labels = [(labels[v], ", ")
if v in labels else (self.default, ", ")
for v in value]
if labels:
from itertools import chain
return TAG[""](list(chain.from_iterable(labels))[:-1])
else:
return ""
else:
return ", ".join([s3_unicode(labels[v])
if v in labels else self.default
for v in value])
示例9: render_node
def render_node(self, element, attributes, name):
"""
Render as text or attribute of an XML element
@param element: the element
@param attributes: the attributes dict of the element
@param name: the attribute name
"""
# Render value
text = self.represent()
text = s3_unicode(text)
# Strip markup + XML-escape
if text and "<" in text:
try:
stripper = S3MarkupStripper()
stripper.feed(text)
text = stripper.stripped()
except:
pass
# Add to node
if text is not None:
if element is not None:
element.text = text
else:
attributes[name] = text
return
示例10: _html
def _html(self, node_id, widget_id, represent=None):
"""
Recursively render a node as list item (with subnodes
as unsorted list inside the item)
@param node_id: the node ID
@param widget_id: the unique ID for the outermost list
@param represent: the node ID representation method
@return: the list item (LI)
"""
node = self.nodes.get(node_id)
if not node:
return None
label = self.label(node_id, represent=represent)
if label is None:
label = s3_unicode(node_id)
subnodes = node["s"]
item = LI(A(label, _href="#", _class="s3-hierarchy-node"),
_id = "%s-%s" % (widget_id, node_id),
_rel = "parent" if subnodes else "leaf")
html = self._html
if subnodes:
sublist = UL([html(n, widget_id, represent=represent)
for n in subnodes])
item.append(sublist)
return item
示例11: aadata
def aadata(self, totalrows, displayrows, id, sEcho, flist, stringify=True, action_col=None, **attr):
"""
Method to render the data into a json object
@param totalrows: The total rows in the unfiltered query.
@param displayrows: The total rows in the filtered query.
@param id: The id of the table for which this ajax call will
respond to.
@param sEcho: An unaltered copy of sEcho sent from the client used
by dataTables as a draw count.
@param flist: The list of fields
@param attr: dictionary of attributes which can be passed in
dt_action_col: The column where the action buttons will be placed
dt_bulk_actions: list of labels for the bulk actions.
dt_bulk_col: The column in which the checkboxes will appear,
by default it will be the column immediately
before the first data item
dt_group_totals: The number of record in each group.
This will be displayed in parenthesis
after the group title.
"""
data = self.data
if not flist:
flist = self.lfields
start = self.start
end = self.end
if action_col is None:
action_col = attr.get("dt_action_col", 0)
structure = {}
aadata = []
for i in xrange(start, end):
row = data[i]
details = []
for field in flist:
if field == "BULK":
details.append(
"<INPUT id='select%s' type='checkbox' class='bulkcheckbox'>" % row[flist[action_col]]
)
else:
details.append(s3_unicode(row[field]))
aadata.append(details)
structure["dataTable_id"] = id
structure["dataTable_filter"] = self.filterString
structure["dataTable_groupTotals"] = attr.get("dt_group_totals", [])
structure["dataTable_sort"] = self.orderby
structure["aaData"] = aadata
structure["iTotalRecords"] = totalrows
structure["iTotalDisplayRecords"] = displayrows
structure["sEcho"] = sEcho
if stringify:
from gluon.serializers import json
return json(structure)
else:
return structure
示例12: _setup
def _setup(self):
""" Lazy initialization of defaults """
if self.setup:
return
self.queries = 0
# Default representations
messages = current.messages
if self.default is None:
self.default = s3_unicode(messages.UNKNOWN_OPT)
if self.none is None:
self.none = messages["NONE"]
# Initialize theset
if self.options is not None:
self.theset = self.options
else:
self.theset = {}
# Lookup table parameters and linkto
if self.table is None:
tablename = self.tablename
if tablename:
table = current.s3db.table(tablename)
if table is not None:
if self.key is None:
self.key = table._id.name
if not self.fields:
if "name" in table:
self.fields = ["name"]
else:
self.fields = [self.key]
self.table = table
if self.linkto is None and self.show_link:
c, f = tablename.split("_", 1)
self.linkto = URL(c=c, f=f, args=["[id]"], extension="")
# What type of renderer do we use?
labels = self.labels
# String template?
self.slabels = isinstance(labels, basestring)
# External renderer?
self.clabels = callable(labels)
# Hierarchy template
if isinstance(self.hierarchy, basestring):
self.htemplate = self.hierarchy
else:
self.htemplate = "%s > %s"
self.setup = True
return
示例13: ajax_options
def ajax_options(self, resource):
"""
Method to Ajax-retrieve the current options of this widget
@param resource: the S3Resource
"""
attr = self._attr(resource)
ftype, options, noopt = self._options(resource)
if noopt:
return {attr["_id"]: noopt}
else:
return {attr["_id"]: [(k, s3_unicode(v)) for k,v in options]}
示例14: _represent
def _represent(self, node_ids=None, renderer=None):
"""
Represent nodes as labels, the labels are stored in the
nodes as attribute "l".
@param node_ids: the node IDs (None for all nodes)
@param renderer: the representation method (falls back
to the "name" field in the target table
if present)
"""
theset = self.theset
LABEL = "l"
if node_ids is None:
node_ids = self.nodes.keys()
pending = set()
for node_id in node_ids:
node = theset.get(node_id)
if not node:
continue
if LABEL not in node:
pending.add(node_id)
if renderer is None:
renderer = self.represent
if renderer is None:
tablename = self.tablename
table = current.s3db.table(tablename) if tablename else None
if table and "name" in table.fields:
from s3fields import S3Represent
self.represent = renderer = S3Represent(lookup = tablename,
key = self.pkey.name)
else:
renderer = s3_unicode
if hasattr(renderer, "bulk"):
labels = renderer.bulk(list(pending), list_type = False)
for node_id, label in labels.items():
if node_id in theset:
theset[node_id][LABEL] = label
else:
for node_id in pending:
try:
label = renderer(node_id)
except:
label = s3_unicode(node_id)
theset[node_id][LABEL] = label
return
示例15: html_render_group_footer
def html_render_group_footer(self, tbody, group, level=0):
"""
Render the group footer (=group totals)
@param tbody: the TBODY or TABLE to append to
@param group: the group dict
@param level: the grouping level
@todo: add group label to footer if no group headers
@todo: add totals label
"""
data = self.data
columns = data.get("c")
totals = group.get("t")
value = group.get("v")
footer_row = TR(_class="gi-group-footer gi-level-%s" % level)
if not totals:
if not self.group_headers:
footer_row.append(TD(value, _colspan = len(columns)))
tbody.append(footer_row)
return
if columns:
label = None
span = 0
for column in columns:
has_value = column in totals
if label is None:
if not has_value:
span += 1
continue
else:
label = TD("%s %s" % (s3_unicode(s3_strip_markup(value)),
self.totals_label,
),
_class = "gi-group-footer-label",
_colspan = span,
)
footer_row.append(label)
value = totals[column] if has_value else ""
footer_row.append(TD(value))
tbody.append(footer_row)