def user_show_groups_json(user_id, group_filter="all"): memberships = Membership.q.filter(Membership.user_id == user_id) if group_filter == "active": memberships = memberships.filter( # it is important to use == here, "is" does NOT work or_(Membership.begins_at == None, Membership.begins_at <= session.utcnow()) ).filter( # it is important to use == here, "is" does NOT work or_(Membership.ends_at == None, Membership.ends_at > session.utcnow()) ) return jsonify(items=[{ 'group_name': membership.group.name, 'begins_at': (datetime_filter(membership.begins_at) if membership.begins_at is not None else ''), 'ends_at': (datetime_filter(membership.ends_at) if membership.ends_at is not None else ''), 'actions': [{'href': url_for(".edit_membership", user_id=user_id, membership_id=membership.id), 'title': 'Bearbeiten', 'icon': 'glyphicon-edit'}, {'href': url_for(".end_membership", user_id=user_id, membership_id=membership.id), 'title': "Beenden", 'icon': 'glyphicon-off'} if membership.active() else {}], } for membership in memberships.all()])
def _format_row(split, style, prefix=None): row = { 'posted_at': datetime_filter(split.transaction.posted_at), # 'posted_by': (split.transaction.author.id, split.transaction.author.name), 'valid_on': date_filter(split.transaction.valid_on), 'description': { 'href': url_for("finance.transactions_show", transaction_id=split.transaction_id), 'title': localized(split.transaction.description) if split.transaction.description else 'Keine Beschreibung', **({ 'empty': True } if not split.transaction.description else {}), }, 'amount': { 'value': money_filter(-split.amount) if (style == "inverted") else money_filter(split.amount), 'is_positive': (split.amount > 0) ^ (style == "inverted"), }, 'row_positive': (split.amount > 0) ^ (style == "inverted"), } if prefix is None: return row return {'{}_{}'.format(prefix, key): val for key, val in row.items()}
def _format_row(split, style, prefix=None): T = FinanceTable row = { 'posted_at': datetime_filter(split.transaction.posted_at), # 'posted_by': (split.transaction.author.id, split.transaction.author.name), 'valid_on': date_filter(split.transaction.valid_on), 'description': T.description.value( href=url_for("finance.transactions_show", transaction_id=split.transaction_id), title=localized(split.transaction.description) if split.transaction.description else 'Keine Beschreibung'), 'amount': T.amount.value( value=money_filter(-split.amount) if (style == "inverted") else money_filter(split.amount), is_positive=(split.amount > 0) ^ (style == "inverted"), ), 'row_positive': (split.amount > 0) ^ (style == "inverted"), } if prefix is None: return row return {f'{prefix}_{key}': val for key, val in row.items()}
def room_logs_json(room_id): return jsonify(items=[{ 'created_at': datetime_filter(entry.created_at), 'user': { 'title': entry.author.name, 'href': url_for("user.user_show", user_id=entry.author.id) }, 'message': entry.message } for entry in reversed(Room.q.get(room_id).log_entries)])
def datetime_format(dt, default=None): """ Format datetime objects for `table.dateFormatter`. :param datetime|None dt: a datetime object or None :param str|None default: formatted value to use if `dt` is None :return: """ if dt is not None: return { 'formatted': datetime_filter(dt), 'timestamp': int(dt.timestamp()), } else: return { 'formatted': default if default is not None else datetime_filter(None), 'timestamp': None, }
def format_custom_hades_message(message): date = datetime.now(tz=timezone.utc) return { 'created_at': datetime_filter(date), 'raw_created_at': date, 'user': { 'type': 'plain', 'title': "Radius", }, 'message': message, 'type': 'hades' }
def format_log_entry(entry, log_type): """Format a logentry in correct json :param LogEntry entry: :param log_type: The logtype to include, currently ``'user'`` or ``'room'``. """ return { 'created_at': datetime_filter(entry.created_at), 'raw_created_at': entry.created_at, 'user': { 'type': 'native', # parses it as a link 'title': entry.author.name, 'href': url_for("user.user_show", user_id=entry.author.id) }, 'message': Message.from_json(entry.message).localize(), 'type': log_type }
def _format_row(split, style, prefix=None): row = { 'posted_at': datetime_filter(split.transaction.posted_at), #'posted_by': (split.transaction.author.id, split.transaction.author.name), 'valid_on': date_filter(split.transaction.valid_on), 'description': { 'href': url_for( "finance.transactions_show", transaction_id=split.transaction_id ), 'title': localized(split.transaction.description) }, 'amount': { 'value': money_filter(-split.amount) if (style == "inverted") else money_filter(split.amount), 'is_positive': (split.amount > 0) ^ (style == "inverted"), }, 'row_positive': (split.amount > 0) ^ (style == "inverted"), } if prefix is None: return row return {'{}_{}'.format(prefix, key): val for key, val in row.items()}
def format_hades_log_entry(interface, entry): """Turn Radius Log entry information into a canonical form This utilizes :py:func:`radius_description` but returns a dict in a format conforming with other log sources' output (consider user and room logs) :param interface: See :py:func:`radius_description`. :param entry: See :py:func:`radius_description`. """ date = entry.time desc = radius_description(interface, entry) return { 'created_at': datetime_filter(date), 'raw_created_at': date, 'user': { 'type': 'plain', # (w/o link) vs. 'native' (w/ link) 'title': "Radius", # or switch name? }, 'message': desc, 'type': 'hades' }