def __init__(self, env, options): source = options.get("source") if source is not None: self.source = Expression(env, source) self.choices = None item_key = options.get("item_key") or "{{ this._id }}" item_label = options.get("item_label") else: self.source = None self.choices = _parse_choices(options) item_key = options.get("item_key") or "{{ this.0 }}" item_label = options.get("item_label") self.item_key = FormatExpression(env, item_key) if item_label is not None: item_label = FormatExpression(env, item_label) self.item_label = item_label
class ChoiceSource: def __init__(self, env, options): source = options.get("source") if source is not None: self.source = Expression(env, source) self.choices = None item_key = options.get("item_key") or "{{ this._id }}" item_label = options.get("item_label") else: self.source = None self.choices = _parse_choices(options) item_key = options.get("item_key") or "{{ this.0 }}" item_label = options.get("item_label") self.item_key = FormatExpression(env, item_key) if item_label is not None: item_label = FormatExpression(env, item_label) self.item_label = item_label @property def has_choices(self): return self.source is not None or self.choices is not None def iter_choices(self, pad, record=None, alt=PRIMARY_ALT): values = {} if record is not None: values["record"] = record if self.choices is not None: iterable = self.choices else: try: iterable = self.source.evaluate(pad, alt=alt, values=values) except Exception: traceback.print_exc() iterable = () for item in iterable or (): key = self.item_key.evaluate(pad, this=item, alt=alt, values=values) # If there is a label expression, use it. Since in that case # we only have one language to fill in, we fill it in for the # default language if self.item_label is not None: label = { "en": self.item_label.evaluate( pad, this=item, alt=alt, values=values ) } # Otherwise we create a proper internationalized key out of # our target label else: if isinstance(item, (tuple, list)) and len(item) == 2: label = item[1] elif hasattr(item, "get_record_label_i18n"): label = item.get_record_label_i18n() else: label = {"en": item["_id"]} yield key, label
def format_record_label(self, record, lang="en"): """Returns the label for a given record.""" label = self.label_i18n.get(lang) if label is None: return None tmpl = self._label_tmpls.get(lang) if tmpl is None: tmpl = (label, FormatExpression(self.env, label)) self._label_tmpls[lang] = tmpl try: return tmpl[1].evaluate(record.pad, this=record) except Exception: # XXX: log return None
def get_default_child_slug(self, pad, data): """Formats out the child slug.""" slug_format = self.child_config.slug_format if slug_format is None: return data["_id"] if self._child_slug_tmpl is None or self._child_slug_tmpl[ 0] != slug_format: self._child_slug_tmpl = ( slug_format, FormatExpression(self.env, slug_format), ) try: return "_".join(self._child_slug_tmpl[1].evaluate( pad, this=data).strip().split()).strip("/") except Exception as exc: reporter.report_generic("Failed to expand child slug_format: %s" % exc) return "temp-" + slugify(data["_id"])