7 Commits

Author SHA1 Message Date
1227c7fc1c 2025.11.6: Fixed naming error 2025-11-13 17:31:33 +03:00
2af4797346 Updated docs 2025-11-10 15:23:44 +03:00
8a093175c4 2025.11.5: Added new method 2025-11-10 15:08:40 +03:00
b50471276f Added exception for incorrect answer 2025-11-07 15:52:51 +03:00
1d55e08c15 Fixed individual report 2025-11-07 15:28:16 +03:00
71596d9cec Bump version 2025-11-07 13:45:39 +03:00
71cd6ddfcd Small fix 2025-11-07 13:44:19 +03:00
15 changed files with 115 additions and 58 deletions

View File

@@ -36,6 +36,8 @@
.. autofunction:: kontur_focus.FocusCompliance.search_global_company_profiles_id()
.. autofunction:: kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile(profile_id_list)
.. autofunction:: kontur_focus.FocusCompliance.legal_entity_profile_report(profile_id_list, path)
.. autofunction:: kontur_focus.FocusCompliance.full_company_report(model, path)

Binary file not shown.

Binary file not shown.

View File

@@ -182,6 +182,27 @@
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Key Error&#39;</span><span class="p">}</span>
<span class="k">def</span><span class="w"> </span><span class="nf">full_legal_entity_sanctions_profile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">profile_id_list</span><span class="p">:</span> <span class="nb">list</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Просмотр полной информации определенного санкционного профиля ЮЛ</span>
<span class="sd"> :param profile_id_list: Идентификатор санкционного профиля ЮЛ. Идентификатор возвращается в методе </span>
<span class="sd"> «Поиск сводной информации по санкционным профилям ЮЛ» - </span>
<span class="sd"> GET /banks/{bankId}/companies/profiles/search</span>
<span class="sd"> :type profile_id_list: list</span>
<span class="sd"> :return: Полная информация по профилю ЮЛ</span>
<span class="sd"> :rtype: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">profile_id_list</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;message&#39;</span><span class="p">:</span> <span class="s1">&#39;Не указан список ID профилей&#39;</span><span class="p">}</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">profile</span> <span class="o">=</span> <span class="n">profile_id_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">path</span><span class="o">=</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_focus_base_url</span><span class="si">}</span><span class="s1">/companies/profiles/</span><span class="si">{</span><span class="n">profile</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="n">response</span><span class="p">}</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Ошибка в ID профиля.&#39;</span><span class="p">}</span>
<span class="k">def</span><span class="w"> </span><span class="nf">legal_entity_profile_report</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">profile_id_list</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Получение печатного отчета по профилю ЮЛ</span>
@@ -286,19 +307,25 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">inn</span><span class="p">:</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">path</span><span class="o">=</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_focus_base_url</span><span class="si">}</span><span class="s1">/formFullIndividualReport&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">inn</span> <span class="ow">and</span> <span class="n">passport</span> <span class="ow">and</span> <span class="n">fio</span><span class="p">:</span>
<span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">inn</span> <span class="ow">and</span> <span class="n">passport</span> <span class="ow">and</span> <span class="n">fio</span><span class="p">:</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">path</span><span class="o">=</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_focus_base_url</span><span class="si">}</span><span class="s1">/formFullIndividualReport&#39;</span><span class="p">,</span> <span class="n">passportNumber</span><span class="o">=</span><span class="n">passport</span><span class="p">,</span> <span class="n">fio</span><span class="o">=</span><span class="n">fio</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Необходимо указать: либо ИНН, либо ФИО (хотя бы фамилию и имя) и паспорт&#39;</span><span class="p">}</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Необходимо указать: либо ИНН, либо ФИО (хотя бы фамилию и имя) и паспорт&#39;</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_save_file</span><span class="p">(</span>
<span class="n">filename</span><span class="o">=</span><span class="s1">&#39;Полный_отчет&#39;</span><span class="p">,</span>
<span class="n">content</span><span class="o">=</span><span class="n">response</span><span class="o">.</span><span class="n">content</span><span class="p">,</span>
<span class="n">file_type</span><span class="o">=</span><span class="s1">&#39;docx&#39;</span><span class="p">,</span>
<span class="n">path</span><span class="o">=</span><span class="n">path</span>
<span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_save_file</span><span class="p">(</span>
<span class="n">filename</span><span class="o">=</span><span class="s1">&#39;Полный_отчет&#39;</span><span class="p">,</span>
<span class="n">content</span><span class="o">=</span><span class="n">response</span><span class="o">.</span><span class="n">content</span><span class="p">,</span>
<span class="n">file_type</span><span class="o">=</span><span class="s1">&#39;docx&#39;</span><span class="p">,</span>
<span class="n">path</span><span class="o">=</span><span class="n">path</span>
<span class="p">)</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;file&#39;</span><span class="p">:</span> <span class="n">result</span><span class="p">}</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;file&#39;</span><span class="p">:</span> <span class="n">result</span><span class="p">}</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Ошибка получения отчета. Проверьте корректность ИНН, ФИО или паспортных данных.&#39;</span><span class="p">}</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Ошибка получения отчета. Проверьте корректность ИНН, ФИО или паспортных данных.&#39;</span><span class="p">}</span>
<span class="c1"># Иноагенты</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_foreign_agents_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fa_type</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span> <span class="c1"># Не работает, если нет подключенной лицензии</span>

