Example #1
0
def move_contact(args):
    "Moves matching contacts to given actor"
    fix_unicode(args, 'from_actor', 'query', 'type', 'new_actor')
    new_actor = None
    try:
        new_actor = get_single(find_actors, args.new_actor)
    except MultipleMatches as e:
        raise CommandError(e)
    except NotFound as e:
        raise CommandError(u'No actor matches "{0}".'.format(args.actor))

    assert args.from_actor or args.query, 'specify actor or auery'

    db = default_storage()
    contacts = Contact.objects(db).where_not(actor=new_actor.pk)
    if args.type:
        contacts = contacts.where(type__in=args.type)
    if args.query:
        contacts = contacts.where(value__matches_caseless=args.query)
    if args.from_actor:
        try:
            from_actor = get_single(find_actors, args.from_actor)
        except MultipleMatches as e:
            raise CommandError(e)
        except NotFound(e):
            raise CommandError('Bad --from-actor: no match for "{0}"'.format(
                args.from_actor))
        contacts = contacts.where(actor=from_actor.pk)

    if not len(contacts):
        raise CommandError('No suitable contacts were found.')

    yield('About to move these contacts:\n')
    for c in contacts:
        yield(u'- {actor}: {kind} {v}'.format(v=bright(c.value), **c))
    yield('')

    msg = u'Move these contacts to {0}'.format(bright(new_actor))
    if confirm(msg, default=True):
        for c in contacts:
            c.actor = new_actor
            c.save(db)
    else:
        yield('\nCancelled.')
Example #2
0
def add_contact(args):
    "Adds a contact to given actor"
    fix_unicode(args, 'actor', 'value', 'type')
    actor = None
    try:
        actor = get_single(find_actors, args.actor)
    except MultipleMatches as e:
        raise CommandError(e)
    except NotFound as e:
        raise CommandError(u'No actor matches "{0}".'.format(args.actor))

    db = default_storage()
    qs = Contact.objects(db)
    dupes = qs.where(actor=actor, kind=args.type, value=args.value)
    if dupes.count():
        raise CommandError('Such contact already exists.')

    # FIXME Docu doesn't properly assign values from Contact(foo=bar)
    contact = Contact()
    contact.actor = actor
    contact.kind = args.type
    contact.value = args.value
    contact.save(db)