Удаление неиспользуемых диалектов и тестов SQLAlchemy? - PullRequest
0 голосов
/ 11 ноября 2018

Я, помимо прочего, упаковываю SQLAlchemy для развертывания на AWS Lambda и собираюсь уменьшить размер архивного архива проекта. В sqlalchemy/dialects я вижу, что есть список диалектов SQL, которые поддерживает SQLAlchemy:

48K ./firebird
48K ./sybase
88K ./sqlite
112K    ./oracle
124K    ./mssql
204K    ./mysql
240K    ./postgresql 

Есть ли проблемы с удалением диалектов, для которых этот проект не используется? Если я использую только MySQL, мне, безусловно, не понадобится определение диалекта sqlite.

Или, возможно, удалить тесты под sqlalchemy/testing:

12K ./testing/engines.py
12K ./testing/fixtures.py
12K ./testing/profiling.py
16K ./testing/assertsql.py
16K ./testing/exclusions.py
16K ./testing/provision.py
20K ./testing/assertions.py
28K ./testing/requirements.py
36K ./testing/plugin
136K    ./testing/suite

1 Ответ

0 голосов
/ 11 ноября 2018

Я выполнил поиск слова «диалекты» в репозитории SQLAlchemy github , и основным выделенным модулем был SQLAlchemy.databases.__init__.py:

from ..dialects.sqlite import base as sqlite
from ..dialects.postgresql import base as postgresql
postgres = postgresql
from ..dialects.mysql import base as mysql
from ..dialects.oracle import base as oracle
from ..dialects.firebird import base as firebird
from ..dialects.mssql import base as mssql
from ..dialects.sybase import base as sybase


__all__ = (
    'firebird',
    'mssql',
    'mysql',
    'postgresql',
    'sqlite',
    'oracle',
    'sybase',
)

Который я изменил на:

from ..dialects.mysql import base as mysql


__all__ = (
    'mysql',
)

Я также изменил объявление __all__ в sqlalchemy.dialects.__init__.py. Это:

__all__ = (
    'firebird',
    'mssql',
    'mysql',
    'oracle',
    'postgresql',
    'sqlite',
    'sybase',
)

до:

__all__ = (
    'mysql'
)

( На самом деле я не знаю, нужно ли изменять эти объявления __all__. Я не проверял это, не делая этого. )

Затем я удалил все подкаталоги sqlalchemy.dialects.*, кроме mysql, и мне удалось запустить несколько приложений MySQL CRUD, которые я сижу без исключения.

Также удаление папки sqlalchemy.testing не вызвало проблем.

Я попытался запустить приложение sqllite и получил sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:sqlite.

Таким образом, кажется, что с необходимостью только изменить один или два файла, вы можете сойти с рук, если только будете работать на диалекте, который вы оставите позади.

Главное, что после удаления диалектов все тесты для вашего приложения проходят (при условии, что ваш тестовый охват хороший), поскольку я тестировал только на довольно ограниченном наборе небольших приложений ORM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...