View File

@@ -36,6 +36,8 @@
.. autofunction:: kontur_focus.FocusCompliance.search_global_company_profiles_id()
.. autofunction:: kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile(profile_id_list)
.. autofunction:: kontur_focus.FocusCompliance.legal_entity_profile_report(profile_id_list, path)
.. autofunction:: kontur_focus.FocusCompliance.full_company_report(model, path)

View File

@@ -7,24 +7,15 @@
Установка через pip
-------------------
Выполните ``pip install kontur-focus --index-url https://__token__:<your_personal_token>@git.selectel.org/api/v4/projects/6350/packages/pypi/simple``
Выполните ``pip install --index-url https://git.slrover.ru/api/packages/public/pypi/simple/ kontur-focus``
Где `<your_personal_token>` - `персональный токен <https://git.selectel.org/help/user/profile/personal_access_tokens>`_ доступа Gitlab.
Использование requirements.txt
------------------------------
Перед использованием необходимо настроить Registry.
Добавьте в конец файла ``requirements.txt``::
Создайте файл `.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>`_.
--index-url https://git.slrover.ru/api/packages/public/pypi/simple/
kontur-focus
После выполните ``pip install -r requirements.txt``

View File

@@ -54,6 +54,7 @@
<li class="toctree-l2"><a class="reference internal" href="#id5">Юридические лица</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.company_is_foreign_agent"><code class="docutils literal notranslate"><span class="pre">company_is_foreign_agent()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.search_global_company_profiles_id"><code class="docutils literal notranslate"><span class="pre">search_global_company_profiles_id()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile"><code class="docutils literal notranslate"><span class="pre">full_legal_entity_sanctions_profile()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.legal_entity_profile_report"><code class="docutils literal notranslate"><span class="pre">legal_entity_profile_report()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.full_company_report"><code class="docutils literal notranslate"><span class="pre">full_company_report()</span></code></a></li>
</ul>
@@ -149,6 +150,25 @@
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile">
<span class="sig-name descname"><span class="pre">full_legal_entity_sanctions_profile</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">profile_id_list</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile" title="Ссылка на это определение"></a></dt>
<dd><p>Просмотр полной информации определенного санкционного профиля ЮЛ</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>profile_id_list</strong> (<em>list</em>) Идентификатор санкционного профиля ЮЛ. Идентификатор возвращается в методе
«Поиск сводной информации по санкционным профилям ЮЛ» -
GET /banks/{bankId}/companies/profiles/search</p>
</dd>
<dt class="field-even">Результат<span class="colon">:</span></dt>
<dd class="field-even"><p>Полная информация по профилю ЮЛ</p>
</dd>
<dt class="field-odd">Тип результата<span class="colon">:</span></dt>
<dd class="field-odd"><p>dict</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="kontur_focus.FocusCompliance.legal_entity_profile_report">
<span class="sig-name descname"><span class="pre">legal_entity_profile_report</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">profile_id_list</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kontur_focus.FocusCompliance.legal_entity_profile_report" title="Ссылка на это определение"></a></dt>

