Advertisement
Guest User

Untitled

a guest
Apr 9th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.85 KB | None | 0 0
  1. import contact
  2. import addressBook
  3. import re
  4. from sys import exit
  5. import random
  6.  
  7.  
  8. __author__ = 'Muhammad Arslan <rslnkrmt2552@gmail.com>'
  9.  
  10. app = addressBook.addressBook(str(raw_input("Enter name of book (Will be created if doesn't exist) n> ")))
  11. main_menu = 'n1. Show all contacts.n2. Add contact.n3. Search.n4. Delete a contact.n5.Update contact.n6. Exitnn>'
  12.  
  13. def exitProg():
  14. exitMessages = ['You have my permission to die.']
  15. print random.choice(exitMessages)
  16. exit(0)
  17.  
  18. def getOption(prompt):
  19. inp = raw_input(prompt)
  20. try:
  21. inp = int(inp)
  22. except ValueError:
  23. print 'You should have selected a proper option.'
  24. return 13
  25. return inp
  26.  
  27.  
  28. def showContacts():
  29. print 'show all'
  30.  
  31. def addContact():
  32. flag = 13
  33. while flag == 13:
  34. exp = map(lambda x: re.compile(x), [r'^([a-zA-Z]+)$', r'^(+)?(d)+$', r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$)"])
  35.  
  36. fName = str(raw_input('Enter first name : ')).strip()
  37. while not exp[0].match(fName):
  38. fName = str(raw_input('nWrong InputnEnter (proper) first name : ')).strip()
  39.  
  40. lName = str(raw_input('Enter last name : ')).strip()
  41. while not exp[0].match(lName):
  42. lName = str(raw_input('nWrong InputnEnter (proper) last name : ')).strip()
  43.  
  44. pNum = str(raw_input('Enter phone number : ')).strip()
  45. while not exp[1].match(pNum):
  46. pNum = str(raw_input('nWrong InputnEnter (proper) number : ')).strip()
  47.  
  48. email = str(raw_input('Enter email(Blank for none) : ')).strip()
  49. while not exp[2].match(email):
  50. if not email:
  51. break
  52. email = str(raw_input('nWrong InputnEnter (proper) email : ')).strip()
  53.  
  54. print app.addEntry(contact.Contact(fName, lName, pNum, email))
  55.  
  56. while (flag < 1) or (flag > 3):
  57. flag = getOption('n1. Add another.n2. Go to main menun3. Exit.nn> ')
  58. if flag == 2:
  59. break
  60. elif flag == 3:
  61. exitProg()
  62. else:
  63. flag = 13
  64.  
  65. def searchContact():
  66. print 'search'
  67.  
  68. def removeContact():
  69. name = str(raw_input('Enter first name of the contact: '))
  70. print app.removeEntry(name)
  71.  
  72. def updateContact():
  73. name = str(raw_input('Enter the first name of the contact: '))
  74. msg, cont = app.searchEntry(name)
  75. print msg
  76.  
  77.  
  78.  
  79. funcs = [showContacts, addContact, searchContact, removeContact, updateContact, exitProg]
  80.  
  81. while True:
  82. inp = getOption(main_menu)
  83. while inp < 1 or inp > 6:
  84. print 'Input a proper number, moron.'
  85. inp = getOption(main_menu)
  86. funcs[inp - 1]()
  87.  
  88. __author__ = 'Muhammad Arslan <rslnkrmt2552@gmail.com>'
  89.  
  90. class Contact(object):
  91. """Initialize a new contact object.
  92. Takes in name and phone number. Other arguments are optional."""
  93. def __init__(self, firstname, lastname, pNumber, email = ''):
  94. super(Contact, self).__init__()
  95. self.__firstName = firstname.lower()
  96. self.__lastName = lastname.lower()
  97. self.__pNumber = pNumber
  98. self.__email = email
  99.  
  100. def __str__(self):
  101. return self.getName() + 't' + self.getNumber()
  102.  
  103. def __eq__(self , other):
  104. return (self.getName() == other.getName()) or (self.getNumber() == other.getNumber())
  105.  
  106. def getName(self):
  107. return self.__firstName[0].upper()+self.__firstName[1:] + ' ' + self.__lastName[0].upper() + self.__lastName[1:]
  108.  
  109. def getFirstName(self):
  110. return self.__firstName
  111.  
  112. def getLastName(self):
  113. return self.__lastName
  114.  
  115. def getNumber(self):
  116. return self.__pNumber
  117.  
  118. def getEmail(self):
  119. return self.__email
  120.  
  121. def setFirstName(self, newFName):
  122. self.__firstName = newFName
  123.  
  124. def setLastName(self, newLName):
  125. self.__lastName = newLName
  126.  
  127. def setName(self, fullName):
  128. self.__firstName, self.__lastName = fullName.split(' ')
  129.  
  130. def setNumber(self, newNumber):
  131. self.__pNumber = newNumber
  132.  
  133. def setEmail(self, newEmail):
  134. self.__email = newEmail
  135.  
  136. try:
  137. import cPickle as pickle
  138. except:
  139. import pickle
  140. from hashlib import sha256
  141.  
  142. __author__ = 'Muhammad Arslan <rslnkrmt2552@gmail.com>'
  143.  
  144.  
  145. class addressBook():
  146. """Class : Addressbook"""
  147. def __init__(self, name):
  148. try:
  149. self.__name = self.createName(name)+ '.db'
  150. self.__db = open(self.__name, 'rb')
  151. self.__entries = pickle.load(self.__db)
  152. self.__db.close()
  153. except:
  154. self.__db = open(self.__name, 'wb')
  155. self.__entries = {}
  156. self.__db.close()
  157.  
  158. def __update(self):
  159. self.__db = open(self.__name, 'wb')
  160. pickle.dump(self.__entries, self.__db, -1)
  161. self.__db.close()
  162.  
  163. def addEntry(self, contact):
  164. name = contact.getFirstName()
  165. if name in self.__entries:
  166. return 'nContact already present.n'
  167. else:
  168. self.__entries[name] = contact
  169. self.__update()
  170. return 'nContact added successfully.n'
  171.  
  172. def removeEntry(self, name):
  173. if name in self.__entries:
  174. del self.__entries[name]
  175. self.__update()
  176. return 'nContact removed successfully.n'
  177. else:
  178. return 'nName not found.n'
  179.  
  180. def searchEntry(self, name):
  181. name = name.lower()
  182. if name in self.__entries:
  183. return ('Contact found.', self.__entries[name])
  184. else:
  185. return ('Contact not found.', None)
  186.  
  187. def updateEntry(self, name, param, val):
  188. name = name.lower()
  189. val = val.lower()
  190.  
  191. if name in self.__entries:
  192. k = self.__entries[name]
  193. funcs = [k.setFirstName, k.setLastName, k.setName, k.setNumber, k.setEmail]
  194. funcs[param-1](val)
  195. return 'nContact updated successfully.n'
  196. else:
  197. return 'nName not found.n'
  198.  
  199. @staticmethod
  200. def createName(mName):
  201. hsh = sha256(mName).hexdigest()
  202. return ''.join(hsh[1::3])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement