# Maintainer (arch): Muflone http://www.muflone.com/contacts/english/
# Maintainer (arch): Bruno Pagani <archange@archlinux.org>
# Contributor: Francois Boulogne <fboulogne@april.org>
# Contributor: TDY <tdy@gmx.com>
# Maintainer: Parabola Hackers <dev@lists.parabola.nu>


# parabola changes and rationale:
#  - removed 'python-pyqt5-webengine' dependency


pkgname=spyder
pkgver=5.4.2
pkgrel=2
pkgrel+=.parabola1
pkgdesc="The Scientific Python Development Environment"
arch=(any)
url="https://www.spyder-ide.org/"
license=(MIT)
makedepends=(python-sphinx python-setuptools-scm python-wheel)
depends=(
    python-atomicwrites
    python-chardet
    python-cloudpickle
    python-cookiecutter
    python-diff-match-patch
    python-intervaltree
    ipython
    python-jedi
    python-jellyfish
    python-jsonschema
    python-keyring
    jupyter-nbconvert
    python-numpydoc
    python-parso
    python-pexpect
    python-pickleshare
    python-psutil
    python-pygments
    python-pylint
    python-pylint-venv
    python-pyqt5
    python-pyqt5-webengine
    python-lsp-server
    python-lsp-black
    python-pyls-spyder
    python-pyxdg
    python-pyzmq
    python-qdarkstyle
    python-qstylizer
    python-qtawesome
    python-qtconsole
    python-qtpy
    python-rtree
    python-setuptools
    python-sphinx
    python-spyder-kernels
    python-textdistance
    python-three-merge
    python-watchdog
    autopep8
    flake8
    python-pycodestyle
    python-pydocstyle
    python-pyflakes
    python-rope
    yapf
    python-whatthepatch
)
depends=( ${depends[*]/python-pyqt5-webengine/} )
# Starting from autopep8, required optdeps of python-language-server
optdepends=(
    'cython: run Cython files in the IPython Console'
    'python-matplotlib: 2D/3D plotting in the IPython Console'
    'python-numpy: support for N-dimensional arrays in the Variable Explorer'
    'python-pandas: support for DataFrames and Series in the Variable Explorer'
    'python-scipy: support for Matlab workspace in the Variable Explorer'
    'python-sympy: symbolic mathematics in the IPython Console'
)
checkdepends=(
    python-pytest
    python-pytest-qt
    python-pytest-mock
    python-pytest-cov
    python-pytest-order
    python-pytest-lazy-fixture
    python-pytest-timeout
    python-flaky
    python-pandas
    python-scipy
    python-sympy
    python-pillow
    python-matplotlib
    cython
    git
    tk
    xorg-server-xvfb
)
source=(https://github.com/spyder-ide/${pkgname}/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz)
source+=(no-webengine.patch)
sha512sums=('e3650cd43d14d2ce7e6f90557904d6ac1e5db5f7846e87e8a1fd8173cdef97cdee485250caf00768482611b8318eaba60259efcaccf41f0308e888ac85eeb88d')
# sha512sums+=('acdb96f70df8362159d4997e01eff945bb902fe0391c45dcdbe1425ef1ace4c03405b01a317051a4d9acb0d942c946f958edcf720cd326743bd39ccd526fb69b')
sha512sums+=('4d2180402a766275b47842653df2db483bb7ccc7dc9a8ce6e604cfad9c7c158a490fa021295deca7ea8d7d1521f32bd64a67e5821d75dc63ba00ac445c54b3c5')

prepare() {
  cd ${pkgname}-${pkgver}
  # Allow our python libraries versions
  sed 's|IPYTHON_REQVER = ">=7.31.1;<9.0.0"|IPYTHON_REQVER = ">=7.31.1"|' -i spyder/dependencies.py
  sed "s|JEDI_REQVER = '>=0.17.2;<0.19.0'|JEDI_REQVER = '>=0.17.2'|" -i spyder/dependencies.py
  sed "s|PARSO_REQVER = '>=0.7.0;<0.9.0'|PARSO_REQVER = '>=0.7.0'|" -i spyder/dependencies.py
  sed "s|PYLSP_REQVER = '>=1.7.0;<1.8.0'|PYLSP_REQVER = '>=1.7.0'|" -i spyder/dependencies.py
  sed "s|QDARKSTYLE_REQVER = '>=3.0.2;<3.1.0'|QDARKSTYLE_REQVER = '>=3.0.2'|" -i spyder/dependencies.py
  sed "s|QTCONSOLE_REQVER = '>=5.4.0;<5.5.0'|QTCONSOLE_REQVER = '>=5.4.0'|" -i spyder/dependencies.py
  sed "s|ipython>=7.31.1,<9.0.0|ipython>=7.31.1|" -i setup.py
  sed "s|jedi>=0.17.2,<0.19.0|jedi>=0.17.2|" -i setup.py
  sed "s|parso>=0.7.0,<0.9.0|parso>=0.7.0|" -i setup.py
  sed "s|python-lsp-server\[all\]>=1.7.0,<1.8.0|python-lsp-server\[all\]>=1.7.0|" -i setup.py
  sed "s|qdarkstyle>=3.0.2,<3.1.0|qdarkstyle>=3.0.2|" -i setup.py
  sed "s|qtconsole>=5.4.0,<5.5.0|qtconsole>=5.4.0|" -i setup.py
  # Required change for ipython
  sed "s|extra_extension|extra_extensions|" -i spyder/plugins/ipythonconsole/tests/test_ipythonconsole.py

  ## parabola changes ##

  # delete CI litter
  rm -rf .github/

  # remove 'python-pyqt5-webengine' dependency
  patch -Np1 < "${srcdir}"/no-webengine.patch
  rm -v spyder/plugins/help/plugin.py
  rm -v spyder/plugins/help/tests/test_plugin.py
}

build() {
  cd ${pkgname}-${pkgver}
  python setup.py build
}

check() {
  cd ${pkgname}-${pkgver}
  # Required per above patching
  sed "s|ipython >=7.31.1,<9.0.0|ipython >=7.31.1|" -i binder/environment.yml
  sed "s|jedi >=0.17.2,<0.19.0|jedi >=0.17.2|" -i binder/environment.yml
  sed "s|parso >=0.7.0,<0.9.0|parso >=0.7.0|" -i binder/environment.yml
  sed "s|python-lsp-server >=1.7.0,<1.8.0|python-lsp-server >=1.7.0|" -i binder/environment.yml
  sed "s|qdarkstyle >=3.0.2,<3.1.0|qdarkstyle >=3.0.2|" -i binder/environment.yml
  sed "s|qtconsole >=5.4.0,<5.5.0|qtconsole >=5.4.0|" -i binder/environment.yml
  sed "s|ipython >=7.31.1,<9.0.0|ipython >=7.31.1|" -i requirements/main.yml
  sed "s|jedi >=0.17.2,<0.19.0|jedi >=0.17.2|" -i requirements/main.yml
  sed "s|parso >=0.7.0,<0.9.0|parso >=0.7.0|" -i requirements/main.yml
  sed "s|python-lsp-server >=1.7.0,<1.8.0|python-lsp-server >=1.7.0|" -i requirements/main.yml
  sed "s|qdarkstyle >=3.0.2,<3.1.0|qdarkstyle >=3.0.2|" -i requirements/main.yml
  sed "s|qtconsole >=5.4.0,<5.5.0|qtconsole >=5.4.0|" -i requirements/main.yml
  local disabled_tests=''
  # Not working in headless env
  disabled_tests+='not test_config_dialog'
  disabled_tests+=' and not test_tab_copies_find_to_replace'
  disabled_tests+=' and not test_toggle_off_show_all_files'
  disabled_tests+=' and not test_select_all_shortcut'
  disabled_tests+=' and not test_delete_line_shortcut'
  disabled_tests+=' and not test_go_to_line_shortcut'
  disabled_tests+=' and not test_transform_to_lowercase_shortcut'
  disabled_tests+=' and not test_transform_to_uppercase_shortcut'
  disabled_tests+=' and not test_ctrl_c_dbg'
  disabled_tests+=' and not test_connection_dialog_remembers_input_with_ssh_passphrase'
  disabled_tests+=' and not test_connection_dialog_remembers_input_with_password' 
  disabled_tests+=' and not test_store_user_credentials'
  # Currently some tests failures in completion plugins, but no time to investigate
  xvfb-run --auto-servernum python runtests.py --color=yes -k "${disabled_tests}" || echo "Tests failed"
}

package() {
  cd ${pkgname}-${pkgver}
  python setup.py install --prefix=/usr --root="${pkgdir}" --optimize=1 --skip-build
  # Install license file
  install -Dm644 LICENSE.txt -t ${pkgdir}/usr/share/licenses/${pkgname}/
  # Install icon file
  install -Dm644 spyder/images/spyder.svg -t "${pkgdir}"/usr/share/icons/hicolor/scalable/apps/
  # Remove useless spyder_win_post_install script
  rm -f "${pkgdir}"/usr/bin/spyder_win_post_install.py
}
