예제 #1
0
def import_events(room_id, limit=None):
    events = get_room_events(room_id)
    # restrict to messages
    messages = (event for event in events
                if event['type'] in MESSAGE_EVENT_TYPES)
    # exclude redacted messages
    messages = (event for event in messages if 'redacted_because' not in event)
    # exclude messages that have already been saved
    messages = (event for event in messages
                if not Message.objects(event_id=event['event_id'],
                                       room_id=event['room_id']))
    if limit:
        messages = islice(messages, limit)
    for event in messages:
        fields = event.copy()
        fields['messageType'] = fields.pop('type')
        fields['room_id'] = room_id
        fields['timestamp'] = datetime.fromtimestamp(
            fields.pop('origin_server_ts') / 1000)
        fields.pop('age', None)
        fields.pop('unsigned', None)
        try:
            message = Message(**replace_dots(fields))
            message.save()
        except (FieldDoesNotExist, ValidationError):
            print(fields)
            raise

        yield message
예제 #2
0
파일: views.py 프로젝트: neithere/orgtool
def message_index(request, year=None, month=None, day=None):
    db = default_storage()
    messages = Message.objects(db).order_by('date_time', reverse=True)
    if year:
        messages = messages.where(date_time__year=year)
        if month:
            messages = messages.where(date_time__month=month)
            if day:
                messages = messages.where(date_time__day=day)
    for name in 'sent_by', 'sent_to':
        if name in request.values:
            print repr(request.values[name])
            messages = messages.where(**{name: request.values[name]})
#    if 'state' in request.values:
#        messages = messages.where(state=request.values['state'])
    if 'q' in request.values:
        messages = messages.where(summary__contains=request.values['q'])
    print messages._conditions
    return {'object_list': messages}
예제 #3
0
def export_archive(room_id, local_images, filename):
    if room_id and not re.match(r'!.+:matrix.org', room_id):
        from matrix_connection import matrix_client
        rooms = matrix_client().get_rooms()
        room_id = next(id for id, room in rooms.items() if room_id in room.display_name)
    if not room_id:
        room_id, *_ = MATRIX_ROOM_IDS
    fmt = Path(filename).suffix.lstrip('.')
    if fmt not in ARCHIVE_FORMATS:
        raise click.BadParameter(f"{fmt} is not in {ARCHIVE_FORMATS}")
    messages = Message.objects(room_id=room_id).order_by('timestamp')
    data = map(encode_message, messages)
    print(f"Writing {len(messages)} messages to {filename!r}")
    with open(filename, 'w') as fp:
        if fmt in ('text', 'txt', 'html'):
            if local_images:
                data = map(replace_by_local_image, data)
            template_path = f'templates/default.{fmt}.tpl'
            dump_html_archive(data, fp, template_path=template_path)
        elif fmt == 'json':
            json.dump(list(data), fp, indent=2)
        elif fmt == 'yaml':
            yaml.dump(list(data), fp, default_flow_style=None)