Added docs generator, splitted methods
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,6 @@
|
|||||||
|
# OS files
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
### IDEA files
|
### IDEA files
|
||||||
.idea
|
.idea
|
||||||
kontur-focus-lib.iml
|
kontur-focus-lib.iml
|
||||||
|
|||||||
20
docs/Makefile
Normal file
20
docs/Makefile
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Minimal makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line, and also
|
||||||
|
# from the environment for the first two.
|
||||||
|
SPHINXOPTS ?=
|
||||||
|
SPHINXBUILD ?= sphinx-build
|
||||||
|
SOURCEDIR = .
|
||||||
|
BUILDDIR = _build
|
||||||
|
|
||||||
|
# Put it first so that "make" without argument is like "make help".
|
||||||
|
help:
|
||||||
|
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
|
|
||||||
|
.PHONY: help Makefile
|
||||||
|
|
||||||
|
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||||
|
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||||
|
%: Makefile
|
||||||
|
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
39
docs/conf.py
Normal file
39
docs/conf.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Configuration file for the Sphinx documentation builder.
|
||||||
|
#
|
||||||
|
# For the full list of built-in configuration values, see the documentation:
|
||||||
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||||
|
|
||||||
|
# -- Project information -----------------------------------------------------
|
||||||
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
||||||
|
|
||||||
|
project = 'Kontur Focus Library'
|
||||||
|
copyright = '2025, Ilya Sapunov'
|
||||||
|
author = 'Ilya Sapunov'
|
||||||
|
release = '0.1.0'
|
||||||
|
|
||||||
|
# -- General configuration ---------------------------------------------------
|
||||||
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
sys.path.insert(0, str(Path('..', '..', 'kontur-focus-lib').resolve()))
|
||||||
|
|
||||||
|
extensions = [
|
||||||
|
'sphinx.ext.autodoc',
|
||||||
|
'sphinx.ext.viewcode',
|
||||||
|
'sphinx.ext.todo',
|
||||||
|
'sphinx.ext.coverage'
|
||||||
|
]
|
||||||
|
|
||||||
|
templates_path = ['_templates']
|
||||||
|
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
||||||
|
|
||||||
|
language = 'ru'
|
||||||
|
todo_include_todos = True
|
||||||
|
add_module_names = False
|
||||||
|
|
||||||
|
# -- Options for HTML output -------------------------------------------------
|
||||||
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
|
||||||
|
|
||||||
|
html_theme = 'alabaster'
|
||||||
|
html_static_path = ['_static']
|
||||||
19
docs/index.rst
Normal file
19
docs/index.rst
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
.. Kontur Focus Library documentation master file, created by
|
||||||
|
sphinx-quickstart on Mon Mar 10 17:54:03 2025.
|
||||||
|
You can adapt this file completely to your liking, but it should at least
|
||||||
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
|
Kontur Focus Library documentation
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Add your content using ``reStructuredText`` syntax. See the
|
||||||
|
`reStructuredText <https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html>`_
|
||||||
|
documentation for details.
|
||||||
|
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Contents:
|
||||||
|
|
||||||
|
setup
|
||||||
|
usage
|
||||||
35
docs/make.bat
Normal file
35
docs/make.bat
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
|
||||||
|
pushd %~dp0
|
||||||
|
|
||||||
|
REM Command file for Sphinx documentation
|
||||||
|
|
||||||
|
if "%SPHINXBUILD%" == "" (
|
||||||
|
set SPHINXBUILD=sphinx-build
|
||||||
|
)
|
||||||
|
set SOURCEDIR=.
|
||||||
|
set BUILDDIR=_build
|
||||||
|
|
||||||
|
%SPHINXBUILD% >NUL 2>NUL
|
||||||
|
if errorlevel 9009 (
|
||||||
|
echo.
|
||||||
|
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||||
|
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||||
|
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||||
|
echo.may add the Sphinx directory to PATH.
|
||||||
|
echo.
|
||||||
|
echo.If you don't have Sphinx installed, grab it from
|
||||||
|
echo.https://www.sphinx-doc.org/
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "" goto help
|
||||||
|
|
||||||
|
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:help
|
||||||
|
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||||
|
|
||||||
|
:end
|
||||||
|
popd
|
||||||
30
docs/setup.rst
Normal file
30
docs/setup.rst
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
=========
|
||||||
|
Установка
|
||||||
|
=========
|
||||||
|
|
||||||
|
Для установки необходимо иметь доступ в корпоративный `Gitlab <https://git.selectel.org>`_, чтобы получить доступ к Registry PyPi.
|
||||||
|
|
||||||
|
Установка через pip
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Выполните ``pip install kontur-focus --index-url https://__token__:<your_personal_token>@git.selectel.org/api/v4/projects/6350/packages/pypi/simple``
|
||||||
|
|
||||||
|
Где `<your_personal_token>` - `персональный токен <https://git.selectel.org/help/user/profile/personal_access_tokens>`_ доступа Gitlab.
|
||||||
|
|
||||||
|
Использование requirements.txt
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Перед использованием необходимо настроить Registry.
|
||||||
|
|
||||||
|
Создайте файл `.pypirc` в папке пользователя и добавьте параметры репозитория:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
[gitlab]
|
||||||
|
repository = https://git.selectel.org/api/v4/projects/6350/packages/pypi
|
||||||
|
username = __token__
|
||||||
|
password = <your personal access token>
|
||||||
|
|
||||||
|
Более подробно `тут <https://git.selectel.org/help/user/packages/pypi_repository/index>`_.
|
||||||
|
|
||||||
|
После выполните ``pip install -r requirements.txt``
|
||||||
46
docs/usage.rst
Normal file
46
docs/usage.rst
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
=============
|
||||||
|
Использование
|
||||||
|
=============
|
||||||
|
|
||||||
|
Подготовка
|
||||||
|
----------
|
||||||
|
|
||||||
|
Создайте файл `.env` или добавьте в существующий параметры:
|
||||||
|
|
||||||
|
- `FOCUS_BASE_URL=<kontur_url>`
|
||||||
|
- `FOCUS_ACCESS_KEY=<your_access_key>`
|
||||||
|
|
||||||
|
Где `kontur_url` - адрес REST API Контур.Фокус. Например, `https://focus-api.kontur.ru/api3`.
|
||||||
|
|
||||||
|
А `FOCUS_ACCESS_KEY` - секретный ключ доступа к REST API Контур.Фокус.
|
||||||
|
|
||||||
|
Инициализация
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from kontur_focus import Focus
|
||||||
|
|
||||||
|
focus = Focus(inn='<inn_string>', ogrn='<ogrn_string>')
|
||||||
|
|
||||||
|
Обязательный параметр - **ИНН**.
|
||||||
|
|
||||||
|
|
||||||
|
Основные методы
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Пример использования методов:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
focus.base_info()
|
||||||
|
|
||||||
|
.. autofunction:: kontur_focus.Focus.base_info()
|
||||||
|
|
||||||
|
.. autofunction:: kontur_focus.Focus.advanced_info()
|
||||||
|
|
||||||
|
.. autofunction:: kontur_focus.Focus.excerpt(path=None)
|
||||||
|
|
||||||
|
.. autofunction:: kontur_focus.Focus.founders_history()
|
||||||
|
|
||||||
|
.. autofunction:: kontur_focus.Focus.foreign_representatives()
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
from .focus import Focus
|
from .focus import Focus
|
||||||
|
from .req import Request
|
||||||
from .government_lists import gl
|
from .government_lists import gl
|
||||||
|
|
||||||
__all__ = [Focus, gl]
|
__all__ = [Focus, Request, gl]
|
||||||
|
|||||||
@@ -2,45 +2,47 @@ import requests
|
|||||||
import os
|
import os
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from kontur_focus.government_lists import gl
|
from kontur_focus.government_lists import gl
|
||||||
|
from kontur_focus.req import Request
|
||||||
|
|
||||||
|
|
||||||
class Focus:
|
class Focus(Request):
|
||||||
_base_url = None
|
|
||||||
_access_key = None
|
|
||||||
_inn = None
|
|
||||||
_orgn = None
|
|
||||||
_basedir = os.path.abspath(os.path.dirname(__file__))
|
_basedir = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
def __init__(self, inn: str, ogrn: str = None):
|
def __init__(self, inn: str, ogrn: str = None):
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
self._base_url = os.environ.get('BASE_URL')
|
super().__init__(
|
||||||
self._access_key = os.environ.get('ACCESS_KEY')
|
base_url=os.environ.get('FOCUS_BASE_URL'),
|
||||||
self._inn = inn
|
access_key=os.environ.get('FOCUS_ACCESS_KEY'),
|
||||||
self._orgn = ogrn
|
inn=inn,
|
||||||
|
ogrn=ogrn
|
||||||
def _r_get(self, path: str):
|
)
|
||||||
full_url = f'{self._base_url}{path}'
|
|
||||||
payload = {'key': self._access_key, 'inn': self._inn, 'ogrn': self._orgn}
|
|
||||||
|
|
||||||
try:
|
|
||||||
response = requests.get(url=full_url, params=payload)
|
|
||||||
|
|
||||||
if response.headers['Content-Type'] == 'application/pdf':
|
|
||||||
return response
|
|
||||||
else:
|
|
||||||
return response.json()
|
|
||||||
except Exception:
|
|
||||||
return 'Request error!'
|
|
||||||
|
|
||||||
def base_info(self):
|
def base_info(self):
|
||||||
return self._r_get('/req')
|
"""Выгрузка базовых реквизитов Российских юридических лиц и индивидуальных предпринимателей
|
||||||
|
|
||||||
|
:return: Информация о ЮЛ
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return self.get(path='/req')
|
||||||
|
|
||||||
def advanced_info(self):
|
def advanced_info(self):
|
||||||
return self._r_get('/egrDetails')
|
"""Расширенные сведения на основе ЕГРЮЛ/ЕГРИП
|
||||||
|
|
||||||
def excerpt(self, path=None):
|
:return: Информация о ЮЛ
|
||||||
response = self._r_get('/excerpt')
|
:rtype: str
|
||||||
filename = f'{self._inn}_report.pdf'
|
"""
|
||||||
|
return self.get('/egrDetails')
|
||||||
|
|
||||||
|
def excerpt(self, path: str = None):
|
||||||
|
"""Выписка из ЕГРЮЛ/ЕГРИП
|
||||||
|
|
||||||
|
:param path: Путь выгрузки файла. Если не указан, выгружается в текущий каталог.
|
||||||
|
:type path: str, необязательный
|
||||||
|
:return: Результат и путьвыгрузки
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
response = self.get('/excerpt')
|
||||||
|
filename = f'{self.inn}_report.pdf'
|
||||||
|
|
||||||
if not path:
|
if not path:
|
||||||
file_path = os.path.join(self._basedir, filename)
|
file_path = os.path.join(self._basedir, filename)
|
||||||
@@ -51,18 +53,28 @@ class Focus:
|
|||||||
with open(file_path, mode='wb') as file:
|
with open(file_path, mode='wb') as file:
|
||||||
file.write(response.content)
|
file.write(response.content)
|
||||||
|
|
||||||
return 'File saved'
|
return f'File {file_path} saved'
|
||||||
except Exception:
|
except Exception:
|
||||||
return 'Saving error!'
|
return 'Saving error!'
|
||||||
|
|
||||||
def founders_history(self):
|
def founders_history(self):
|
||||||
return self._r_get('/foundersHistory')
|
"""История владения организацией
|
||||||
|
|
||||||
|
:return: Набор полей с информацией об изменениях
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return self.get('/foundersHistory')
|
||||||
|
|
||||||
def foreign_representatives(self):
|
def foreign_representatives(self):
|
||||||
return self._r_get('/foreignRepresentatives')
|
"""Иностранные представительства и филиалы
|
||||||
|
|
||||||
def full_analytics(self):
|
:return: Набор данных о представительствах
|
||||||
return self._r_get('/analytics')
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return self.get('/foreignRepresentatives')
|
||||||
|
|
||||||
|
def full_analytics(self): # DEPRECATED
|
||||||
|
return self.get('/analytics')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def government_lists():
|
def government_lists():
|
||||||
@@ -78,9 +90,9 @@ class Focus:
|
|||||||
:return: json
|
:return: json
|
||||||
"""
|
"""
|
||||||
if not list_name:
|
if not list_name:
|
||||||
return self._r_get('/analyticLists')
|
return self.get('/analyticLists')
|
||||||
else:
|
else:
|
||||||
data = self._r_get('/analyticLists')[0]['listsEntries']
|
data = self.get('/analyticLists')[0]['listsEntries']
|
||||||
list_id = next(item['uid'] for item in gl if item['name'] == list_name)
|
list_id = next(item['uid'] for item in gl if item['name'] == list_name)
|
||||||
|
|
||||||
return next(lst['isInList'] for lst in data if lst['id'] == list_id)
|
return next(lst['isInList'] for lst in data if lst['id'] == list_id)
|
||||||
|
|||||||
0
kontur_focus/focus_compliance.py
Normal file
0
kontur_focus/focus_compliance.py
Normal file
35
kontur_focus/req.py
Normal file
35
kontur_focus/req.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import requests
|
||||||
|
from requests.exceptions import RequestException
|
||||||
|
|
||||||
|
|
||||||
|
class Request:
|
||||||
|
"""Base request class, which uses 'requests' library
|
||||||
|
|
||||||
|
:return: Request result
|
||||||
|
:rtype: JSON or PDF file
|
||||||
|
"""
|
||||||
|
base_url = None
|
||||||
|
_access_key = None
|
||||||
|
content_type = None
|
||||||
|
inn = None
|
||||||
|
ogrn = None
|
||||||
|
|
||||||
|
def __init__(self, base_url: str, access_key: str, inn: str = None, ogrn: str = None):
|
||||||
|
self.base_url = base_url
|
||||||
|
self._access_key = access_key
|
||||||
|
self.inn = inn
|
||||||
|
self.ogrn = ogrn
|
||||||
|
|
||||||
|
def get(self, path: str):
|
||||||
|
full_url = f'{self.base_url}{path}'
|
||||||
|
payload = {'key': self._access_key, 'inn': self.inn, 'ogrn': self.ogrn}
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.get(url=full_url, params=payload)
|
||||||
|
|
||||||
|
if response.headers['Content-Type'] == 'application/pdf':
|
||||||
|
return response
|
||||||
|
else:
|
||||||
|
return response.json()
|
||||||
|
except RequestException as e:
|
||||||
|
return f'Error: {e}'
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
requests
|
requests
|
||||||
python-dotenv
|
python-dotenv
|
||||||
twine
|
twine
|
||||||
wheel
|
wheel
|
||||||
|
sphinx
|
||||||
Reference in New Issue
Block a user