Krukov / amocrm_api

Python amocrm API wrapper
MIT License
104 stars 55 forks source link

Нужна помощь в рефакторе авторизации #127

Closed D1scoB0y closed 3 months ago

D1scoB0y commented 3 months ago

Здравствуйте.

Я пытаюсь рефакторить обновление токена (чтобы он обновлялся по скрипту и было удобно им пользоваться на удаленной машине)

Сам скрипт отрабатывает хорошо, токены создаются в папке amocrm_tokens в корне проекта, но как только я пытаюсь создать какую нибудь сущность то выскакиевает ошибка:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/u/Projects/test/src/services/_amocrm.py", line 8, in create_lead
    Lead.create(Lead(name='123'))
  File "/home/u/Projects/test/.venv/lib/python3.12/site-packages/amocrm/v2/model.py", line 59, in create
    self._data["id"] = self._manager.create(self._data).id
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/u/Projects/test/.venv/lib/python3.12/site-packages/amocrm/v2/manager.py", line 16, in create
    return self._model(data=self._interaction.create(data=data or kwargs))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/u/Projects/test/.venv/lib/python3.12/site-packages/amocrm/v2/interaction.py", line 123, in create
    response, status = self.request("post", self._get_path(), data=[data])
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/u/Projects/test/.venv/lib/python3.12/site-packages/amocrm/v2/interaction.py", line 57, in request
    return self._request(method, path, data=data, params=params, headers=headers)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/u/Projects/test/.venv/lib/python3.12/site-packages/amocrm/v2/interaction.py", line 36, in _request
    headers.update(self.get_headers())
                   ^^^^^^^^^^^^^^^^^^
  File "/home/u/Projects/test/.venv/lib/python3.12/site-packages/amocrm/v2/interaction.py", line 25, in get_headers
    headers.update(self._get_auth_headers())
                   ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/u/Projects/test/.venv/lib/python3.12/site-packages/amocrm/v2/interaction.py", line 29, in _get_auth_headers
    return {"Authorization": "Bearer " + self._token_manager.get_access_token()}
                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/u/Projects/test/.venv/lib/python3.12/site-packages/amocrm/v2/tokens.py", line 151, in get_access_token
    token = self._storage.get_access_token()
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get_access_token'

Проект имеет следующую структуру:

└── project/
    ├── scripts/
    │   └── refresh.py
    └── src/
        ├── lib/
        │   └── _amocrm.py
        └── services/
            └── _amocrm.py

lib/_amocrm.py

from amocrm.v2 import tokens

from src.config import config

storage = tokens.default_token_manager

storage(
    client_id=config.AMOCRM_CLIENT_ID,
    client_secret=config.AMOCRM_CLIENT_SECRET,
    redirect_url=config.AMOCRM_REDIRECT_URL,
    subdomain=config.AMOCRM_SUBDOMAIN,
    storage=tokens.FileTokensStorage('amocrm_tokens'),
)

refresh.py

import sys
import os

sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

from src.lib._amocrm import storage

code = input('Copy code: ')

storage.init(code=code, skip_error=False)

services/_amocrm.py

from amocrm.v2 import Lead

class AmoCRMService:
    def create_lead(self) -> None:
        Lead.create(Lead(name='123'))
D1scoB0y commented 3 months ago

в service.py добавить

import src.lib._amocrm