From 2ddcb90a33577a4c3fcb9ddda592fb7c3b6f29fd Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Mon, 9 Sep 2024 13:41:59 +0300 Subject: [PATCH 01/13] level_1 --- level_1/a_user_instance.py | 6 ++++-- level_1/b_student_full_name_method.py | 8 +++++--- level_1/c_product_class.py | 24 +++++++++++++++++++--- level_1/d_bank_account_increase_balance.py | 9 +++++--- level_1/e_bank_account_decrease_balance.py | 20 +++++++++++++++--- pyproject.toml | 14 +++++++++++++ 6 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 pyproject.toml diff --git a/level_1/a_user_instance.py b/level_1/a_user_instance.py index e5d0368..7baa7f9 100644 --- a/level_1/a_user_instance.py +++ b/level_1/a_user_instance.py @@ -12,7 +12,9 @@ def __init__(self, name: str, username: str, age: int, phone: str): self.age = age self.phone = phone + def __str__(self) -> str: + return f"Информация о пользователе: {self.name}, {self.username}, {self.age}, {self.phone}" -if __name__ == '__main__': - pass # код писать тут +if __name__ == "__main__": + print(User("john smith", "john_smith", 35, "+78003598989")) diff --git a/level_1/b_student_full_name_method.py b/level_1/b_student_full_name_method.py index 14ec439..0be5cd2 100644 --- a/level_1/b_student_full_name_method.py +++ b/level_1/b_student_full_name_method.py @@ -12,11 +12,13 @@ def __init__(self, name: str, surname: str, faculty: str, course: int): self.surname = surname self.faculty = faculty self.course = course + self.full_name = "" def get_full_name(self): return f"Student's full name: {self.surname}, {self.name}" -if __name__ == '__main__': - pass # код писать тут - +if __name__ == "__main__": + student = Student(name="john", surname="smith", faculty="economy", course=2) + student.full_name = student.get_full_name() + print(student.full_name) diff --git a/level_1/c_product_class.py b/level_1/c_product_class.py index 3952b66..f727b38 100644 --- a/level_1/c_product_class.py +++ b/level_1/c_product_class.py @@ -9,8 +9,26 @@ class Product: - pass # код писать тут + def __init__( + self, title: str, description: str, price: float, weight: float + ) -> None: + self.title = title + self.description = description + self.price = price + self.weight = weight + def __str__(self) -> str: + return f"Информация о продукте: {self.title}, {self.description}, {self.price}, {self.weight}" -if __name__ == '__main__': - pass # код писать тут + +if __name__ == "__main__": + str1 = "Конструкция пишущего узла шариковых ручек представляет собой металлическую трубку из нержавеющей стали." + str2 = "Между ее стенками располагается маленький вольфрамовый шарик." + str3 = "Во время его движения по бумаге он «обмазывается» пастообразными чернилами со стороны стержня." + product = Product( + title="Ручка шариковая", + description=f"{str1} {str2} {str3}", + price=15.55, + weight=0.01, + ) + print(product) diff --git a/level_1/d_bank_account_increase_balance.py b/level_1/d_bank_account_increase_balance.py index cc7a16c..b8f32cc 100644 --- a/level_1/d_bank_account_increase_balance.py +++ b/level_1/d_bank_account_increase_balance.py @@ -15,8 +15,11 @@ def __init__(self, owner_full_name: str, balance: float): self.balance = balance def increase_balance(self, income: float): - pass # код писать тут + self.balance += income -if __name__ == '__main__': - pass # код писать тут +if __name__ == "__main__": + bank_account = BankAccount("john smith", 100.0) + print(f"Баланс: {bank_account.balance}") + bank_account.increase_balance(35.25) + print(f"Баланс: {bank_account.balance}") diff --git a/level_1/e_bank_account_decrease_balance.py b/level_1/e_bank_account_decrease_balance.py index dfd4586..d62fc00 100644 --- a/level_1/e_bank_account_decrease_balance.py +++ b/level_1/e_bank_account_decrease_balance.py @@ -10,8 +10,22 @@ class BankAccount: - pass # код писать тут + def __init__(self, owner_full_name: str, balance: float): + self.owner_full_name = owner_full_name + self.balance = balance + def increase_balance(self, income: float): + self.balance += income -if __name__ == '__main__': - pass # код писать тут + def decrease_balance(self, cost: float): + if self.balance - cost < 0: + raise ValueError("balance must be above zero") + self.balance -= cost + + +if __name__ == "__main__": + bank_account = BankAccount("john smith", 100.0) + print(f"Баланс: {bank_account.balance}") + bank_account.decrease_balance(35.25) + print(f"Баланс: {bank_account.balance}") + bank_account.decrease_balance(100.0) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..eb775f8 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,14 @@ +[tool.poetry] +name = "oop-bases-challenges" +version = "0.1.0" +description = "" +authors = ["denis sergeevich pekshev "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.12" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" \ No newline at end of file From 1a04536ba3824fe604c640c647230f38faa38102 Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Mon, 9 Sep 2024 14:00:50 +0300 Subject: [PATCH 02/13] level_2 --- level_2/a_user_from_functions_to_class.py | 22 +++++++++++++++++++--- level_2/b_user_should_be_banned.py | 18 ++++++++++++++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/level_2/a_user_from_functions_to_class.py b/level_2/a_user_from_functions_to_class.py index 18a64ce..87975c9 100644 --- a/level_2/a_user_from_functions_to_class.py +++ b/level_2/a_user_from_functions_to_class.py @@ -1,4 +1,4 @@ -"""" +""" " У нас есть функции для работы с пользователем, но хочется работать с ним через класс. Задания: @@ -11,8 +11,24 @@ def make_username_capitalized(username: str): def generate_short_user_description(username: str, user_id: int, name: str): - return f'User with id {user_id} has {username} username and {name} name' + return f"User with id {user_id} has {username} username and {name} name" class User: - pass # код писать тут + def __init__(self, user_id: int, name: str, username: str) -> None: + self.user_id = user_id + self.name = name + self.username = username + + def make_username_capitalized(self) -> str: + return self.username.capitalize() + + def generate_short_user_description(self) -> str: + return f"User with id {self.user_id} has {self.username} username and {self.name} name" + + +if __name__ == "__main__": + user = User(user_id=1, name="john smith", username="john smith") + print( + f"{user.name}, {user.make_username_capitalized()}, {user.generate_short_user_description()}" + ) diff --git a/level_2/b_user_should_be_banned.py b/level_2/b_user_should_be_banned.py index 3ec9359..33e8e7c 100644 --- a/level_2/b_user_should_be_banned.py +++ b/level_2/b_user_should_be_banned.py @@ -7,8 +7,22 @@ Пользователя стоит забанить, если его фамилия находится в SURNAMES_TO_BAN. """ -SURNAMES_TO_BAN = ['Vaughn', 'Wilhelm', 'Santaros', 'Porter', 'Smith'] +SURNAMES_TO_BAN = ["Vaughn", "Wilhelm", "Santaros", "Porter", "Smith"] class User: - pass # код писать тут + def __init__(self, name: str, username: str, age: int): + self.name = name + self.username = username + self.age = age + + def should_be_banned(self) -> bool: + return self.name in SURNAMES_TO_BAN + + +if __name__ == "__main__": + user1 = User(name="Smith", username="john smith", age=35) + print(f"{user1.name} should_be_banned : {user1.should_be_banned()}") + + user2 = User(name="Croft", username="lara croft", age=25) + print(f"{user2.name} should_be_banned : {user2.should_be_banned()}") From ae6a6c2b38c121fd6bbba2a64f218bebdb4460f4 Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Tue, 17 Sep 2024 08:39:44 +0300 Subject: [PATCH 03/13] a_credit_bank_account.py --- level_3/a_credit_bank_account.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/level_3/a_credit_bank_account.py b/level_3/a_credit_bank_account.py index b73657a..a98b594 100644 --- a/level_3/a_credit_bank_account.py +++ b/level_3/a_credit_bank_account.py @@ -8,10 +8,8 @@ 4. Создать экземпляр класс CreditAccount и вызвать у него каждый из возможных методов. """ -# код писать тут - -class CreditAccount: +class BankAccount: def __init__(self, owner_full_name: str, balance: float): self.owner_full_name = owner_full_name self.balance = balance @@ -22,10 +20,20 @@ def increase_balance(self, amount: float): def decrease_balance(self, amount: float): self.balance -= amount + +class CreditAccount(BankAccount): def is_eligible_for_credit(self): return self.balance > 1000 -if __name__ == '__main__': - pass # код писать тут - +if __name__ == "__main__": + ba1 = BankAccount("Vasya", 1000.99) + ba1.increase_balance(548.98) + ba1.decrease_balance(125.54) + print(f"balance: {ba1.balance}") + ca1 = CreditAccount("Petya", 465.88) + ca1.increase_balance(1110.30) + ca1.decrease_balance(125.00) + print( + f"balance: {ca1.balance}, is_eligible_for_credit: {ca1.is_eligible_for_credit()}" + ) From 089eedef27f9557aa0f9454455df335db024fe2c Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Tue, 17 Sep 2024 08:51:53 +0300 Subject: [PATCH 04/13] b_user_manage.py --- level_3/b_user_manage.py | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/level_3/b_user_manage.py b/level_3/b_user_manage.py index 6417c77..6378d05 100644 --- a/level_3/b_user_manage.py +++ b/level_3/b_user_manage.py @@ -22,9 +22,36 @@ def get_users(self): return self.usernames -# код писать тут - - -if __name__ == '__main__': - pass # код писать тут - +class AdminManager(UserManager): + def ban_username(self, username: str): + if username not in self.get_users(): + print("Такого пользователя не существует.") + return + self.usernames.remove(username) + + +class SuperAdminManager(AdminManager): + def ban_all_users(self): + self.usernames.clear() + + +if __name__ == "__main__": + um1 = UserManager() + um1.add_user("Vasya") + um1.add_user("Petya") + um1.add_user("Slava") + + am1 = AdminManager() + am1.add_user("Vasya") + am1.add_user("Petya") + am1.add_user("Slava") + am1.ban_username("Slava") + am1.ban_username("Tolya") + + sam1 = SuperAdminManager() + sam1.add_user("Vasya") + sam1.add_user("Petya") + sam1.add_user("Slava") + sam1.ban_username("Slava") + sam1.ban_username("Tolya") + sam1.ban_all_users() From 6ae856612e1aa7d36a703d64cb9fde30ececf927 Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Tue, 17 Sep 2024 09:13:35 +0300 Subject: [PATCH 05/13] c_text_processor.py --- level_3/c_text_processor.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/level_3/c_text_processor.py b/level_3/c_text_processor.py index d9aed49..0fc251e 100644 --- a/level_3/c_text_processor.py +++ b/level_3/c_text_processor.py @@ -17,11 +17,24 @@ def to_upper(self): return self.text.upper() def summarize(self): - return f'Total text length: {len(self.text)}' + return f"Total text length: {len(self.text)}" -# код писать тут - - -if __name__ == '__main__': - pass # код писать тут +class AdvancedTextProcessor(TextProcessor): + def summarize(self): + return f"Total text length: {len(self.text)}, total number of words in the text: {len(self.text.split())}" + + +if __name__ == "__main__": + some_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit,\ + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\ + Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\ + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\ + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." + tp1 = TextProcessor(some_text) + print(tp1.to_upper()) + print(tp1.summarize()) + + atp1 = AdvancedTextProcessor(some_text) + print(atp1.to_upper()) + print(atp1.summarize()) From 5d7b683371ca39889a1530c4f7ed606e0b980b82 Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Tue, 17 Sep 2024 10:50:32 +0300 Subject: [PATCH 06/13] d_alcohol_product.py --- level_3/d_alcohol_product.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/level_3/d_alcohol_product.py b/level_3/d_alcohol_product.py index 49065b1..fe69f31 100644 --- a/level_3/d_alcohol_product.py +++ b/level_3/d_alcohol_product.py @@ -9,6 +9,7 @@ Для определения текущего часа можно использовать datetime.now().hour 3. Создайте экземпляр класса AlcoholProduct и проверьте, можно ли сейчас продавать алкоголь. """ + from datetime import datetime @@ -26,8 +27,10 @@ def is_available(self): class AlcoholProduct(Product): - pass # код писать тут + def is_available(self): + return super().is_available() and 5 <= datetime.now().hour <= 11 -if __name__ == '__main__': - pass # код писать тут +if __name__ == "__main__": + ap1 = AlcoholProduct("beer", 50.5, 10) + print(ap1.is_available()) From fc21603e51ae6f9e86354dde395db8615c4e11c3 Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Mon, 23 Sep 2024 08:45:17 +0300 Subject: [PATCH 07/13] correct mistakes and notices --- level_3/c_text_processor.py | 4 +++- level_3/d_alcohol_product.py | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/level_3/c_text_processor.py b/level_3/c_text_processor.py index 0fc251e..8903060 100644 --- a/level_3/c_text_processor.py +++ b/level_3/c_text_processor.py @@ -22,7 +22,9 @@ def summarize(self): class AdvancedTextProcessor(TextProcessor): def summarize(self): - return f"Total text length: {len(self.text)}, total number of words in the text: {len(self.text.split())}" + total_text_length = len(self.text) + total_number_of_words = len(self.text.split()) + return f"Total text length: {total_text_length}, total number of words in the text: {total_number_of_words}" if __name__ == "__main__": diff --git a/level_3/d_alcohol_product.py b/level_3/d_alcohol_product.py index fe69f31..545f279 100644 --- a/level_3/d_alcohol_product.py +++ b/level_3/d_alcohol_product.py @@ -28,7 +28,8 @@ def is_available(self): class AlcoholProduct(Product): def is_available(self): - return super().is_available() and 5 <= datetime.now().hour <= 11 + available_hours = [hour for hour in range(5, 23)] + return super().is_available() and datetime.now().hour in available_hours if __name__ == "__main__": From 1eaeecbacd33f7268a02d13275818a4beabacfcd Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Tue, 1 Oct 2024 10:50:18 +0300 Subject: [PATCH 08/13] level_4/a_file_handler.py --- level_4/a_file_handler.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/level_4/a_file_handler.py b/level_4/a_file_handler.py index c05ce7d..5b0850e 100644 --- a/level_4/a_file_handler.py +++ b/level_4/a_file_handler.py @@ -12,6 +12,7 @@ С помощью экземпляра CSVHandler прочитайте и распечатайте содержимое файла user_info.csv """ + import csv import json @@ -21,17 +22,27 @@ def __init__(self, filename): self.filename = filename def read(self): - with open(self.filename, 'r') as file: + with open(self.filename, "r") as file: return file.read() class JSONHandler(FileHandler): - pass # код писать тут + def read(self): + with open(self.filename, "r") as file: + return json.loads(file.read()) class CSVHandler(FileHandler): - pass # код писать тут - - -if __name__ == '__main__': - pass # код писать тут + def read(self): + with open(self.filename, "r") as file: + reader = csv.DictReader(file) + return [ + {"Name": line["Name"], "Age": line["Age"], "Email": line["Email"]} + for line in reader + ] + + +if __name__ == "__main__": + print(FileHandler("level_4/data/text.txt").read()) + print(JSONHandler("level_4/data/recipes.json").read()) + print(CSVHandler("level_4/data/user_info.csv").read()) From ac2446bb3a6c1f4db48da87288bba2a559555ca9 Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Tue, 1 Oct 2024 11:16:18 +0300 Subject: [PATCH 09/13] level_4/b_food_product.py --- level_4/b_food_product.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/level_4/b_food_product.py b/level_4/b_food_product.py index 993325a..ce52728 100644 --- a/level_4/b_food_product.py +++ b/level_4/b_food_product.py @@ -10,6 +10,7 @@ меньше чем текущая дата - то is_available должен возвращать False. Используйте super() для этого. 3. Создайте экземпляры каждого из двух классов и вызовите у них все доступные методы """ + from datetime import datetime @@ -19,15 +20,30 @@ def __init__(self, title, quantity): self.quantity = quantity def get_full_info(self): - return f'Product {self.title}, {self.quantity} in stock.' + return f"Product {self.title}, {self.quantity} in stock." def is_available(self): return self.quantity > 0 class FoodProduct(Product): - pass # код писать тут + def __init__(self, title, quantity, expiration_date): + super().__init__(title, quantity) + self.expiration_date = expiration_date + + def get_full_info(self): + formated_date = datetime.strftime(self.expiration_date, "%Y-%M-%d") + return f"FoodProduct {self.title}, {self.quantity}, {formated_date} in stock." + + def is_available(self): + return super().is_available() and self.expiration_date > datetime.now() + +if __name__ == "__main__": + product = Product("Пила", 12) + print(product.get_full_info()) + print(f"is available {product.is_available()}") -if __name__ == '__main__': - pass # код писать тут + food_product = FoodProduct("Молоко", 0, datetime.strptime("2024-10-15", "%Y-%M-%d")) + print(food_product.get_full_info()) + print(f"is available {food_product.is_available()}") From e327b704fd6281a5d1bf2599026f68e2be3d30ee Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Tue, 1 Oct 2024 11:22:31 +0300 Subject: [PATCH 10/13] level_5/a_premium_food.py --- level_5/a_premium_food.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/level_5/a_premium_food.py b/level_5/a_premium_food.py index 4745369..8d8be45 100644 --- a/level_5/a_premium_food.py +++ b/level_5/a_premium_food.py @@ -17,7 +17,7 @@ def __init__(self, title: str, price: float): self.price = price def get_product_info(self): - return f'Product title: {self.title}, price: {self.price}' + return f"Product title: {self.title}, price: {self.price}" class FoodProductMixin: @@ -25,6 +25,19 @@ def is_premium_food(self): return self.price > 10 -if __name__ == '__main__': - pass # код писать тут +class FoodProduct(FoodProductMixin, Product): + def get_product_info(self): + if super().is_premium_food(): + return f"Product title: {self.title}, price: {self.price} (Premium)" + return f"Product title: {self.title}, price: {self.price}" + + +if __name__ == "__main__": + product = Product("Brick", 50.0) + print(product.get_product_info()) + + product1 = FoodProduct("Milk", 7.0) + print(product1.get_product_info()) + product2 = FoodProduct("Black caviar", 100.0) + print(product2.get_product_info()) From f56578de4bd00b4ecc45635b9eb03c072581918a Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Tue, 1 Oct 2024 12:11:11 +0300 Subject: [PATCH 11/13] level_5/b_change_admin_email.py --- level_5/b_change_admin_email.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/level_5/b_change_admin_email.py b/level_5/b_change_admin_email.py index 9ead126..74ca327 100644 --- a/level_5/b_change_admin_email.py +++ b/level_5/b_change_admin_email.py @@ -19,17 +19,18 @@ def change_email(self, new_email): class AdminUserMixin: def change_email(self, new_email): - raise SystemError('It is impossible to change the email address of the administrator') + raise SystemError( + "It is impossible to change the email address of the administrator" + ) -class AdminUser(User, AdminUserMixin): +class AdminUser(AdminUserMixin, User): def change_user_info(self, user: User, new_username: str, new_email: str): user.username = new_username user.email = new_email -if __name__ == '__main__': - admin_user = AdminUser(username='python_dev', email='learnpython@yandex.ru') - admin_user.change_email('new_email@gmail.com') +if __name__ == "__main__": + admin_user = AdminUser(username="python_dev", email="learnpython@yandex.ru") + admin_user.change_email("new_email@gmail.com") print(admin_user.email) - From 3ca8edbec047a48a6bab796dd754cace7560247b Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Tue, 1 Oct 2024 12:20:01 +0300 Subject: [PATCH 12/13] level_5/c_authorization_form_mixin.py --- level_5/c_authorization_form_mixin.py | 31 ++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/level_5/c_authorization_form_mixin.py b/level_5/c_authorization_form_mixin.py index b0292c3..13d113c 100644 --- a/level_5/c_authorization_form_mixin.py +++ b/level_5/c_authorization_form_mixin.py @@ -9,7 +9,15 @@ 3. Создайте экземпляр класса AuthorizationForm и вызовите у него метод valid_form. Должны отрабатывать обе проверки: и на длину пароля и на наличия юзернэйма в базе """ -USERNAMES_IN_DB = ['Alice_2023', 'BobTheBuilder', 'CrazyCoder', 'DataDiva', 'EpicGamer', 'JavaJunkie'] + +USERNAMES_IN_DB = [ + "Alice_2023", + "BobTheBuilder", + "CrazyCoder", + "DataDiva", + "EpicGamer", + "JavaJunkie", +] class Form: @@ -23,11 +31,24 @@ def valid_form(self): class AuthorizationFormMixin: def valid_form(self): - pass # писать код тут + return ( + super().valid_form() and True if self.username in USERNAMES_IN_DB else False + ) + + +class AuthorizationForm(AuthorizationFormMixin, Form): + pass + +if __name__ == "__main__": + auth_form = AuthorizationForm("Alice_2023", "123456789") + print(f"{auth_form.valid_form()}") -# писать код тут + auth_form = AuthorizationForm("Alice_2023", "12345") + print(f"{auth_form.valid_form()}") + auth_form = AuthorizationForm("threat", "123456789") + print(f"{auth_form.valid_form()}") -if __name__ == '__main__': - pass # писать код тут + auth_form = AuthorizationForm("threat", "12345") + print(f"{auth_form.valid_form()}") From 44bd08897a777f0b29e47a14445ce10480414655 Mon Sep 17 00:00:00 2001 From: denis sergeevich pekshev Date: Tue, 1 Oct 2024 12:34:50 +0300 Subject: [PATCH 13/13] level_5/d_response_headers.py --- level_5/d_response_headers.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/level_5/d_response_headers.py b/level_5/d_response_headers.py index c9413b5..d3e1fc0 100644 --- a/level_5/d_response_headers.py +++ b/level_5/d_response_headers.py @@ -17,16 +17,16 @@ def __init__(self, content: str): self.content = content def get_byte_content_length(self): - return len(self.content.encode('utf-8')) + return len(self.content.encode("utf-8")) class BaseHeadersMixin: def generate_base_headers(self): return { - 'Content-Type': 'application/x-www-form-urlencoded', - 'user-agent': ( - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ' - 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36' + "Content-Type": "application/x-www-form-urlencoded", + "user-agent": ( + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) " + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" ), } @@ -34,7 +34,13 @@ def generate_headers(self): return self.generate_base_headers() -# код писать тут +class CustomResponse(BaseHeadersMixin, BaseResponse): + def generate_headers(self): + base_headers = super().generate_headers() + base_headers.update({"Content-Length": super().get_byte_content_length()}) + return base_headers + -if __name__ == '__main__': - pass # код писать тут +if __name__ == "__main__": + response = CustomResponse("some content") + print(response.generate_headers())