View File

@@ -133,6 +133,8 @@
<li><a href="focus-compliance.html#kontur_focus.FocusCompliance.full_company_report">full_company_report() (в модуле kontur_focus.FocusCompliance)</a>
</li>
<li><a href="focus-compliance.html#kontur_focus.FocusCompliance.full_individual_report">full_individual_report() (в модуле kontur_focus.FocusCompliance)</a>
</li>
<li><a href="focus-compliance.html#kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile">full_legal_entity_sanctions_profile() (в модуле kontur_focus.FocusCompliance)</a>
</li>
</ul></td>
</tr></table>

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -84,20 +84,15 @@
<p>Для установки необходимо иметь доступ в корпоративный <a class="reference external" href="https://git.selectel.org">Gitlab</a>, чтобы получить доступ к Registry PyPi.</p>
<section id="pip">
<h2>Установка через pip<a class="headerlink" href="#pip" title="Ссылка на этот заголовок"></a></h2>
<p>Выполните <code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">kontur-focus</span> <span class="pre">--index-url</span> <span class="pre">https://__token__:&lt;your_personal_token&gt;&#64;git.selectel.org/api/v4/projects/6350/packages/pypi/simple</span></code></p>
<p>Где <cite>&lt;your_personal_token&gt;</cite> - <a class="reference external" href="https://git.selectel.org/help/user/profile/personal_access_tokens">персональный токен</a> доступа Gitlab.</p>
<p>Выполните <code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">--index-url</span> <span class="pre">https://git.slrover.ru/api/packages/public/pypi/simple/</span> <span class="pre">kontur-focus</span></code></p>
</section>
<section id="requirements-txt">
<h2>Использование requirements.txt<a class="headerlink" href="#requirements-txt" title="Ссылка на этот заголовок"></a></h2>
<p>Перед использованием необходимо настроить Registry.</p>
<p>Создайте файл <cite>.pypirc</cite> в папке пользователя и добавьте параметры репозитория:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">[gitlab]</span>
<span class="go">repository = https://git.selectel.org/api/v4/projects/6350/packages/pypi</span>
<span class="go">username = __token__</span>
<span class="go">password = &lt;your personal access token&gt;</span>
<p>Добавьте в конец файла <code class="docutils literal notranslate"><span class="pre">requirements.txt</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">--</span><span class="n">index</span><span class="o">-</span><span class="n">url</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">git</span><span class="o">.</span><span class="n">slrover</span><span class="o">.</span><span class="n">ru</span><span class="o">/</span><span class="n">api</span><span class="o">/</span><span class="n">packages</span><span class="o">/</span><span class="n">public</span><span class="o">/</span><span class="n">pypi</span><span class="o">/</span><span class="n">simple</span><span class="o">/</span>
<span class="n">kontur</span><span class="o">-</span><span class="n">focus</span>
</pre></div>
</div>
<p>Более подробно <a class="reference external" href="https://git.selectel.org/help/user/packages/pypi_repository/index">тут</a>.</p>
<p>После выполните <code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">-r</span> <span class="pre">requirements.txt</span></code></p>
</section>
</section>

View File

