Esempio n. 1
0
def read_address_book_from_file():
    file_name = "address_book.txt"
    if os.path.exists(file_name):
        file_address_book = open(file_name, 'rb')
        is_file_empty = os.path.getsize(file_name) == 0
        if is_file_empty:
            book = AddressBook()
        else:
            book = pickle.load(file_address_book)
        file_address_book.close()
    else:
        book = AddressBook()
        file_address_book = open(file_name, 'tw')
        file_address_book.close()
    return book
    def test_get_group_members(self):
        book = AddressBook()
        family = Group('family')
        friends = Group('friends')
        work = Group('work')
        book.add_group(family)
        book.add_group(friends)
        book.add_group(work)

        book.add_person(Person('John', 'Doe', Address('New York'),
                               Email('*****@*****.**'),
                               PhoneNumber('88005553535'),
                               friends))
        book.add_person(Person('Jane', 'Doe', Address('Chicago'),
                               Email('*****@*****.**'),
                               PhoneNumber('2128506'),
                               [friends, work]))

        entries = book.get_group_members(work)
        self.assertEqual(len(entries), 1)

        entries = book.get_group_members(friends)
        self.assertEqual(len(entries), 2)
        self.assertEqual({entries[0].first_name, entries[1].first_name}, {'John', 'Jane'})

        entries = book.get_group_members(family)
        self.assertEqual(len(entries), 0)
Esempio n. 3
0
def load_vcf(folder):
    # type: (str) -> None
    contact_card_files = find_contact_files(folder)
    contacts = VCardContactConverter.from_vcards(contact_card_files)

    address_book = AddressBook()
    for contact in contacts:
        address_book.add_contact(contact)
    address_book.save_to_file()
    logger.info("Saved to {}".format(address_book.get_save_file_path()))
Esempio n. 4
0
 def test_add_person(self):
     address_book = AddressBook()
     person = Person(
         'John',
         'Doe',
         ['Russian Federation, Kemerovo region, Kemerovo, Kirova street 23, apt. 42'],
         ['+79834772053'],
         ['*****@*****.**']
     )
     address_book.add_person(person)
     self.assertIn(person, address_book)
Esempio n. 5
0
 def setUp(self):
     self.address_book = AddressBook()
     self.person1 = Person(first_name='p1fn',
                           last_name='p1ln',
                           emails=['p1em1@com', 'p1em2@com'])
     self.person2 = Person(first_name='p2fn',
                           last_name='p2ln',
                           emails=['p2em1@com', 'p2em2@com'])
     self.person3 = Person(first_name='p3fn',
                           last_name='p3ln',
                           emails=['p3em1@com', 'p3em2@com'])
     self.group1 = Group(name='Group1', persons=self.person1)
     self.group2 = Group(name='Group2',
                         persons=[self.person3, self.person1])
 def test_find_by_first_name(self):
     book = AddressBook()
     book.add_person(Person('John', 'Doe', Address('New York'),
                            Email('*****@*****.**'),
                            PhoneNumber('88005553535')))
     entries = book.find_by_name('John')
     self.assertEqual(len(entries), 1)
     entry = entries[0]
     self.assertEqual(entry.first_name, 'John')
     self.assertEqual(entry.last_name, 'Doe')
     self.assertEqual(entry.street_addresses[0].address, 'New York')
     self.assertEqual(entry.emails[0].email, '*****@*****.**')
     self.assertEqual(entry.phone_numbers[0].number, '88005553535')
     self.assertEqual(entry.groups, [])
    def test_find_by_last_name(self):
        book = AddressBook()
        book.add_person(Person('John', 'Doe', Address('New York'),
                               Email('*****@*****.**'),
                               PhoneNumber('88005553535')))
        book.add_person(Person('Jane', 'Doe', Address('Chicago'),
                               Email('*****@*****.**'),
                               PhoneNumber('2128506')))
        entries = book.find_by_name('Doe')
        self.assertEqual(len(entries), 2)
        self.assertEqual(entries[0].last_name, 'Doe')
        self.assertEqual(entries[1].last_name, 'Doe')

        self.assertEqual(len(book.find_by_name('Ivanov')), 0)
