GithubHelp home page GithubHelp logo

decorators's Introduction

Decorators

  1. Доработать декоратор logger в коде ниже. Должен получиться декортор, который записывает в файл 'main.log' дату и время вызова функции, имя функции, аргументы, с которыми вызвалась и возвращаемое значение. Функция test_1 в коде ниже также должна отработать без ошибок.
import os
def logger(old_function):
    ...
    def new_function(*args, **kwargs):
        ...
    return new_function
def test_1():
    path = 'main.log'
    if os.path.exists(path):
        os.remove(path)
    @logger
    def hello_world():
        return 'Hello World'
    @logger
    def summator(a, b=0):
        return a + b
    @logger
    def div(a, b):
        return a / b
    assert 'Hello World' == hello_world(), "Функция возвращает 'Hello World'"
    result = summator(2, 2)
    assert isinstance(result, int), 'Должно вернуться целое число'
    assert result == 4, '2 + 2 = 4'
    result = div(6, 2)
    assert result == 3, '6 / 2 = 3'
    
    assert os.path.exists(path), 'файл main.log должен существовать'
    summator(4.3, b=2.2)
    summator(a=0, b=0)
    with open(path) as log_file:
        log_file_content = log_file.read()
    assert 'summator' in log_file_content, 'должно записаться имя функции'
    for item in (4.3, 2.2, 6.5):
        assert str(item) in log_file_content, f'{item} должен быть записан в файл'
if __name__ == '__main__':
    test_1()
  1. Доработать парметризованный декоратор logger в коде ниже. Должен получиться декортор, который записывает в файл дату и время вызова функции, имя функции, аргументы, с которыми вызвалась и возвращаемое значение. Путь к файлу должен передаваться в аргументах декоратора. Функция test_2 в коде ниже также должна отработать без ошибок.
import os
def logger(path):
    ...
    
    def __logger(old_function):
        def new_function(*args, **kwargs):
            ...
        return new_function
    return __logger
def test_2():
    paths = ('log_1.log', 'log_2.log', 'log_3.log')
    for path in paths:
        if os.path.exists(path):
            os.remove(path)
        @logger(path)
        def hello_world():
            return 'Hello World'
        @logger(path)
        def summator(a, b=0):
            return a + b
        @logger(path)
        def div(a, b):
            return a / b
        assert 'Hello World' == hello_world(), "Функция возвращает 'Hello World'"
        result = summator(2, 2)
        assert isinstance(result, int), 'Должно вернуться целое число'
        assert result == 4, '2 + 2 = 4'
        result = div(6, 2)
        assert result == 3, '6 / 2 = 3'
        summator(4.3, b=2.2)
    for path in paths:
        assert os.path.exists(path), f'файл {path} должен существовать'
        with open(path) as log_file:
            log_file_content = log_file.read()
        assert 'summator' in log_file_content, 'должно записаться имя функции'
        for item in (4.3, 2.2, 6.5):
            assert str(item) in log_file_content, f'{item} должен быть записан в файл'
if __name__ == '__main__':
    test_2()
  1. Применить написанный логгер к приложению из любого предыдущего д/з.

decorators's People

Contributors

citylamer avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.