From 568e0e103c7b7d7761a43fe636fbca4950051774 Mon Sep 17 00:00:00 2001 From: J D Date: Thu, 26 May 2022 01:01:42 +0300 Subject: [PATCH 01/99] Add .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..600d2d33 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode \ No newline at end of file From 2cdd4af837e17e7067496c4284b942fdbe41693d Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 08:36:20 +0300 Subject: [PATCH 02/99] create Task1 module --- AndreyOzerets/Task1.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 AndreyOzerets/Task1.py diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py new file mode 100644 index 00000000..e69de29b From 3deb52681f8018c9d79eb9601f919e34a258962c Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 08:37:24 +0300 Subject: [PATCH 03/99] add a dockstring --- AndreyOzerets/Task1.py | 1 + 1 file changed, 1 insertion(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index e69de29b..d356d5ae 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -0,0 +1 @@ +# Task 7.1 From d13b33275f939da400eadec7ab7a3c6fd8d0ad15 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 08:43:55 +0300 Subject: [PATCH 04/99] create MyOpen class --- AndreyOzerets/Task1.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index d356d5ae..f172ef67 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -1 +1,4 @@ # Task 7.1 + +class MyOpen: + pass From faa7c21e55dcca76614dd0ab5db9af7cb7cbe988 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 08:44:36 +0300 Subject: [PATCH 05/99] override __init__ --- AndreyOzerets/Task1.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index f172ef67..41435092 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -1,4 +1,7 @@ # Task 7.1 class MyOpen: - pass + def __init__(self, file, mode='r') -> None: + self._file = file + self._mode = mode + self._file_obj = None From ef32b6459815e31ed7310cefe2bbdb807bc5eb2f Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:01:21 +0300 Subject: [PATCH 06/99] override __enter__ --- AndreyOzerets/Task1.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index 41435092..5dc92284 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -1,7 +1,12 @@ # Task 7.1 + class MyOpen: def __init__(self, file, mode='r') -> None: self._file = file self._mode = mode self._file_obj = None + + def __enter__(self): + self._file_obj = open(self._file, self._mode) + return self._file_obj From de61ea26dcf03a8bf3f1c64225403ef073932d9e Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:01:57 +0300 Subject: [PATCH 07/99] override __exit__ --- AndreyOzerets/Task1.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index 5dc92284..e2b70cab 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -10,3 +10,6 @@ def __init__(self, file, mode='r') -> None: def __enter__(self): self._file_obj = open(self._file, self._mode) return self._file_obj + + def __exit__(self, exc_type, exc_val, exc_tb): + self._file_obj.close() From c25e403598e19c857c78627fd9a36e36805641d7 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:07:21 +0300 Subject: [PATCH 08/99] call the main program --- AndreyOzerets/Task1.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index e2b70cab..dfd58d5f 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -13,3 +13,15 @@ def __enter__(self): def __exit__(self, exc_type, exc_val, exc_tb): self._file_obj.close() + + +if __name__ == '__main__': + try: + with MyOpen('d.txt', 'r') as mo: + mo.write('OK') + except FileNotFoundError as e: + print(f'\n*** Is the filename correct?: {e}', end='\n\n') + raise SystemExit + except ValueError as e: + print(f'\n*** Is the mode correct?: {e}', end='\n\n') + raise SystemExit From 12c3e8b45fe0d37cacdffb381e2ff53934336f5c Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:08:10 +0300 Subject: [PATCH 09/99] create _print_ex function --- AndreyOzerets/Task1.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index dfd58d5f..b4d8242b 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -15,6 +15,11 @@ def __exit__(self, exc_type, exc_val, exc_tb): self._file_obj.close() +def _print_ex(): + *_, exc_traceback = sys.exc_info() + traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) + + if __name__ == '__main__': try: with MyOpen('d.txt', 'r') as mo: From 4bd49393187c339efbaaafb14d502490a85bfe4d Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:08:33 +0300 Subject: [PATCH 10/99] import sys --- AndreyOzerets/Task1.py | 1 + 1 file changed, 1 insertion(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index b4d8242b..2d659524 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -1,4 +1,5 @@ # Task 7.1 +import sys class MyOpen: From 6a51731c7cc5c6cf1c444b5d99fff5f5816e6508 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:08:51 +0300 Subject: [PATCH 11/99] import traceback --- AndreyOzerets/Task1.py | 1 + 1 file changed, 1 insertion(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index 2d659524..3487d9d4 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -1,5 +1,6 @@ # Task 7.1 import sys +import traceback class MyOpen: From b0f21975efa99d698c211b5c892eec24ff0c4bc6 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:09:43 +0300 Subject: [PATCH 12/99] call _print_ex function --- AndreyOzerets/Task1.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index 3487d9d4..db52cc20 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -27,8 +27,10 @@ def _print_ex(): with MyOpen('d.txt', 'r') as mo: mo.write('OK') except FileNotFoundError as e: + _print_ex() print(f'\n*** Is the filename correct?: {e}', end='\n\n') raise SystemExit except ValueError as e: + _print_ex() print(f'\n*** Is the mode correct?: {e}', end='\n\n') raise SystemExit From 99eb26201c42f59416095bb3ad115e04b3dbf6d1 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:10:19 +0300 Subject: [PATCH 13/99] add a dockstrint to the _print_ex function --- AndreyOzerets/Task1.py | 1 + 1 file changed, 1 insertion(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index db52cc20..fef0b377 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -18,6 +18,7 @@ def __exit__(self, exc_type, exc_val, exc_tb): def _print_ex(): + """Print traceback""" *_, exc_traceback = sys.exc_info() traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) From 0e1483260be4590f502a1cbb1ac4ea084da7eca5 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:10:45 +0300 Subject: [PATCH 14/99] add a dockstrint to the MyOpen class --- AndreyOzerets/Task1.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AndreyOzerets/Task1.py b/AndreyOzerets/Task1.py index fef0b377..ac0849dd 100644 --- a/AndreyOzerets/Task1.py +++ b/AndreyOzerets/Task1.py @@ -4,6 +4,8 @@ class MyOpen: + """Context manager for opening and working with file""" + def __init__(self, file, mode='r') -> None: self._file = file self._mode = mode From 830e988c956f43d428d18caee865f4487a3a1b15 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:13:45 +0300 Subject: [PATCH 15/99] create Task2 module --- Task2.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 Task2.py diff --git a/Task2.py b/Task2.py new file mode 100644 index 00000000..ca9f16c9 --- /dev/null +++ b/Task2.py @@ -0,0 +1 @@ +# Task 7.2 From 3b4ca0cbb7e2cf3e042781a8ce05009e6024681e Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:27:47 +0300 Subject: [PATCH 16/99] create my_open function --- Task2.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Task2.py b/Task2.py index ca9f16c9..f9988081 100644 --- a/Task2.py +++ b/Task2.py @@ -1 +1,11 @@ # Task 7.2 +from contextlib import contextmanager + + +@contextmanager +def my_open(file, mode='r'): + f = open(file, mode) + try: + yield f + finally: + f.close() From 5132409d540326d629136d17d8b3a9f919ea9f52 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:29:22 +0300 Subject: [PATCH 17/99] call the main program --- Task2.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Task2.py b/Task2.py index f9988081..fc0cfce4 100644 --- a/Task2.py +++ b/Task2.py @@ -9,3 +9,18 @@ def my_open(file, mode='r'): yield f finally: f.close() + + +if __name__ == '__main__': + + try: + with my_open('a.txt', 'w') as mo: + mo.write('OK') + except FileNotFoundError as e: + _print_ex() + print(f'\n*** Is the filename correct?: {e}', end='\n\n') + raise SystemExit + except ValueError as e: + _print_ex() + print(f'\n*** Is the mode correct?: {e}', end='\n\n') + raise SystemExit From 283977c3d1c8fdd1591f81213e6e5bc5f5ba94d9 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:30:03 +0300 Subject: [PATCH 18/99] create _print_ex function --- Task2.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Task2.py b/Task2.py index fc0cfce4..bcea8985 100644 --- a/Task2.py +++ b/Task2.py @@ -11,6 +11,12 @@ def my_open(file, mode='r'): f.close() +def _print_ex(): + """Print traceback""" + *_, exc_traceback = sys.exc_info() + traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) + + if __name__ == '__main__': try: From bc78409618f13c3acd884efcc241684b539e621a Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:30:23 +0300 Subject: [PATCH 19/99] import sys --- Task2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Task2.py b/Task2.py index bcea8985..b11506f6 100644 --- a/Task2.py +++ b/Task2.py @@ -1,5 +1,6 @@ # Task 7.2 from contextlib import contextmanager +import sys @contextmanager From e35ac44946aadc022f111677c50287b586c8f46a Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:30:42 +0300 Subject: [PATCH 20/99] import traceback --- Task2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Task2.py b/Task2.py index b11506f6..8483ae47 100644 --- a/Task2.py +++ b/Task2.py @@ -1,6 +1,7 @@ # Task 7.2 from contextlib import contextmanager import sys +import traceback @contextmanager From a31d14759863946d8ddbd905be711d7e5d11e6ab Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:33:26 +0300 Subject: [PATCH 21/99] add a dockstring to the my_open function --- Task2.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Task2.py b/Task2.py index 8483ae47..d0d9888c 100644 --- a/Task2.py +++ b/Task2.py @@ -6,6 +6,8 @@ @contextmanager def my_open(file, mode='r'): + """Context manager for opening and working with file""" + f = open(file, mode) try: yield f From 72596b8dacd3bf68696543b5193518b289a5d07b Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 09:34:12 +0300 Subject: [PATCH 22/99] create Task3 module --- Task3.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 Task3.py diff --git a/Task3.py b/Task3.py new file mode 100644 index 00000000..2b69d2a8 --- /dev/null +++ b/Task3.py @@ -0,0 +1 @@ +# Task 7.3 From 04064d9afb20689bff9c2f437c5d9f9e6c13200f Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:25:26 +0300 Subject: [PATCH 23/99] create ExecutionTimeToLogFile class --- Task3.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Task3.py b/Task3.py index 2b69d2a8..0da24b19 100644 --- a/Task3.py +++ b/Task3.py @@ -1 +1,4 @@ # Task 7.3 + +class ExecutionTimeToLogFile(ContextDecorator): + pass From 4ea99dc8730fb9d6921e5758087d8486ce6de416 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:26:22 +0300 Subject: [PATCH 24/99] import ContextDecorator --- Task3.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Task3.py b/Task3.py index 0da24b19..06ddc486 100644 --- a/Task3.py +++ b/Task3.py @@ -1,4 +1,6 @@ # Task 7.3 +from contextlib import ContextDecorator + class ExecutionTimeToLogFile(ContextDecorator): pass From 7d23dd280443877af33027ce274334b2816deda0 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:26:52 +0300 Subject: [PATCH 25/99] override __init__ --- Task3.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Task3.py b/Task3.py index 06ddc486..6d1a922c 100644 --- a/Task3.py +++ b/Task3.py @@ -3,4 +3,6 @@ class ExecutionTimeToLogFile(ContextDecorator): - pass + def __init__(self, file) -> None: + super().__init__() + self._file = file From a5d1aea9d26b83416b971fc42e48760a41418611 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:27:21 +0300 Subject: [PATCH 26/99] override __enter__ --- Task3.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Task3.py b/Task3.py index 6d1a922c..435376e8 100644 --- a/Task3.py +++ b/Task3.py @@ -6,3 +6,8 @@ class ExecutionTimeToLogFile(ContextDecorator): def __init__(self, file) -> None: super().__init__() self._file = file + + def __enter__(self): + print('Starting') + self._start = time() + return self From ffdbdf52e589bf0f2222a8a529d18b1b3364e04d Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:28:23 +0300 Subject: [PATCH 27/99] import time --- Task3.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Task3.py b/Task3.py index 435376e8..c953f8e4 100644 --- a/Task3.py +++ b/Task3.py @@ -1,5 +1,6 @@ # Task 7.3 from contextlib import ContextDecorator +from time import time class ExecutionTimeToLogFile(ContextDecorator): From 8bf13575acd12fc8f868a89bb9159270e08a2792 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:28:53 +0300 Subject: [PATCH 28/99] override __exit__ --- Task3.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Task3.py b/Task3.py index c953f8e4..fd0d78ad 100644 --- a/Task3.py +++ b/Task3.py @@ -12,3 +12,9 @@ def __enter__(self): print('Starting') self._start = time() return self + + def __exit__(self, *exc): + _stop = str(time() - self._start) + with open(self._file, 'w') as f: + f.write(f'Execution time is {_stop}') + print('Finishing') From d57894b850fcb7164348e33f96438acb0a63d8ba Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:29:29 +0300 Subject: [PATCH 29/99] create fun function --- Task3.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Task3.py b/Task3.py index fd0d78ad..524e6edd 100644 --- a/Task3.py +++ b/Task3.py @@ -18,3 +18,8 @@ def __exit__(self, *exc): with open(self._file, 'w') as f: f.write(f'Execution time is {_stop}') print('Finishing') + + +def fun(): + for _ in range(50): + sleep(0.01) From 3adbcde681896ce9ea00acc71534fc2cc61bf928 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:29:57 +0300 Subject: [PATCH 30/99] import sleep --- Task3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Task3.py b/Task3.py index 524e6edd..b6f10924 100644 --- a/Task3.py +++ b/Task3.py @@ -1,6 +1,6 @@ # Task 7.3 from contextlib import ContextDecorator -from time import time +from time import sleep, time class ExecutionTimeToLogFile(ContextDecorator): From 38500d9c77ac6291929369d7a4502bcc3b55db9f Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:30:43 +0300 Subject: [PATCH 31/99] add a decorator to the fun function --- Task3.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Task3.py b/Task3.py index b6f10924..a964b3d6 100644 --- a/Task3.py +++ b/Task3.py @@ -20,6 +20,7 @@ def __exit__(self, *exc): print('Finishing') +@ExecutionTimeToLogFile('log-file.txt') def fun(): for _ in range(50): sleep(0.01) From bbdaf927d35ae770df57aaf42d98854fb0a1d925 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:31:36 +0300 Subject: [PATCH 32/99] call main function --- Task3.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Task3.py b/Task3.py index a964b3d6..189879dc 100644 --- a/Task3.py +++ b/Task3.py @@ -24,3 +24,7 @@ def __exit__(self, *exc): def fun(): for _ in range(50): sleep(0.01) + + +if __name__ == '__main__': + fun() From 1f8165c7cb8ff35d29466aab4427c27f8a7b9083 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:32:19 +0300 Subject: [PATCH 33/99] add a docstring to the fun function --- Task3.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Task3.py b/Task3.py index 189879dc..58e995ec 100644 --- a/Task3.py +++ b/Task3.py @@ -22,6 +22,8 @@ def __exit__(self, *exc): @ExecutionTimeToLogFile('log-file.txt') def fun(): + """Something very important""" + for _ in range(50): sleep(0.01) From 0041df4db65c78944a8d9e245aa5ca0a78c41418 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:33:03 +0300 Subject: [PATCH 34/99] add a docstring to the ExecutionTimeToLogFile class --- Task3.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Task3.py b/Task3.py index 58e995ec..e18cc7c6 100644 --- a/Task3.py +++ b/Task3.py @@ -4,6 +4,11 @@ class ExecutionTimeToLogFile(ContextDecorator): + """Decorator with context manager + + Support for writing execution time to log-file. + """ + def __init__(self, file) -> None: super().__init__() self._file = file From 9f1c34489f97b7e74ab9ac5495c5e055a3144c2e Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:40:00 +0300 Subject: [PATCH 35/99] crteate Task4 module --- Task4.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 Task4.py diff --git a/Task4.py b/Task4.py new file mode 100644 index 00000000..31ad77f3 --- /dev/null +++ b/Task4.py @@ -0,0 +1 @@ +# Task 7.4 From b567ede8a9e38a61938882487658e22d2b600335 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:48:00 +0300 Subject: [PATCH 36/99] create SupressDecorator class --- Task4.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Task4.py b/Task4.py index 31ad77f3..0faa27d2 100644 --- a/Task4.py +++ b/Task4.py @@ -1 +1,5 @@ # Task 7.4 + + +class SupressDecorator(ContextDecorator): + pass From 0859cbde94580e4ca3a6930020e1eba0be69c838 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:48:39 +0300 Subject: [PATCH 37/99] override __init__ --- Task4.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Task4.py b/Task4.py index 0faa27d2..9135fdc0 100644 --- a/Task4.py +++ b/Task4.py @@ -2,4 +2,6 @@ class SupressDecorator(ContextDecorator): - pass + def __init__(self, file) -> None: + super().__init__() + self._file = file From 35e946c15e225701543bd9d09aa351448da2ac7d Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:49:09 +0300 Subject: [PATCH 38/99] override __enter__ --- Task4.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Task4.py b/Task4.py index 9135fdc0..8fd9f290 100644 --- a/Task4.py +++ b/Task4.py @@ -5,3 +5,8 @@ class SupressDecorator(ContextDecorator): def __init__(self, file) -> None: super().__init__() self._file = file + + def __enter__(self): + print('Starting') + self._start = time() + return self From 4033f0e4a8aff68ad76bbd1a155e0576183c66fe Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:49:38 +0300 Subject: [PATCH 39/99] import ContextDecorator --- Task4.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Task4.py b/Task4.py index 8fd9f290..56ea6807 100644 --- a/Task4.py +++ b/Task4.py @@ -1,5 +1,7 @@ # Task 7.4 +from contextlib import ContextDecorator + class SupressDecorator(ContextDecorator): def __init__(self, file) -> None: From f9cc7ca8eed01eeddc0572950c4ef8962efa3361 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:50:01 +0300 Subject: [PATCH 40/99] import sleep --- Task4.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Task4.py b/Task4.py index 56ea6807..e8bcf799 100644 --- a/Task4.py +++ b/Task4.py @@ -1,6 +1,7 @@ # Task 7.4 from contextlib import ContextDecorator +from time import time class SupressDecorator(ContextDecorator): From b95219c9fb5b3963f4838d909709bdb0a9425dd4 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:51:29 +0300 Subject: [PATCH 41/99] override __exit__ --- Task4.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Task4.py b/Task4.py index e8bcf799..bf880e3d 100644 --- a/Task4.py +++ b/Task4.py @@ -13,3 +13,15 @@ def __enter__(self): print('Starting') self._start = time() return self + + def __exit__(self, exc_type, exc_val, exc_tb): + _stop = str(time() - self._start) + message = f'Execution time is {_stop}' + if exc_type: + with open(self._file, 'w') as f: + f.write(message) + else: + print(message) + + print('Finishing') + return True From 676cbd6e53f54b1584e110c2c173467619ecc3bf Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:56:21 +0300 Subject: [PATCH 42/99] create fun function --- Task4.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Task4.py b/Task4.py index bf880e3d..d4df0ae7 100644 --- a/Task4.py +++ b/Task4.py @@ -25,3 +25,11 @@ def __exit__(self, exc_type, exc_val, exc_tb): print('Finishing') return True + + +@SupressDecorator('log-file.txt') +def fun(): + """Something very important""" + + for _ in range(50): + sleep(0.01) From 4d062112bf39e698da7af94566c146497a13e748 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:57:30 +0300 Subject: [PATCH 43/99] import sleep/ --- Task4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Task4.py b/Task4.py index d4df0ae7..ecfc0996 100644 --- a/Task4.py +++ b/Task4.py @@ -1,7 +1,7 @@ # Task 7.4 from contextlib import ContextDecorator -from time import time +from time import sleep, time class SupressDecorator(ContextDecorator): From 7c224b993808e953046028050a129d2b53a3f91b Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:59:03 +0300 Subject: [PATCH 44/99] call main funcrion --- Task4.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Task4.py b/Task4.py index ecfc0996..ec058ba5 100644 --- a/Task4.py +++ b/Task4.py @@ -33,3 +33,11 @@ def fun(): for _ in range(50): sleep(0.01) + + +if __name__ == '__main__': + + with SupressDecorator('log-file.txt'): + for _ in range(50): + sleep(0.01) + raise Exception('---') From 10af06696fdf28884a032ee7b266fd056fd36fc5 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 11:59:46 +0300 Subject: [PATCH 45/99] add a dockstring to the SupressDecorator class --- Task4.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Task4.py b/Task4.py index ec058ba5..5f666be4 100644 --- a/Task4.py +++ b/Task4.py @@ -5,6 +5,8 @@ class SupressDecorator(ContextDecorator): + """Decorator for supressing exceptions""" + def __init__(self, file) -> None: super().__init__() self._file = file From c5d4a5843afbb146ef357a8db0830cdb33624b36 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 12:02:07 +0300 Subject: [PATCH 46/99] move files to AndreyOzerets folder --- Task2.py => AndreyOzerets/Task2.py | 0 Task3.py => AndreyOzerets/Task3.py | 0 Task4.py => AndreyOzerets/Task4.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename Task2.py => AndreyOzerets/Task2.py (100%) rename Task3.py => AndreyOzerets/Task3.py (100%) rename Task4.py => AndreyOzerets/Task4.py (100%) diff --git a/Task2.py b/AndreyOzerets/Task2.py similarity index 100% rename from Task2.py rename to AndreyOzerets/Task2.py diff --git a/Task3.py b/AndreyOzerets/Task3.py similarity index 100% rename from Task3.py rename to AndreyOzerets/Task3.py diff --git a/Task4.py b/AndreyOzerets/Task4.py similarity index 100% rename from Task4.py rename to AndreyOzerets/Task4.py From 21f4d341367f2be4b5915b1e4029c9c9bdb557aa Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 12:31:41 +0300 Subject: [PATCH 47/99] create Task5 module --- AndreyOzerets/Task5.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 AndreyOzerets/Task5.py diff --git a/AndreyOzerets/Task5.py b/AndreyOzerets/Task5.py new file mode 100644 index 00000000..e69de29b From af74a3cfa692d9f2a2164245a15f3fa32609c344 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 12:35:59 +0300 Subject: [PATCH 48/99] create MyBaseError class --- AndreyOzerets/Task5.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AndreyOzerets/Task5.py b/AndreyOzerets/Task5.py index e69de29b..f43146b9 100644 --- a/AndreyOzerets/Task5.py +++ b/AndreyOzerets/Task5.py @@ -0,0 +1,5 @@ +# Task 7.5 + + +class MyBaseError(Exception): + pass From 7f12af92d1bb4910b0e8e5afe489fcd919d8fcdc Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 12:44:29 +0300 Subject: [PATCH 49/99] override __init__ --- AndreyOzerets/Task5.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/AndreyOzerets/Task5.py b/AndreyOzerets/Task5.py index f43146b9..2d84a9b5 100644 --- a/AndreyOzerets/Task5.py +++ b/AndreyOzerets/Task5.py @@ -2,4 +2,8 @@ class MyBaseError(Exception): - pass + + def __init__(self, number, message): + super().__init__(number, message) + self._number = number + self._message = message From 8ccfd8a240c02a1174a929b9525eb3dab7182b5c Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 12:44:55 +0300 Subject: [PATCH 50/99] override __str__ --- AndreyOzerets/Task5.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AndreyOzerets/Task5.py b/AndreyOzerets/Task5.py index 2d84a9b5..afcde135 100644 --- a/AndreyOzerets/Task5.py +++ b/AndreyOzerets/Task5.py @@ -7,3 +7,6 @@ def __init__(self, number, message): super().__init__(number, message) self._number = number self._message = message + + def __str__(self): + return f'{self._number} - {self._message}' From c454ac5b0d37490dc7d74e7645b41fb26f2502a7 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 12:45:25 +0300 Subject: [PATCH 51/99] add a dockstring to the MyBaseError --- AndreyOzerets/Task5.py | 1 + 1 file changed, 1 insertion(+) diff --git a/AndreyOzerets/Task5.py b/AndreyOzerets/Task5.py index afcde135..dbc164e7 100644 --- a/AndreyOzerets/Task5.py +++ b/AndreyOzerets/Task5.py @@ -2,6 +2,7 @@ class MyBaseError(Exception): + """Base class for native error""" def __init__(self, number, message): super().__init__(number, message) From ae04f6f5fd188bae5cfdef4a0838b5db4bff5082 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 12:45:53 +0300 Subject: [PATCH 52/99] create WrongTypeError --- AndreyOzerets/Task5.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/AndreyOzerets/Task5.py b/AndreyOzerets/Task5.py index dbc164e7..5b5cb822 100644 --- a/AndreyOzerets/Task5.py +++ b/AndreyOzerets/Task5.py @@ -11,3 +11,10 @@ def __init__(self, number, message): def __str__(self): return f'{self._number} - {self._message}' + + +class WrongTypeError(MyBaseError): + """Class for type errors""" + + def __init__(self, number, message='is not a number') -> None: + super().__init__(number, message) From 5e4e8cbd298a08ef898dbef306e9ca027e974a86 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 12:46:15 +0300 Subject: [PATCH 53/99] create NegativeError --- AndreyOzerets/Task5.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/AndreyOzerets/Task5.py b/AndreyOzerets/Task5.py index 5b5cb822..8987903c 100644 --- a/AndreyOzerets/Task5.py +++ b/AndreyOzerets/Task5.py @@ -18,3 +18,10 @@ class WrongTypeError(MyBaseError): def __init__(self, number, message='is not a number') -> None: super().__init__(number, message) + + +class NegativeError(MyBaseError): + """Class of positive errors""" + + def __init__(self, number, message='must be positive'): + super().__init__(number, message) From 13ae0793081e032d4e754972d431376050ca96be Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 12:46:40 +0300 Subject: [PATCH 54/99] create check_parity function --- AndreyOzerets/Task5.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/AndreyOzerets/Task5.py b/AndreyOzerets/Task5.py index 8987903c..00d1f5fd 100644 --- a/AndreyOzerets/Task5.py +++ b/AndreyOzerets/Task5.py @@ -25,3 +25,17 @@ class NegativeError(MyBaseError): def __init__(self, number, message='must be positive'): super().__init__(number, message) + + +def check_parity(number: int) -> bool: + + if not isinstance(number, int): + raise WrongTypeError(number) + + if number is False: + raise MyBaseError(number, 'cannot be False') + + if number < 0: + raise NegativeError(number) + + return number % 2 == 0 From 71e7173b608a49454d78649adba3f61e86e47a74 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 12:50:11 +0300 Subject: [PATCH 55/99] call main function --- AndreyOzerets/Task5.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/AndreyOzerets/Task5.py b/AndreyOzerets/Task5.py index 00d1f5fd..6b18cd28 100644 --- a/AndreyOzerets/Task5.py +++ b/AndreyOzerets/Task5.py @@ -39,3 +39,16 @@ def check_parity(number: int) -> bool: raise NegativeError(number) return number % 2 == 0 + + +if __name__ == '__main__': + try: + print(check_parity(-9)) + except WrongTypeError as e: + print(e) + except MyBaseError as e: + print(e) + except NegativeError as e: + print(e) + else: + print('OK') From 0dc0a388f3bb27389d091a0bb5837e9313f42f11 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:16:33 +0300 Subject: [PATCH 56/99] create Task7 module --- AndreyOzerets/Task7.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 AndreyOzerets/Task7.py diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py new file mode 100644 index 00000000..fbecac54 --- /dev/null +++ b/AndreyOzerets/Task7.py @@ -0,0 +1 @@ +# Task 7.7 From cbb2da99e126547eef32392451dad7df1123decb Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:20:37 +0300 Subject: [PATCH 57/99] create typed_prop function --- AndreyOzerets/Task7.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index fbecac54..727555b5 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -1 +1,20 @@ # Task 7.7 +def typed_prop(name, expectrd_type): + """Type checking""" + + storage_name = '_' + name + + @property + def prop(self): + return getattr(self, storage_name) + + @prop.setter + def prop(self, value): + if isinstance(value, expectrd_type) and \ + self._validate(value, f'{self.__class__.__name__} supports only numbers!'): + setattr(self, storage_name, value) + else: + raise TypeError( + f'{self.__class__.__name__} supports only numbers!') + + return prop From a35128da71738daaf079dc2f15be3f4d9e257208 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:21:18 +0300 Subject: [PATCH 58/99] create MyNumberCollection class --- AndreyOzerets/Task7.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index 727555b5..5df1c08b 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -1,4 +1,5 @@ # Task 7.7 + def typed_prop(name, expectrd_type): """Type checking""" @@ -18,3 +19,16 @@ def prop(self, value): f'{self.__class__.__name__} supports only numbers!') return prop + + +class MyNumberCollection: + start = typed_prop('start', (int, Iterable)) + stop = typed_prop('stop', (int, Iterable, type(None))) + step = typed_prop('step', (int, Iterable, type(None))) + + def __init__(self, start, stop=None, step=None) -> None: + self.start = start + self.stop = stop + self.step = step + self._collection: List[int] = [] + self._init_collection() From e51b5da69c89b8496cc92b9e3b108a8241b5443b Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:22:00 +0300 Subject: [PATCH 59/99] import Iterable --- AndreyOzerets/Task7.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index 5df1c08b..a978e8bb 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -1,5 +1,9 @@ # Task 7.7 +from collections.abc import Iterable +from typing import List + + def typed_prop(name, expectrd_type): """Type checking""" From 51d798e77768132891c47d0d53c3b4a9e2dd6905 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:31:17 +0300 Subject: [PATCH 60/99] create _init_collection method --- AndreyOzerets/Task7.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index a978e8bb..7d765a04 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -36,3 +36,12 @@ def __init__(self, start, stop=None, step=None) -> None: self.step = step self._collection: List[int] = [] self._init_collection() + + def _init_collection(self) -> None: + """Complete the original list.""" + if isinstance(self.start, Iterable): + self._add_el(self.start) + else: + self._collection = [i for i in range(self.start, self.stop, + self.step) + ] + [self.stop] From e8b3ec2772c4fc0c78d1a021bde627a393206682 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:33:31 +0300 Subject: [PATCH 61/99] create _add_el method --- AndreyOzerets/Task7.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index 7d765a04..48a3ae0b 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -45,3 +45,15 @@ def _init_collection(self) -> None: self._collection = [i for i in range(self.start, self.stop, self.step) ] + [self.stop] + + def _add_el(self, value) -> None: + """Add items to the list.""" + + if isinstance(value, Iterable): + for i in value: + if isinstance(i, Iterable): + self._add_el(i) + else: + self._collection.append(i) + else: + self._collection.append(value) From 70622c8faaa675b68793aeb23775060edbdbaaa4 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:39:19 +0300 Subject: [PATCH 62/99] create _validate method --- AndreyOzerets/Task7.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index 48a3ae0b..dccbcd1b 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -57,3 +57,13 @@ def _add_el(self, value) -> None: self._collection.append(i) else: self._collection.append(value) + + def _validate(self, value, message) -> bool: + """Check if the passed value is not a string.""" + if isinstance(value, Iterable): + for i in value: + if isinstance(i, Iterable) and not isinstance(i, str): + self._validate(i, message) + if isinstance(i, (str)): + raise TypeError(message) + return True From f86c2905eed004b7a9f30d1d62c2884df6dd85d7 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:40:31 +0300 Subject: [PATCH 63/99] create append method --- AndreyOzerets/Task7.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index dccbcd1b..aae99f3f 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -37,6 +37,11 @@ def __init__(self, start, stop=None, step=None) -> None: self._collection: List[int] = [] self._init_collection() + def append(self, value): + """Add item to the collection.""" + if self._validate(value, f"'string' - object is not a number!"): + self._add_el(value) + def _init_collection(self) -> None: """Complete the original list.""" if isinstance(self.start, Iterable): From 4840de6560341685bd4662d72ffc928b023da0ae Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:41:07 +0300 Subject: [PATCH 64/99] overrite __str__ --- AndreyOzerets/Task7.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index aae99f3f..176d6b34 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -72,3 +72,6 @@ def _validate(self, value, message) -> bool: if isinstance(i, (str)): raise TypeError(message) return True + + def __str__(self) -> str: + return f'{self._collection}' From 2f8240e2261969ce02b6c4901317d3b2c3619180 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:41:28 +0300 Subject: [PATCH 65/99] overrite __getitem__ --- AndreyOzerets/Task7.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index 176d6b34..36bc9b8f 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -75,3 +75,6 @@ def _validate(self, value, message) -> bool: def __str__(self) -> str: return f'{self._collection}' + + def __getitem__(self, item): + return self._collection[item] ** 2 From 6dc8d775e37aec2f50207c86b9ae05b60cf671d4 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:41:48 +0300 Subject: [PATCH 66/99] overrite __add__ --- AndreyOzerets/Task7.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index 36bc9b8f..c6cc539c 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -78,3 +78,6 @@ def __str__(self) -> str: def __getitem__(self, item): return self._collection[item] ** 2 + + def __add__(self, other): + return self._collection + other._collection From 683437da3cec0cf7f1c5d7ae48cd51365f47d396 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:42:06 +0300 Subject: [PATCH 67/99] overrite __iter__ --- AndreyOzerets/Task7.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index c6cc539c..73f80491 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -81,3 +81,7 @@ def __getitem__(self, item): def __add__(self, other): return self._collection + other._collection + + def __iter__(self): + for i in self._collection: + yield i From 633a796c202e4c508e35da5f61920df7041c93f9 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:44:43 +0300 Subject: [PATCH 68/99] call main function --- AndreyOzerets/Task7.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index 73f80491..db5c9fae 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -85,3 +85,24 @@ def __add__(self, other): def __iter__(self): for i in self._collection: yield i + + +if __name__ == '__main__': + # col3 = MyNumberCollection((1, (7, 9, (0, 's')), 3, 4)) + col1 = MyNumberCollection(0, 5, (2,3)) + col2 = MyNumberCollection((1, 2, 3, 4, 5)) + # col3 = MyNumberCollection((1,2,3,"4",5)) + + print(f'collection 1 = {col1}') + print(f'collection 2 = {col2}') + # print(f'collection 3 = {col3}') + col1.append(7) + print(f'collection 1 = {col1}') + # col2.append("string") + print(col1 + col2) + print(f'collection 1 = {col1}') + print(f'collection 2 = {col2}') + print(col2[4]) + + for item in col1: + print(item) From 47d687c3dc731c7f142f201ecb1d3e14548f3268 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:45:42 +0300 Subject: [PATCH 69/99] del Iterable from step variable --- AndreyOzerets/Task7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index db5c9fae..6be92296 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -28,7 +28,7 @@ def prop(self, value): class MyNumberCollection: start = typed_prop('start', (int, Iterable)) stop = typed_prop('stop', (int, Iterable, type(None))) - step = typed_prop('step', (int, Iterable, type(None))) + step = typed_prop('step', (int, type(None))) def __init__(self, start, stop=None, step=None) -> None: self.start = start From fcd15a6af56f237170049e7449b725d249c45032 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:45:57 +0300 Subject: [PATCH 70/99] del Iterable from stop variable --- AndreyOzerets/Task7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index 6be92296..9bedbacd 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -27,7 +27,7 @@ def prop(self, value): class MyNumberCollection: start = typed_prop('start', (int, Iterable)) - stop = typed_prop('stop', (int, Iterable, type(None))) + stop = typed_prop('stop', (int, type(None))) step = typed_prop('step', (int, type(None))) def __init__(self, start, stop=None, step=None) -> None: From f4ba36fbfae5dec6749f3cd96c41f528b095f444 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:46:51 +0300 Subject: [PATCH 71/99] fix col1 object --- AndreyOzerets/Task7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndreyOzerets/Task7.py b/AndreyOzerets/Task7.py index 9bedbacd..66885076 100644 --- a/AndreyOzerets/Task7.py +++ b/AndreyOzerets/Task7.py @@ -89,7 +89,7 @@ def __iter__(self): if __name__ == '__main__': # col3 = MyNumberCollection((1, (7, 9, (0, 's')), 3, 4)) - col1 = MyNumberCollection(0, 5, (2,3)) + col1 = MyNumberCollection(0, 5, 2) col2 = MyNumberCollection((1, 2, 3, 4, 5)) # col3 = MyNumberCollection((1,2,3,"4",5)) From 6ddcc047ce37b310d3b638bf7858a0707c43416d Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:48:46 +0300 Subject: [PATCH 72/99] create Task8 module --- AndreyOzerets/Task8.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 AndreyOzerets/Task8.py diff --git a/AndreyOzerets/Task8.py b/AndreyOzerets/Task8.py new file mode 100644 index 00000000..80c5e691 --- /dev/null +++ b/AndreyOzerets/Task8.py @@ -0,0 +1 @@ +# Task 7.8 From 12bb3d7b8d6667f3853d0d5cc3a3a3e0cfecd4ad Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:49:28 +0300 Subject: [PATCH 73/99] create MySquareIterator class --- AndreyOzerets/Task8.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AndreyOzerets/Task8.py b/AndreyOzerets/Task8.py index 80c5e691..af356a42 100644 --- a/AndreyOzerets/Task8.py +++ b/AndreyOzerets/Task8.py @@ -1 +1,4 @@ # Task 7.8 + +class MySquareIterator: + pass From 594b31b933daaf3329a534540fd896db3f1e5131 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:50:02 +0300 Subject: [PATCH 74/99] override __init__ --- AndreyOzerets/Task8.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/AndreyOzerets/Task8.py b/AndreyOzerets/Task8.py index af356a42..6e123eb3 100644 --- a/AndreyOzerets/Task8.py +++ b/AndreyOzerets/Task8.py @@ -1,4 +1,7 @@ # Task 7.8 class MySquareIterator: - pass + def __init__(self, el): + self._el = deepcopy(el) + self._len = len(el) + self._i = -1 From be5443d4d17e3242d3b9ace72598acc45e03ed93 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:50:31 +0300 Subject: [PATCH 75/99] import deepcopy --- AndreyOzerets/Task8.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AndreyOzerets/Task8.py b/AndreyOzerets/Task8.py index 6e123eb3..eac94476 100644 --- a/AndreyOzerets/Task8.py +++ b/AndreyOzerets/Task8.py @@ -1,5 +1,8 @@ # Task 7.8 +from copy import deepcopy + + class MySquareIterator: def __init__(self, el): self._el = deepcopy(el) From c1e98a98721cfbec92357792a35835120aa1bf04 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:50:58 +0300 Subject: [PATCH 76/99] override __iter__ --- AndreyOzerets/Task8.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AndreyOzerets/Task8.py b/AndreyOzerets/Task8.py index eac94476..4ec09dd3 100644 --- a/AndreyOzerets/Task8.py +++ b/AndreyOzerets/Task8.py @@ -8,3 +8,6 @@ def __init__(self, el): self._el = deepcopy(el) self._len = len(el) self._i = -1 + + def __iter__(self): + return self From 3af6cc8f7094393b4c3fda7cdca122114a628444 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:51:34 +0300 Subject: [PATCH 77/99] override __next__ --- AndreyOzerets/Task8.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/AndreyOzerets/Task8.py b/AndreyOzerets/Task8.py index 4ec09dd3..e88800f5 100644 --- a/AndreyOzerets/Task8.py +++ b/AndreyOzerets/Task8.py @@ -11,3 +11,9 @@ def __init__(self, el): def __iter__(self): return self + + def __next__(self): + self._i += 1 + if self._i >= self._len: + raise StopIteration + return self._el[self._i]**2 From 7528f79c52a33478cee2c57c90ff0662d971325a Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:52:47 +0300 Subject: [PATCH 78/99] create main function --- AndreyOzerets/Task8.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/AndreyOzerets/Task8.py b/AndreyOzerets/Task8.py index e88800f5..c9204f0a 100644 --- a/AndreyOzerets/Task8.py +++ b/AndreyOzerets/Task8.py @@ -17,3 +17,11 @@ def __next__(self): if self._i >= self._len: raise StopIteration return self._el[self._i]**2 + + +def main(): + """Main function.""" + lst = [1, 2, 3, 4, 5] + itr = MySquareIterator(lst) + for item in itr: + print(item) From c744c857a456ea3db34c39463cd3764e51e99c19 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 22:53:25 +0300 Subject: [PATCH 79/99] call main function --- AndreyOzerets/Task8.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AndreyOzerets/Task8.py b/AndreyOzerets/Task8.py index c9204f0a..c07fd019 100644 --- a/AndreyOzerets/Task8.py +++ b/AndreyOzerets/Task8.py @@ -25,3 +25,7 @@ def main(): itr = MySquareIterator(lst) for item in itr: print(item) + + +if __name__ == '__main__': + main() From 7f3c74c47a34c36f85cc3622fe014913c38a9e60 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:26:57 +0300 Subject: [PATCH 80/99] create Task9 module --- AndreyOzerets/Task9.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 AndreyOzerets/Task9.py diff --git a/AndreyOzerets/Task9.py b/AndreyOzerets/Task9.py new file mode 100644 index 00000000..f2c543c0 --- /dev/null +++ b/AndreyOzerets/Task9.py @@ -0,0 +1 @@ +# Task 7.9 From a0a2ed5f2efcf4b8e5bbf39bdf9c2a288f530ea8 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:27:41 +0300 Subject: [PATCH 81/99] cerate typed_prop function --- AndreyOzerets/Task9.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/AndreyOzerets/Task9.py b/AndreyOzerets/Task9.py index f2c543c0..f89eee76 100644 --- a/AndreyOzerets/Task9.py +++ b/AndreyOzerets/Task9.py @@ -1 +1,18 @@ # Task 7.9 + +def typed_prop(name, expectrd_type): + """Type checking""" + + storage_name = '_' + name + + @property + def prop(self): + return getattr(self, storage_name) + + @prop.setter + def prop(self, value): + if not isinstance(value, expectrd_type): + raise TypeError(f'{name} must be a {expectrd_type}') + setattr(self, storage_name, value) + + return prop From 73659825eae24c288d15391e571d38d697385c67 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:28:07 +0300 Subject: [PATCH 82/99] create EvenRange class --- AndreyOzerets/Task9.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AndreyOzerets/Task9.py b/AndreyOzerets/Task9.py index f89eee76..8f8a1098 100644 --- a/AndreyOzerets/Task9.py +++ b/AndreyOzerets/Task9.py @@ -16,3 +16,7 @@ def prop(self, value): setattr(self, storage_name, value) return prop + + +class EvenRange: + pass From c5f4955f3472cba1da20668480ad6435f48a9d56 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:31:23 +0300 Subject: [PATCH 83/99] override __init__ --- AndreyOzerets/Task9.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/AndreyOzerets/Task9.py b/AndreyOzerets/Task9.py index 8f8a1098..74028180 100644 --- a/AndreyOzerets/Task9.py +++ b/AndreyOzerets/Task9.py @@ -19,4 +19,20 @@ def prop(self, value): class EvenRange: - pass + start = typed_prop('start', int) + stop = typed_prop('stop', int) + + def __init__(self, start: int, stop: int) -> None: + """Initializer. + + :param start: Countdown start. + :type start: int + :param stop: End of countdown. + :type stop: int + """ + self.start = start + self.stop = stop + self.number = start + self._text = "Out of numbers!" + self._end_of_iteration = False + self._for_loop = False From 9e914b9310c53b6b614087f623b02652ee536a65 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:31:52 +0300 Subject: [PATCH 84/99] override __iter__ --- AndreyOzerets/Task9.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AndreyOzerets/Task9.py b/AndreyOzerets/Task9.py index 74028180..090ff7d1 100644 --- a/AndreyOzerets/Task9.py +++ b/AndreyOzerets/Task9.py @@ -36,3 +36,7 @@ def __init__(self, start: int, stop: int) -> None: self._text = "Out of numbers!" self._end_of_iteration = False self._for_loop = False + + def __iter__(self): + self._for_loop = True + return self From 9b16ba8a5988764a971d87f9d6a62909df0da46c Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:32:23 +0300 Subject: [PATCH 85/99] override __next__ --- AndreyOzerets/Task9.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/AndreyOzerets/Task9.py b/AndreyOzerets/Task9.py index 090ff7d1..5ac2240b 100644 --- a/AndreyOzerets/Task9.py +++ b/AndreyOzerets/Task9.py @@ -40,3 +40,22 @@ def __init__(self, start: int, stop: int) -> None: def __iter__(self): self._for_loop = True return self + + def __next__(self): + + while self.start < self.stop: + if self.start % 2 == 0: + self.number = self.start + self.start += 1 + return self.number + else: + self.start += 1 + else: + if not self._end_of_iteration: + self._end_of_iteration = True + return self._text + + if not self._for_loop: + return self._text + + raise StopIteration From 5237664bd67fe3955ca5945cbfcb67a2941bb2a1 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:33:14 +0300 Subject: [PATCH 86/99] create main function --- AndreyOzerets/Task9.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/AndreyOzerets/Task9.py b/AndreyOzerets/Task9.py index 5ac2240b..5481f84c 100644 --- a/AndreyOzerets/Task9.py +++ b/AndreyOzerets/Task9.py @@ -59,3 +59,20 @@ def __next__(self): return self._text raise StopIteration + + +def main(): + """Main function.""" + er2 = EvenRange(3, 14) + for number in er2: + print(number) + + er1 = EvenRange(7, 14) + print(next(er1)) + print(next(er1)) + print(next(er1)) + print(next(er1)) + print(next(er1)) + print(next(er1)) + print(next(er1)) + print(next(er1)) From ce7965ffa97652afe73d02b2f32b8be7c30ddc0a Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:33:58 +0300 Subject: [PATCH 87/99] call main function --- AndreyOzerets/Task9.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AndreyOzerets/Task9.py b/AndreyOzerets/Task9.py index 5481f84c..c4c6e729 100644 --- a/AndreyOzerets/Task9.py +++ b/AndreyOzerets/Task9.py @@ -76,3 +76,7 @@ def main(): print(next(er1)) print(next(er1)) print(next(er1)) + + +if __name__ == '__main__': + main() From 22917f2d425d9c26e42a91c6680c28492a68c564 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:35:32 +0300 Subject: [PATCH 88/99] create Task10 module --- AndreyOzerets/Task10.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 AndreyOzerets/Task10.py diff --git a/AndreyOzerets/Task10.py b/AndreyOzerets/Task10.py new file mode 100644 index 00000000..aa580ffa --- /dev/null +++ b/AndreyOzerets/Task10.py @@ -0,0 +1 @@ +# Task 7.10 From 7aa6200af46b824f3dd0cbcd876a1fcabeea299a Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:37:08 +0300 Subject: [PATCH 89/99] create endless_generator function --- AndreyOzerets/Task10.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/AndreyOzerets/Task10.py b/AndreyOzerets/Task10.py index aa580ffa..9a11103f 100644 --- a/AndreyOzerets/Task10.py +++ b/AndreyOzerets/Task10.py @@ -1 +1,9 @@ # Task 7.10 + + +def endless_generator(): + """Endless generator.""" + number = 1 + while True: + yield number + number += 2 From af8bf3effdfa84967c7b2c271e840d9a02586e92 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:37:53 +0300 Subject: [PATCH 90/99] create main function --- AndreyOzerets/Task10.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/AndreyOzerets/Task10.py b/AndreyOzerets/Task10.py index 9a11103f..f9c05fcd 100644 --- a/AndreyOzerets/Task10.py +++ b/AndreyOzerets/Task10.py @@ -7,3 +7,11 @@ def endless_generator(): while True: yield number number += 2 + + +def main(): + """Main function.""" + gen = endless_generator() + while True: + print(next(gen)) + sleep(.3) From e7d679c37e12bfe886cd88fe94ce370f08af88c2 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:38:19 +0300 Subject: [PATCH 91/99] import sleep --- AndreyOzerets/Task10.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AndreyOzerets/Task10.py b/AndreyOzerets/Task10.py index f9c05fcd..ea9c922c 100644 --- a/AndreyOzerets/Task10.py +++ b/AndreyOzerets/Task10.py @@ -1,5 +1,7 @@ # Task 7.10 +from time import sleep + def endless_generator(): """Endless generator.""" From 7312297b91b526cd71d6c76e1706edc97423abeb Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:39:02 +0300 Subject: [PATCH 92/99] call main function --- AndreyOzerets/Task10.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AndreyOzerets/Task10.py b/AndreyOzerets/Task10.py index ea9c922c..a9ae7c3c 100644 --- a/AndreyOzerets/Task10.py +++ b/AndreyOzerets/Task10.py @@ -17,3 +17,7 @@ def main(): while True: print(next(gen)) sleep(.3) + + +if __name__ == '__main__': + main() From 7d605a2947ff678a835ceb7395ba16a83c83e5b0 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:40:04 +0300 Subject: [PATCH 93/99] create Task11 module --- AndreyOzerets/Task11.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 AndreyOzerets/Task11.py diff --git a/AndreyOzerets/Task11.py b/AndreyOzerets/Task11.py new file mode 100644 index 00000000..ca04ce5d --- /dev/null +++ b/AndreyOzerets/Task11.py @@ -0,0 +1 @@ +# Task 7.11 From de78d78caed0767003f1941f389edae58eab7235 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:44:53 +0300 Subject: [PATCH 94/99] create endless_fib_generator function --- AndreyOzerets/Task11.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/AndreyOzerets/Task11.py b/AndreyOzerets/Task11.py index ca04ce5d..337111fe 100644 --- a/AndreyOzerets/Task11.py +++ b/AndreyOzerets/Task11.py @@ -1 +1,14 @@ # Task 7.11 + + +def endless_fib_generator() -> Generator[int, None, None]: + """Infinite fibonacci numbers. + + :yield: Fibonacci number at each iteration. + :rtype: Generator[int, None, None] + """ + + first, second = 0, 1 + while True: + yield second + first, second = second, first + second From 847ec551676449f3ed3ccb1481aa268c5ae5565a Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:45:19 +0300 Subject: [PATCH 95/99] import Generator --- AndreyOzerets/Task11.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AndreyOzerets/Task11.py b/AndreyOzerets/Task11.py index 337111fe..1351ac7f 100644 --- a/AndreyOzerets/Task11.py +++ b/AndreyOzerets/Task11.py @@ -1,6 +1,9 @@ # Task 7.11 +from typing import Generator + + def endless_fib_generator() -> Generator[int, None, None]: """Infinite fibonacci numbers. From 09efd4c2c8c513bea476dd80823e091120a38d0c Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:45:56 +0300 Subject: [PATCH 96/99] create main function --- AndreyOzerets/Task11.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/AndreyOzerets/Task11.py b/AndreyOzerets/Task11.py index 1351ac7f..34f3ecca 100644 --- a/AndreyOzerets/Task11.py +++ b/AndreyOzerets/Task11.py @@ -15,3 +15,10 @@ def endless_fib_generator() -> Generator[int, None, None]: while True: yield second first, second = second, first + second + + +def main(): + gen = endless_fib_generator(5) + while True: + print(next(gen)) + sleep(.3) From 8200e011132f19d32e4aa506f10759e77a88209a Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:46:19 +0300 Subject: [PATCH 97/99] import sleep --- AndreyOzerets/Task11.py | 1 + 1 file changed, 1 insertion(+) diff --git a/AndreyOzerets/Task11.py b/AndreyOzerets/Task11.py index 34f3ecca..ea19aea6 100644 --- a/AndreyOzerets/Task11.py +++ b/AndreyOzerets/Task11.py @@ -2,6 +2,7 @@ from typing import Generator +from time import sleep def endless_fib_generator() -> Generator[int, None, None]: From 24989db42e1e8c8eba92a60d3981a98ef00e00c1 Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:47:33 +0300 Subject: [PATCH 98/99] call main function --- AndreyOzerets/Task11.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AndreyOzerets/Task11.py b/AndreyOzerets/Task11.py index ea19aea6..460b6b15 100644 --- a/AndreyOzerets/Task11.py +++ b/AndreyOzerets/Task11.py @@ -23,3 +23,7 @@ def main(): while True: print(next(gen)) sleep(.3) + + +if __name__ == '__main__': + main() From d8083123df0c5b03c4ee993dc01dd8e37cf1f09f Mon Sep 17 00:00:00 2001 From: J D Date: Wed, 6 Jul 2022 23:47:51 +0300 Subject: [PATCH 99/99] del number --- AndreyOzerets/Task11.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndreyOzerets/Task11.py b/AndreyOzerets/Task11.py index 460b6b15..586def99 100644 --- a/AndreyOzerets/Task11.py +++ b/AndreyOzerets/Task11.py @@ -19,7 +19,7 @@ def endless_fib_generator() -> Generator[int, None, None]: def main(): - gen = endless_fib_generator(5) + gen = endless_fib_generator() while True: print(next(gen)) sleep(.3)