@@ -7,24 +7,15 @@
Установка через pip
-------------------
Выполните ``pip install kontur-focus --index-url https://__token__:<your_personal_token>@git.selectel.org/api/v4/projects/6350/packages/pypi/simple``
Выполните ``pip install --index-url https://git.slrover.ru/api/packages/public/pypi/simple/ kontur-focus``
Где `<your_personal_token>` - `персональный токен <https://git.selectel.org/help/user/profile/personal_access_tokens>`_ доступа Gitlab.
Использование requirements.txt
------------------------------
Перед использованием необходимо настроить Registry.
Добавьте в конец файла ``requirements.txt``::
Создайте файл `.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>`_.
--index-url https://git.slrover.ru/api/packages/public/pypi/simple/
kontur-focus
После выполните ``pip install -r requirements.txt``

View File

@@ -107,6 +107,27 @@ class FocusCompliance(Request):
except KeyError:
return {'success': False, 'result': 'Key Error'}
def full_legal_entity_sanctions_profile(self, profile_id_list: list) -> dict:
"""Просмотр полной информации определенного санкционного профиля ЮЛ
:param profile_id_list: Идентификатор санкционного профиля ЮЛ. Идентификатор возвращается в методе
«Поиск сводной информации по санкционным профилям ЮЛ» -
GET /banks/{bankId}/companies/profiles/search
:type profile_id_list: list
:return: Полная информация по профилю ЮЛ
:rtype: dict
"""
if not profile_id_list:
return {'success': False, 'message': 'Не указан список ID профилей'}
else:
try:
profile = profile_id_list[0]
response = self.get(path=f'{self._focus_base_url}/companies/profiles/{profile}')
return {'success': True, 'result': response}
except KeyError:
return {'success': False, 'result': 'Ошибка в ID профиля.'}
def legal_entity_profile_report(self, profile_id_list: list, path: str = None) -> dict:
"""Получение печатного отчета по профилю ЮЛ
@@ -125,7 +146,7 @@ class FocusCompliance(Request):
for profile_id in profile_id_list:
response = self.get(f'{self._focus_base_url}/companies/profiles/{profile_id}/report')
result = self._save_file(
filename=f'Отчет_по_профилю_{profile_id_list[0]}',
filename=f'Отчет_по_профилю_{profile_id_list[0]}_{profile_id}',
content=response.content,
file_type='docx',
path=path
@@ -211,19 +232,25 @@ class FocusCompliance(Request):
"""
if self.inn:
response = self.get(path=f'{self._focus_base_url}/formFullIndividualReport')
if not self.inn and passport and fio:
elif not self.inn and passport and fio:
response = self.get(path=f'{self._focus_base_url}/formFullIndividualReport', passportNumber=passport, fio=fio)
else:
return {'success': True, 'result': 'Необходимо указать: либо ИНН, либо ФИО (хотя бы фамилию и имя) и паспорт'}
return {'success': False, 'result': 'Необходимо указать: либо ИНН, либо ФИО (хотя бы фамилию и имя) и паспорт'}
result = self._save_file(
filename='Полный_отчет',
content=response.content,
file_type='docx',
path=path
)
try:
if response.status_code == 200:
result = self._save_file(
filename='Полный_отчет',
content=response.content,
file_type='docx',
path=path
)
return {'success': True, 'file': result}
return {'success': True, 'file': result}
else:
return {'success': False, 'result': 'Ошибка получения отчета. Проверьте корректность ИНН, ФИО или паспортных данных.'}
except AttributeError:
return {'success': False, 'result': 'Ошибка получения отчета. Проверьте корректность ИНН, ФИО или паспортных данных.'}
# Иноагенты
def get_foreign_agents_list(self, fa_type: str = None) -> list: # Не работает, если нет подключенной лицензии

View File

@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name="kontur_focus",
version="2025.11.1",
version="2025.11.6",
author="Ilya Sapunov",
author_email="sapunov@selectel.ru",
description="Библиотека-обертка для взаимодействия с REST API Контур.Фокус и Фокус.Комплаенс",