125 lines
4.5 KiB
Python
125 lines
4.5 KiB
Python
import os
|
||
from dotenv import load_dotenv
|
||
from kontur_focus.req import Request
|
||
from datetime import datetime
|
||
|
||
|
||
class Focus(Request):
|
||
_basedir = os.path.abspath(os.path.dirname(__file__))
|
||
|
||
def __init__(self, inn: str, ogrn: str = None):
|
||
load_dotenv()
|
||
super().__init__(
|
||
base_url=os.environ.get('FOCUS_BASE_URL'),
|
||
access_key=os.environ.get('FOCUS_ACCESS_KEY'),
|
||
inn=inn,
|
||
ogrn=ogrn
|
||
)
|
||
|
||
def base_info(self):
|
||
"""Выгрузка базовых реквизитов Российских юридических лиц и индивидуальных предпринимателей
|
||
|
||
:return: Информация о ЮЛ
|
||
:rtype: str
|
||
"""
|
||
return self.get(path='/req')
|
||
|
||
def advanced_info(self):
|
||
"""Расширенные сведения на основе ЕГРЮЛ/ЕГРИП
|
||
|
||
:return: Информация о ЮЛ
|
||
:rtype: str
|
||
"""
|
||
return self.get('/egrDetails')
|
||
|
||
def excerpt(self, path: str = None) -> dict:
|
||
"""Выписка из ЕГРЮЛ/ЕГРИП
|
||
|
||
:param path: Путь выгрузки файла. Если не указан, выгружается в текущий каталог.
|
||
:type path: str, необязательный
|
||
:return: Результат, имя файла и путь выгрузки
|
||
:rtype: str
|
||
"""
|
||
response = self.get('/excerpt')
|
||
current_datetime = datetime.now().strftime('%d-%m-%Y_%H-%M')
|
||
filename = f'Выписка_{self.inn}_{current_datetime}.pdf'
|
||
|
||
if not path:
|
||
file_path = os.path.join(self._basedir, filename)
|
||
else:
|
||
file_path = os.path.join(path, filename)
|
||
|
||
try:
|
||
with open(file_path, mode='wb') as file:
|
||
file.write(response.content)
|
||
|
||
return {'success': True, 'filename': filename, 'path': file_path}
|
||
except Exception as e:
|
||
return {'success': False, 'message': e}
|
||
|
||
def express_report(self, pdf: bool = True, path: str = None) -> dict:
|
||
"""Экспресс-отчет по контрагенту
|
||
|
||
:param pdf: Выгрузить PDF файл, по-умолчанию True
|
||
:type pdf: bool, optional
|
||
:param path: Путь выгрузки файла. Если не указан, выгружается в текущий каталог.
|
||
:type path: str, optional
|
||
:return: _description_
|
||
:rtype: _type_
|
||
"""
|
||
response = self.get('/briefReport', pdf=pdf)
|
||
current_datetime = datetime.now().strftime('%d-%m-%Y_%H-%M')
|
||
filename = f'Экспресс-отчет_{self.inn}_{current_datetime}.pdf'
|
||
|
||
if pdf:
|
||
if not path:
|
||
file_path = os.path.join(self._basedir, filename)
|
||
else:
|
||
file_path = os.path.join(path, filename)
|
||
|
||
try:
|
||
with open(file_path, mode='wb') as file:
|
||
file.write(response.content)
|
||
|
||
return {'success': True, 'filename': filename, 'path': file_path}
|
||
except Exception as e:
|
||
return {'success': False, 'message': e}
|
||
else:
|
||
return response
|
||
|
||
def founders_history(self):
|
||
"""История владения организацией
|
||
|
||
:return: Набор полей с информацией об изменениях
|
||
:rtype: str
|
||
"""
|
||
return self.get('/foundersHistory')
|
||
|
||
def foreign_representatives(self):
|
||
"""Иностранные представительства и филиалы
|
||
|
||
:return: Набор данных о представительствах
|
||
:rtype: str
|
||
"""
|
||
return self.get('/foreignRepresentatives')
|
||
|
||
def government_lists(self): # DEPRECATED
|
||
"""Вхождение организации в государственные реестры
|
||
|
||
:return: Список реестров
|
||
:rtype: _type_
|
||
"""
|
||
response = self.get('/analyticLists')
|
||
|
||
return response['listsEntries']
|
||
|
||
def is_foreign_agent(self): # DEPRECATED
|
||
"""Проверка наличия организации в Едином реестре иностранных агентов
|
||
|
||
:return: Результат проверки
|
||
:rtype: bool
|
||
"""
|
||
foreign_agents_list = next(lst for lst in self.government_lists() if lst['id'] == 'fcfc856d-89f8-408b-afef-56750cb90fed')
|
||
|
||
return foreign_agents_list['isInList']
|