Esempio n. 8
0
    def test_get_address(self):
        address = Address(id=0,
                          name="Toto",
                          address="Tata",
                          email="*****@*****.**",
                          phone_numbers=["555 555-5555"])

        book = AddressBook([address])
        a = book.get_address(0)

        assert a.id == 0
        assert a.name == "Toto"
        assert a.address == "Tata"
        assert a.email == "*****@*****.**"
        assert a.phone_numbers == ["555 555-5555"]
    def create_address_book(self):
        from address_book import AddressBook
        from address import Address
        from work_address import WorkAddress

        expected = AddressBook("expected")
        expected.add_address(
            Address("Jane Weaver", "Tugusirna", "Rowland", "1877/2"))
        expected.add_address(
            Address("Rebecca Cunningham", "Murzuq", "Heffernan", "2/3"))
        expected.add_address(
            Address("Steven Pierce", "Matsena", "Mariners Cove", "153/4"))
        expected.add_address(
            WorkAddress("Jerzy Mardaus", "Kraków", "Ślusarska", "9/1",
                        "Codecool Poland Sp. z o.o."))
        expected.add_address(
            Address("Betty Jenkins", "Tirmiz", "Hollow Ridge", "011/5"))

        return expected
Esempio n. 10
0
 def test_find_person_by_full_name(self):
     address_book = AddressBook()
     ivan_popov_person = Person(
         'Ivan',
         'Popov',
         ['Russian Federation, Kemerovo region, Kemerovo, Kirova street 23, apt. 42'],
         ['+79834772053'],
         ['*****@*****.**']
     )
     ivan_sidorov_person = Person(
         'Ivan',
         'Sidorov',
         ['Russian Federation, Kemerovo region, Belovo, Kirova street 42, apt. 13'],
         ['+79834771122'],
         ['*****@*****.**']
     )
     address_book.add_person(ivan_popov_person)
     address_book.add_person(ivan_sidorov_person)
     found_person = address_book.find(first_name='Ivan', last_name='Sidorov')
     self.assertEqual(found_person, ivan_sidorov_person)
Esempio n. 11
0
 def test_find_person_by_email(self):
     address_book = AddressBook()
     john_person = Person(
         'John',
         'Doe',
         ['Russian Federation, Kemerovo region, Kemerovo, Kirova street 23, apt. 42'],
         ['+79834772053'],
         ['*****@*****.**']
     )
     ivan_person = Person(
         'Ivan',
         'Sidorov',
         ['Russian Federation, Kemerovo region, Belovo, Kirova street 42, apt. 13'],
         ['+79834771122'],
         ['*****@*****.**']
     )
     address_book.add_person(john_person)
     address_book.add_person(ivan_person)
     found_person = address_book.find(email='*****@*****.**')
     self.assertEqual(found_person, ivan_person)
Esempio n. 12
0
 def test_find_person_by_set_of_emails_prefix(self):
     address_book = AddressBook()
     john_person = Person(
         'John',
         'Doe',
         ['Russian Federation, Kemerovo region, Kemerovo, Kirova street 23, apt. 42'],
         ['+79834772053'],
         ['*****@*****.**']
     )
     ivan_person = Person(
         'Ivan',
         'Sidorov',
         ['Russian Federation, Kemerovo region, Belovo, Kirova street 42, apt. 13'],
         ['+79834771122'],
         ['*****@*****.**']
     )
     address_book.add_person(john_person)
     address_book.add_person(ivan_person)
     found_person = address_book.find(emails=['*****@*****.**', '*****@*****.**'])
     self.assertIsNone(found_person)
     ivan_person.add_email('*****@*****.**')
     found_person = address_book.find(emails=['sn0', 'iv'])
     self.assertEqual(found_person, ivan_person)
Esempio n. 13
0
    def choose_option(self, user_input):
        ab = AddressBook()
        if user_input == 1:
            ab.show()

        elif user_input == 2:
            name = input('input name: ')
            address = input('input address: ')
            phone = input('input phone: ')
            email = input('input email: ')

            ab.add(name, address, phone, email)

        elif user_input == 3:
            ab.show()

            name = input('input name for change: ')
            field = input('input field for change: ')
            new_info = input('input new info: ')

            ab.change(name, field, new_info)

            ab.show()

        elif user_input == 4:
            name = input('input name for delete: ')
            ab.delete(name)

        elif user_input == 5:
            name = input('input name: ')
            ab.search(name)

        elif user_input == 0:
            print('good bye!')

        else:
            return
