diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml new file mode 100644 index 0000000..3edacc7 --- /dev/null +++ b/.github/workflows/master.yml @@ -0,0 +1,64 @@ +name: CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.8, 3.11] + + steps: + - uses: actions/checkout@v2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install . + pip install -r requirements-test.txt + pip install codecov + python -m spylon_kernel install --user + env: + JUPYTER_PLATFORM_DIRS: 1 + + - name: Test with pytest + run: | + python run_tests.py -vxrs --capture=sys --color=yes + python setup.py sdist + pip install --no-binary :all: dist/*.tar.gz + env: + JUPYTER_PLATFORM_DIRS: 1 + + - name: Cache pip + uses: actions/cache@v2 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + + - name: Cache Spark + uses: actions/cache@v2 + with: + path: ~/.cache/spark + key: ${{ runner.os }}-spark + restore-keys: | + ${{ runner.os }}-spark- + + - name: Codecov + if: success() + run: | + codecov + diff --git a/.gitignore b/.gitignore index f98260d..fb0f2f6 100644 --- a/.gitignore +++ b/.gitignore @@ -95,4 +95,7 @@ ENV/ README.rst # Extra development notebooks -Untitled*.ipynb \ No newline at end of file +Untitled*.ipynb + +# sonar +.scannerwork \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 122cf20..3a4f8a1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ ipykernel -jedi<0.11 +jedi metakernel spylon[spark] tornado diff --git a/setup.py b/setup.py index e50b296..8bdd7c9 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ url='http://github.com/maxpoint/spylon-kernel', install_requires=[ 'ipykernel', - 'jedi>=0.10', + 'jedi', 'metakernel', 'spylon[spark]', 'tornado', diff --git a/spylon_kernel/init_spark_magic.py b/spylon_kernel/init_spark_magic.py index dd10300..a58fae0 100644 --- a/spylon_kernel/init_spark_magic.py +++ b/spylon_kernel/init_spark_magic.py @@ -2,13 +2,13 @@ import logging import spylon.spark +from parso import split_lines from metakernel import Magic, option from .scala_interpreter import init_spark try: import jedi from jedi.api.helpers import get_on_completion_name - from jedi import common except ImportError as ex: jedi = None @@ -79,7 +79,7 @@ def get_completions(self, info): position = (info['line_num'], info['column']) interpreter = jedi.Interpreter(text, [self.env]) - lines = common.splitlines(text) + lines = split_lines(text) name = get_on_completion_name( interpreter._get_module_node(), lines, @@ -89,4 +89,4 @@ def get_completions(self, info): before = text[:len(text) - len(name)] completions = interpreter.completions() completions = [before + c.name_with_symbols for c in completions] - return [c[info['start']:] for c in completions] \ No newline at end of file + return [c[info['start']:] for c in completions] diff --git a/spylon_kernel/scala_interpreter.py b/spylon_kernel/scala_interpreter.py index 789a56a..9c580fc 100644 --- a/spylon_kernel/scala_interpreter.py +++ b/spylon_kernel/scala_interpreter.py @@ -52,7 +52,7 @@ def init_spark(conf=None, capture_stderr=False): # Create a temp directory that gets cleaned up on exit output_dir = os.path.abspath(tempfile.mkdtemp()) - def cleanup(): + def cleanup(signalnum=None, frame=None): shutil.rmtree(output_dir, True) atexit.register(cleanup) signal.signal(signal.SIGTERM, cleanup) diff --git a/spylon_kernel/scala_kernel.py b/spylon_kernel/scala_kernel.py index 5f94833..d0052f4 100644 --- a/spylon_kernel/scala_kernel.py +++ b/spylon_kernel/scala_kernel.py @@ -18,7 +18,7 @@ class SpylonKernel(MetaKernel): implementation = 'spylon-kernel' implementation_version = get_versions()['version'] language = 'scala' - language_version = '2.11' + language_version = '2.12' banner = "spylon-kernel - evaluates Scala statements and expressions." language_info = { 'mimetype': 'text/x-scala', diff --git a/test/test_scala_interpreter.py b/test/test_scala_interpreter.py index 163b62b..f14f27e 100644 --- a/test/test_scala_interpreter.py +++ b/test/test_scala_interpreter.py @@ -11,7 +11,7 @@ def scala_interpreter(request): def test_simple_expression(scala_interpreter): result = scala_interpreter.interpret("4 + 4") - assert re.match('res\d+: Int = 8\n', result) + assert re.match(r'res\d+: Int = 8\n', result) def test_completion(scala_interpreter): diff --git a/test/test_scala_kernel.py b/test/test_scala_kernel.py index 28a574a..43e3a95 100644 --- a/test/test_scala_kernel.py +++ b/test/test_scala_kernel.py @@ -42,7 +42,7 @@ def test_simple_expression(spylon_kernel): result = spylon_kernel.do_execute_direct("4 + 4") assert isinstance(result, TextOutput) output = result.output - assert re.match('res\d+: Int = 8\n', output) + assert re.match(r'res\d+: Int = 8\n', output) def test_exception(spylon_kernel): diff --git a/test_spylon_kernel_jkt.py b/test_spylon_kernel_jkt.py index 4f2f70e..204a1ea 100644 --- a/test_spylon_kernel_jkt.py +++ b/test_spylon_kernel_jkt.py @@ -41,7 +41,7 @@ class SpylonKernelTests(jupyter_kernel_test.KernelTests): 'result': 'x: Int = 1\n' }, { 'code': 'val y = 1 to 3', - 'result': 'y: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)\n' + 'result': 'y: scala.collection.immutable.Range.Inclusive = Range 1 to 3\n' }] spark_configured = False