def test_only_escaped_hyphen(self): """ A test with '\-' as an alphabet """ gen = PasswordGenerator(alphabet=r'\-', length=1) self.assertEqual(gen._processed_alphabet, ['-']) self.assertEqual(gen.generate_password(), '-')
def generate_password(self): num_chars = self.characters_number.get() has_uppercase = self.value_checkbutton_uppercase.get() has_lowercase = self.value_checkbutton_lowercase.get() has_digits = self.value_checkbutton_digits.get() has_special_chars = self.value_checkbutton_special_chars.get() password_generator = PasswordGenerator(num_chars, has_digits, has_uppercase, has_lowercase, has_special_chars) random_password = password_generator.generate_password() self.change_password_on_entry(random_password)
class PasswordManager(Tk): def __init__(self): super().__init__() self.canvas = Canvas(width=200, height=150) self.password_generator = PasswordGenerator() self.file_handler = PasswordsDataFileHandler() self.website = None self.email = None self.password = None self.password_entry = None self.entries = [] self.passwords_data = [] self.config_app() self.mainloop() def generate_password(self): self.password_entry.delete(0, tk.END) password = self.password_generator.generate_password() self.password_entry.insert(0, string=password) return password def ask_user_to_save_current_data(self): try: website, email, password = self.passwords_data assert website and email and password except (AssertionError): messagebox.showerror(title="Error", message='Some fields are empty!') return else: is_ok = messagebox.askokcancel( title="Save", message= f"Website: {website}\nEmail: {email}\nPassword: {password}\n\nDo you want to save?" ) return is_ok def delete_entry_inputs(self): for entry in self.entries: entry.delete(0, tk.END) def click_submit_button(self): self.append_data_to_passwords_data() if self.ask_user_to_save_current_data(): self.append_passwords_data_to_file() self.delete_entry_inputs() self.passwords_data.clear() def append_passwords_data_to_file(self): self.file_handler.save_data_to_file(self.passwords_data) def append_data_to_passwords_data(self): for entry in self.entries: data = entry.get() self.passwords_data.append(data) def config_app(self): self.set_screen() self.add_password_image() self.add_labels() self.add_text_areas() self.add_buttons() def add_labels(self): website_label = tk.Label(text='Website:', bg='white') website_label.grid(row=1, column=0) email_label = tk.Label(text='Email:', bg='white') email_label.grid(row=2, column=0, padx=0) password_label = tk.Label(text='Password:'******'white') password_label.grid(row=3, column=0) def add_text_areas(self): website_entry = tk.Entry() website_entry.focus() website_entry.insert(0, 'https://www.google.com/') website_entry.grid(row=1, column=1) email_entry = tk.Entry() email_entry.insert(0, '*****@*****.**') email_entry.grid(row=2, column=1) self.password_entry = tk.Entry() self.password_entry.grid(row=3, column=1) self.entries.extend([website_entry, email_entry, self.password_entry]) def add_buttons(self): submit_button = tk.Button(text="Submit", borderwidth=1, command=self.click_submit_button) submit_button.grid(row=4, column=1, pady=20) generate_password = tk.Button(text="Generate Password", borderwidth=1, command=self.generate_password) generate_password.grid(row=4, column=0, pady=20) def add_password_image(self): image = Image.open(PASSWORD_IMAGE_PATH) image = image.resize((150, 150), Image.ANTIALIAS) self.password_image = ImageTk.PhotoImage(image) self.canvas.create_image(100, 80, image=self.password_image) self.canvas.config(bg='white', borderwidth=0, highlightthickness=0) self.canvas.grid(row=0, column=1, pady=20) def set_screen(self): self.title(f"Password Manager") self.config(padx=20, pady=20, background='#FFF') self.geometry('500x400') self.resizable(width=False, height=False)