Esempio n. 14
0
from address_book import AddressBook
from commands import list, add, delete, search, exit, remind
from errors import NotExistError, AlreadyExistError, ValidationError

available_commands = {
    'list': list,
    'add': add,
    'delete': delete,
    'search': search,
    'exit': exit
}

book = AddressBook()

print "Hello, this is your address book!"
remind(book)
print "Enter the one of commands below"

while True:
    input = raw_input("{}\n".format(', '.join(available_commands.keys())))
    command = input.lower()
    if command not in available_commands.keys():
        print "I don\'t understand your command. Sorry!\n"
    else:
        try:
            available_commands[command](book)
        except (NotExistError, AlreadyExistError, ValidationError) as e:
            print(e)
Esempio n. 15
0
        def __init__(self):
            self.config = None
            self.address_book_list = []

            # load config file
            xdg_config_home = os.environ.get("XDG_CONFIG_HOME") or \
                    os.path.expanduser("~/.config")
            config_file = os.environ.get("KHARD_CONFIG") or \
                    os.path.join(xdg_config_home, "khard", "khard.conf")
            if os.path.exists(config_file) == False:
                print("Config file %s not available" % config_file)
                sys.exit(2)
            self.config = ConfigObj(config_file, interpolation=False)

            # general settings
            if self.config.has_key("general") == False:
                print(
                    "Error in config file\nMissing main section \"[general]\"."
                )
                sys.exit(2)

            # editor
            self.config['general']['editor'] = self.config['general'].get("editor") \
                    or os.environ.get("EDITOR")
            if self.config['general']['editor'] is None:
                print("Error in config file\n" \
                        "Set path to your preferred text editor in khard's config file or the $EDITOR shell variable\n" \
                        "Example for khard.conf: editor = vim")
                sys.exit(2)
            self.config['general']['editor'] = find_executable(
                os.path.expanduser(self.config['general']['editor']))
            if self.config['general']['editor'] is None:
                print(
                    "Error in config file\nInvalid editor path or executable not found."
                )
                sys.exit(2)

            # merge editor
            self.config['general']['merge_editor'] = self.config['general'].get("merge_editor") \
                    or os.environ.get("MERGE_EDITOR")
            if self.config['general']['merge_editor'] is None:
                print("Error in config file\n" \
                        "Set path to your preferred text merge editor in khard's config file or the $MERGE_EDITOR shell variable\n" \
                        "Example for khard.conf: merge_editor = vimdiff")
                sys.exit(2)
            self.config['general']['merge_editor'] = find_executable(
                os.path.expanduser(self.config['general']['merge_editor']))
            if self.config['general']['merge_editor'] is None:
                print(
                    "Error in config file\nInvalid merge editor path or executable not found."
                )
                sys.exit(2)

            # default values for action and nickname settings
            if self.config['general'].has_key("default_action") == False:
                print(
                    "Error in config file\nMissing default action parameter.")
                sys.exit(2)
            elif self.config['general'][
                    'default_action'] not in self.get_list_of_actions():
                print("Error in config file\n" \
                        "Non existing value for default action parameter\n" \
                        "Possible values are: %s" % ', '.join(self.get_list_of_actions()))
                sys.exit(2)
            if self.config['general'].has_key("show_nicknames") == False:
                self.config['general']['show_nicknames'] = False
            elif self.config['general']['show_nicknames'] == "yes":
                self.config['general']['show_nicknames'] = True
            elif self.config['general']['show_nicknames'] == "no":
                self.config['general']['show_nicknames'] = False
            else:
                print(
                    "Error in config file\nshow_nicknames parameter must be yes or no."
                )
                sys.exit(2)

            # load address books
            error_counter = 0
            if self.config.has_key("addressbooks") == False:
                print(
                    "Error in config file\nMissing main section \"[addressbooks]\"."
                )
                sys.exit(2)
            if len(self.config['addressbooks'].keys()) == 0:
                print(
                    "Error in config file\nNo address book entries available.")
                sys.exit(2)
            for name in self.config['addressbooks'].keys():
                # create address book object
                try:
                    address_book = AddressBook(
                        name, self.config['addressbooks'][name]['path'])
                except KeyError as e:
                    print(
                        "Error in config file\nMissing path to the \"%s\" address book."
                        % name)
                    sys.exit(2)
                except IOError as e:
                    print("Error in config file\n%s" % e)
                    sys.exit(2)

                # load all vcard files
                for filename in glob.glob(
                        os.path.join(address_book.get_path(), "*.vcf")):
                    try:
                        address_book.add_contact(
                            CarddavObject.from_file(address_book, filename))
                    except IOError as e:
                        print("Error: Could not open file %s\n%s" %
                              (filename, e))
                        error_counter += 1
                    except vobject.base.ParseError as e:
                        print("Error: Could not parse file %s\n%s" %
                              (filename, e))
                        error_counter += 1

                # add address book to list
                self.address_book_list.append(address_book)

            # check if one or more contacts could not be parsed
            if error_counter > 0:
                if error_counter == 1:
                    print("\n1 vcard file could not be parsed")
                elif error_counter > 1:
                    print("\n%d vcard files could not be parsed" %
                          error_counter)
                sys.exit(2)
