@albertalexandrov

Сборка urn и http-запрос при композиции классов?

Всем привет!)

Предположим, есть код (не окончательный вариант):

from requests_toolbelt.sessions import BaseUrlSession


class B:
    urn = 'bbb'

    @classmethod
    def get(cls):
        return cls.urn


class A:
    urn = 'aaa'
    b = B


class Client:
    a = A

    def __init__(self):
        self.session = BaseUrlSession(base_url='http://example.com')


Необходимо, чтобы при выполнении:

client = Client()
response = client.a.b.get()


в response оказался результат выполнения self.session.get('aaa/bbb').

Здесь я вижу два пути:
1. передавать self.session сквозь классы,
2. возвращать сборный urn и в client делать запрос.

Возможно ли это сделать? И если да, то как? Я мозг сломал.

Спасибо.
  • Вопрос задан
  • 26 просмотров
Решения вопроса 1
@albertalexandrov Автор вопроса
Решил при помощи модуля inspect. Вызов в методе get():

inspect.currentframe().f_back.f_locals

вернет:

{
'__name__': '__main__',
'__doc__': None,
'__package__': None,
'__loader__': < _frozen_importlib_external.SourceFileLoader object at 0x7f1cd8a7d5c0 > ,
'__spec__': None,
'__annotations__': {},
'__builtins__': < module 'builtins'(built - in ) > ,
'__file__': '/home/aleksandrovalbert/Work/playground/разное.py',
'__cached__': None,
'inspect': < module 'inspect'
from '/usr/lib/python3.6/inspect.py' > ,
'Dict': typing.Dict,
'BaseUrlSession': < class 'requests_toolbelt.sessions.BaseUrlSession' > ,
'Mark': < class '__main__.Mark' > ,
'_B': < class '__main__._B' > ,
'_A': < class '__main__._A' > ,
'Client': < class '__main__.Client' > ,
'client': < __main__.Client object at 0x7f1cd73d6e48 >
}


где есть все необходимое.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы