Modify dependencies to allow for 3.7 compatibility

Some dependencies are not available for python 3.7 anymore. Instead
of trying to support different versions of the libraries, we opt to
focus on the latest python version, and allow for CORE functionality
for earlier versions.
master
J. Fernando Sánchez 8 months ago
parent 3f227986f3
commit f3d4415ffb

3
.gitignore vendored

@ -7,4 +7,5 @@ README.html
__pycache__ __pycache__
VERSION VERSION
Dockerfile-* Dockerfile-*
Dockerfile Dockerfile
senpy_data

@ -7,12 +7,14 @@
stages: stages:
- test - test
- publish - publish
- test_image
- deploy - deploy
variables: variables:
KUBENS: senpy KUBENS: senpy
LATEST_IMAGE: "${HUB_REPO}:${CI_COMMIT_SHORT_SHA}" LATEST_IMAGE: "${HUB_REPO}:${CI_COMMIT_SHORT_SHA}"
SENPY_DATA: "/senpy-data/" # This is configured in the CI job SENPY_DATA: "/senpy-data/" # This is configured in the CI job
NLTK_DATA: "/senpy-data/nltk" # Store NLTK downloaded data
docker: docker:
stage: publish stage: publish
@ -51,18 +53,30 @@ docker-latest:
refs: refs:
- master - master
testimage:
tags:
- docker
stage: test_image
image: "$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG"
script:
- python -m senpy --no-run --test
testpy37: testpy37:
tags: tags:
- docker - docker
variables:
SENPY_STRICT: "false"
image: python:3.7 image: python:3.7
stage: test stage: test
script: script:
- pip install -r requirements.txt -r test-requirements.txt -r extra-requirements.txt - pip install -r requirements.txt -r test-requirements.txt
- python setup.py test - python setup.py test
testpy310: testpy310:
tags: tags:
- docker - docker
variables:
SENPY_STRICT: "true"
image: python:3.10 image: python:3.10
stage: test stage: test
script: script:
@ -74,7 +88,7 @@ push_pypi:
- tags - tags
tags: tags:
- docker - docker
image: python:3.7 image: python:3.10
stage: publish stage: publish
script: script:
- echo $CI_COMMIT_TAG > senpy/VERSION - echo $CI_COMMIT_TAG > senpy/VERSION
@ -87,7 +101,7 @@ check_pypi:
- tags - tags
tags: tags:
- docker - docker
image: python:3.7 image: python:3.10
stage: deploy stage: deploy
script: script:
- pip install senpy==$CI_COMMIT_TAG - pip install senpy==$CI_COMMIT_TAG

@ -58,7 +58,7 @@ Its code is pure Python, and the only limitations are imposed by its dependencie
Currently, the CI/CD pipeline tests the code on: Currently, the CI/CD pipeline tests the code on:
* GNU/Linux with Python versions 3.4, 3.5, 3.6 and 3.7 * GNU/Linux with Python versions 3.7+ (3.10+ recommended for all plugins)
* MacOS and homebrew's python3 * MacOS and homebrew's python3
* Windows 10 and chocolatey's python3 * Windows 10 and chocolatey's python3

@ -2,5 +2,5 @@ gsitk>0.1.9.1
flask_cors==3.0.10 flask_cors==3.0.10
Pattern==3.6 Pattern==3.6
lxml==4.9.3 lxml==4.9.3
pandas~=2 pandas==2.1.1
textblob==0.17.1 textblob==0.17.1

@ -23,6 +23,7 @@ from flask import Flask
from senpy.extensions import Senpy from senpy.extensions import Senpy
from senpy.utils import easy_test from senpy.utils import easy_test
from senpy.plugins import list_dependencies from senpy.plugins import list_dependencies
from senpy import config
import logging import logging
import os import os
@ -95,7 +96,7 @@ def main():
parser.add_argument( parser.add_argument(
'--strict', '--strict',
action='store_true', action='store_true',
default=False, default=config.strict,
help='Fail if optional plugins cannot be loaded.') help='Fail if optional plugins cannot be loaded.')
parser.add_argument( parser.add_argument(
'--test', '--test',

@ -0,0 +1,7 @@
import os
strict = os.environ.get('SENPY_STRICT', '').lower() not in ["", "false", "f"]
data_folder = os.environ.get('SENPY_DATA', None)
if data_folder:
data_folder = os.path.abspath(data_folder)
testing = os.environ.get('SENPY_TESTING', "") != ""

@ -46,6 +46,7 @@ from .. import models, utils
from .. import api from .. import api
from .. import gsitk_compat from .. import gsitk_compat
from .. import testing from .. import testing
from .. import config
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -75,7 +76,7 @@ class PluginMeta(models.BaseMeta):
cls = super(PluginMeta, mcs).__new__(mcs, name, bases, attrs) cls = super(PluginMeta, mcs).__new__(mcs, name, bases, attrs)
if alias in mcs._classes: if alias in mcs._classes:
if os.environ.get('SENPY_TESTING', ""): if config.testing:
raise Exception( raise Exception(
('The type of plugin {} already exists. ' ('The type of plugin {} already exists. '
'Please, choose a different name').format(name)) 'Please, choose a different name').format(name))
@ -123,7 +124,7 @@ class Plugin(with_metaclass(PluginMeta, models.Plugin)):
os.path.dirname(inspect.getfile(self.__class__))) os.path.dirname(inspect.getfile(self.__class__)))
if not data_folder: if not data_folder:
data_folder = os.environ['SENPY_DATA'] data_folder = config.data_folder
if not data_folder: if not data_folder:
data_folder = os.getcwd() data_folder = os.getcwd()

@ -27,6 +27,7 @@ from senpy.models import Results, Entry, EmotionSet, Emotion, Plugins
from senpy import plugins from senpy import plugins
from senpy.plugins.postprocessing.emotion.centroids import CentroidConversion from senpy.plugins.postprocessing.emotion.centroids import CentroidConversion
from senpy.gsitk_compat import GSITK_AVAILABLE from senpy.gsitk_compat import GSITK_AVAILABLE
from senpy import config
import pandas as pd import pandas as pd
@ -386,7 +387,7 @@ class PluginsTest(TestCase):
def make_mini_test(fpath): def make_mini_test(fpath):
def mini_test(self): def mini_test(self):
for plugin in plugins.from_path(fpath, install=True): for plugin in plugins.from_path(fpath, install=True, strict=config.strict):
plugin.test() plugin.test()
return mini_test return mini_test

Loading…
Cancel
Save