Esempio n. 16
0
from address_book import AddressBook


def check_entry(entry, expected_name, expected_number, expected_email):
    if entry.name == expected_name and entry.phone_number == expected_number and entry.email == expected_email:
        return True
    else:
        return False


# start of tests
print("=" * 25 + "\nSTART OF TESTS" + "\n" + "=" * 25)
errors = 0

book = AddressBook()

print("Entries = 0")
if len(book.entries) == 0:
    print("SUCCESS")
else:
    print("FAIL")
    errors += 1

print("\nEntries = 1")
book.add_entry('Jon Doe', '012.345.5789', '*****@*****.**')
if len(book.entries) == 1:
    print("SUCCESS")
else:
    print("FAIL")
    errors += 1
Esempio n. 17
0
                   city=input('City? '),
                   state=input('State? '),
                   zipcode=input('Zipcode? '))


def get_contact_from_user():
    ''' Returns a Address class with the data entered from user '''
    contact = Contact(name=get_name_from_user())
    if input('Do you want to enter your home address (y/n): ').lower() == 'y':
        contact.set_home_address(get_address_from_user())
    if input('Do you want to enter your work address (y/n): ').lower() == 'y':
        contact.set_work_address(get_address_from_user())
    return contact


ADDRESS_BOOK = AddressBook()

while True:
    ACTION = input(
        'What do you want to do (list/search/add/edit/delete/exit)? ').lower()
    if ACTION == 'add':
        ADDRESS_BOOK.add_contact(get_contact_from_user())
    elif ACTION == 'edit':
        print('Editing')
    elif ACTION == 'list':
        ADDRESS_BOOK.display()
    elif ACTION == 'search':
        CONTACT = ADDRESS_BOOK.get_by_name(get_name_from_user())
        if CONTACT:
            CONTACT.display()
        else:
 def test_step13_address_book_type_error(self):
     from address_book import AddressBook
     book = AddressBook("Test")
     with self.assertRaises(TypeError, msg="Test dupy się nie powiódł ;("):
         book.add_address("dupa")
 def test_step11_address_book_name(self):
     from address_book import AddressBook
     self.my_book = AddressBook("friends")
     self.assertEqual("friends", self.my_book.name)
Esempio n. 20
0
 def setUp(self):
     self.ab = AddressBook()
     with open('address_book.json', 'w'):
         pass
 def add_addresses_to_book(self):
     from address_book import AddressBook
     self.my_book = AddressBook("friends")
     self.my_book.add_address(self.get_address())
     self.my_book.add_address(self.get_work_address())
 def create_new_address_book():
     name = View.ask_for_adress_book_name()
     return AddressBook(name)
Esempio n. 23
0
 def __init__(self, i, o):
     super(ContactApp, self).__init__(i, o)
     self.menu_name = "Contacts"
     self.address_book = AddressBook()
     self.menu = None
Esempio n. 24
0
 def test_add_person_to_address_book(self, setup):
     book = AddressBook()
     book.append(setup)
     assert len(book) == 1
Esempio n. 25
0
 def test_add_group(self):
     address_book = AddressBook()
     group = Group('Brozzz')
     address_book.add_group(group)
     self.assertIn(group, address_book)
Esempio n. 26
0
 def test_delete_person_from_address_book(self, setup):
     book = AddressBook()
     book.append(setup)
     book.remove(setup)
     assert setup not in book