diff --git a/poetry.lock b/poetry.lock index a520138f9..3bcdbf7e6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -456,11 +456,11 @@ category = "main" description = "Code coverage measurement for Python" name = "coverage" optional = false -python-versions = ">=3.6" -version = "6.0b1" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +version = "5.5" [package.extras] -toml = ["tomli"] +toml = ["toml"] [[package]] category = "main" @@ -961,10 +961,10 @@ description = "Flask Resources module to create REST APIs." name = "flask-resources" optional = false python-versions = "*" -version = "0.6.0" +version = "0.8.1" [package.dependencies] -Flask = ">=1.1.2,<1.2.0" +Flask = ">=1.1.4" marshmallow = ">=3.0,<4.0" speaklater = ">=1.3,<2.0" @@ -1324,7 +1324,7 @@ optional = true version = ">=1.2.5,<1.3.0" [package.dependencies.invenio-db] -extras = ["postgresql", "versioning"] +extras = ["versioning", "postgresql"] optional = true version = ">=1.0.8,<1.1.0" @@ -2009,7 +2009,7 @@ description = "Invenio-Records is a metadata storage module." name = "invenio-records" optional = false python-versions = "*" -version = "1.6.0" +version = "1.6.1" [package.dependencies] arrow = ">=0.16.0" @@ -2023,8 +2023,8 @@ jsonschema = ">=3.0.0,<5.0.0" [package.extras] admin = ["invenio-admin (>=1.2.1)"] -all = ["Sphinx (>=2.4)", "invenio-admin (>=1.2.1)", "pytest-invenio (>=1.4.1)"] -docs = ["Sphinx (>=2.4)"] +all = ["Sphinx (4.2.0)", "invenio-admin (>=1.2.1)", "pytest-invenio (>=1.4.1)"] +docs = ["Sphinx (4.2.0)"] mysql = ["invenio-db (>=1.0.9,<1.1.0)"] postgresql = ["invenio-db (>=1.0.9,<1.1.0)"] sqlite = ["invenio-db (>=1.0.9,<1.1.0)"] @@ -2058,7 +2058,7 @@ description = "Permission policies for Invenio records." name = "invenio-records-permissions" optional = false python-versions = "*" -version = "0.11.0" +version = "0.13.0" [package.dependencies] invenio-access = ">=1.4.2,<2.0.0" @@ -2068,11 +2068,11 @@ invenio-records = ">=1.4.0" [package.extras] all = ["Sphinx (>=3)", "pytest-mock (>=1.6.0)", "pytest-invenio (>=1.4.1)", "invenio-accounts (>=1.4.3)", "invenio-app (>=1.3.0)"] docs = ["Sphinx (>=3)"] -elasticsearch6 = ["invenio-search (>=1.4.0,<2.0.0)"] -elasticsearch7 = ["invenio-search (>=1.4.0,<2.0.0)"] -mysql = ["invenio-db (>=1.0.5,<2.0.0)"] -postgresql = ["invenio-db (>=1.0.5,<2.0.0)"] -sqlite = ["invenio-db (>=1.0.5,<2.0.0)"] +elasticsearch6 = ["invenio-search (>=1.4.1,<2.0.0)"] +elasticsearch7 = ["invenio-search (>=1.4.1,<2.0.0)"] +mysql = ["invenio-db (>=1.0.9,<2.0.0)"] +postgresql = ["invenio-db (>=1.0.9,<2.0.0)"] +sqlite = ["invenio-db (>=1.0.9,<2.0.0)"] tests = ["pytest-mock (>=1.6.0)", "pytest-invenio (>=1.4.1)", "invenio-accounts (>=1.4.3)", "invenio-app (>=1.3.0)", "Sphinx (>=3)"] [[package]] @@ -2081,31 +2081,33 @@ description = "Invenio Resources module to create REST APIs." name = "invenio-records-resources" optional = false python-versions = "*" -version = "0.12.5" +version = "0.17.1" [package.dependencies] -flask-resources = ">=0.6.0,<0.7.0" -invenio-accounts = ">=1.4.3" -invenio-base = ">=1.2.3" +flask-resources = ">=0.8.0,<0.9.0" +invenio-accounts = ">=1.4.7" +invenio-base = ">=1.2.4" invenio-files-rest = ">=1.2.0" -invenio-i18n = ">=1.2.0" -invenio-indexer = ">=1.2.0" -invenio-jsonschemas = ">=1.1.0" +invenio-i18n = ">=1.3.0" +invenio-indexer = ">=1.2.1" +invenio-jsonschemas = ">=1.1.3" invenio-pidstore = ">=1.2.2" -invenio-records = ">=1.5.0a2" -invenio-records-permissions = ">=0.11.0,<0.12.0" -marshmallow-utils = ">=0.3.4,<0.4.0" +invenio-records = ">=1.5.0b1" +invenio-records-permissions = ">=0.13.0,<0.14.0" +luqum = ">=0.11.0" +marshmallow-utils = ">=0.5.2,<0.6.0" uritemplate = ">=3.0.1" +wand = ">=0.6.6,<0.7.0" xmltodict = ">=0.12.0,<0.13.0" [package.extras] -all = ["Sphinx (>=2.4,<3)", "invenio-db (>=1.0.5,<2.0.0)", "invenio-db (>=1.0.5,<2.0.0)", "invenio-db (>=1.0.5,<2.0.0)", "invenio-app (>=1.3.0)", "pytest-invenio (>=1.4.1)"] +all = ["Sphinx (>=2.4,<3)", "invenio-db (>=1.0.9,<2.0.0)", "invenio-db (>=1.0.9,<2.0.0)", "invenio-db (>=1.0.9,<2.0.0)", "invenio-app (>=1.3.0)", "pytest-invenio (>=1.4.1)"] docs = ["Sphinx (>=2.4,<3)"] -elasticsearch6 = ["invenio-search (>=1.4.1,<2.0.0)"] -elasticsearch7 = ["invenio-search (>=1.4.1,<2.0.0)"] -mysql = ["invenio-db (>=1.0.5,<2.0.0)"] -postgresql = ["invenio-db (>=1.0.5,<2.0.0)"] -sqlite = ["invenio-db (>=1.0.5,<2.0.0)"] +elasticsearch6 = ["invenio-search (>=1.4.2,<2.0.0)"] +elasticsearch7 = ["invenio-search (>=1.4.2,<2.0.0)"] +mysql = ["invenio-db (>=1.0.9,<2.0.0)"] +postgresql = ["invenio-db (>=1.0.9,<2.0.0)"] +sqlite = ["invenio-db (>=1.0.9,<2.0.0)"] tests = ["invenio-app (>=1.3.0)", "pytest-invenio (>=1.4.1)"] [[package]] @@ -2238,7 +2240,7 @@ description = "Invenio standard theme." name = "invenio-theme" optional = false python-versions = "*" -version = "1.3.19" +version = "1.3.20" [package.dependencies] Flask-Breadcrumbs = ">=0.4.0" @@ -2546,6 +2548,17 @@ version = "1.6" [package.dependencies] six = ">=1.4.1" +[[package]] +category = "main" +description = "A Lucene query parser generating ElasticSearch queries and more !" +name = "luqum" +optional = false +python-versions = "*" +version = "0.11.0" + +[package.dependencies] +ply = ">=3.11" + [[package]] category = "main" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." @@ -2654,7 +2667,7 @@ description = "Extras and utilities for Marshmallow" name = "marshmallow-utils" optional = false python-versions = "*" -version = "0.3.10" +version = "0.5.5" [package.dependencies] arrow = ">=0.16.0" @@ -2671,8 +2684,8 @@ uritemplate = ">=3.0.1" werkzeug = ">=1.0.0" [package.extras] -all = ["Sphinx (>=3.0.0)", "check-manifest (>=0.42)", "coverage (>=5.2.1)", "pytest-cov (>=2.10.1)", "pytest-isort (>=1.2.0)", "pytest-pycodestyle (>=2.2.0)", "pytest-pydocstyle (>=2.2.0)", "pytest (>=6.0)"] -docs = ["Sphinx (>=3.0.0)"] +all = ["Sphinx (>=4.2.0)", "check-manifest (>=0.42)", "coverage (>=5.2.1)", "pytest-cov (>=2.10.1)", "pytest-isort (>=1.2.0)", "pytest-pycodestyle (>=2.2.0)", "pytest-pydocstyle (>=2.2.0)", "pytest (>=6.0)"] +docs = ["Sphinx (>=4.2.0)"] tests = ["check-manifest (>=0.42)", "coverage (>=5.2.1)", "pytest-cov (>=2.10.1)", "pytest-isort (>=1.2.0)", "pytest-pycodestyle (>=2.2.0)", "pytest-pydocstyle (>=2.2.0)", "pytest (>=6.0)"] [[package]] @@ -2962,6 +2975,14 @@ version = ">=0.12" [package.extras] dev = ["pre-commit", "tox"] +[[package]] +category = "main" +description = "Python Lex & Yacc" +name = "ply" +optional = false +python-versions = "*" +version = "3.11" + [[package]] category = "main" description = "A library to manipulate gettext files (po and mo files)." @@ -3474,7 +3495,7 @@ trio = ">=0.17,<1.0" trio-websocket = ">=0.9,<1.0" [package.dependencies.urllib3] -extras = ["secure", "socks"] +extras = ["socks", "secure"] version = ">=1.26,<2.0" [[package]] @@ -3483,7 +3504,7 @@ description = "Python client for Sentry (https://sentry.io)" name = "sentry-sdk" optional = false python-versions = "*" -version = "1.5.7" +version = "1.5.8" [package.dependencies] certifi = "*" @@ -3946,11 +3967,11 @@ description = "Ctypes-based simple MagickWand API binding for Python" name = "wand" optional = false python-versions = "*" -version = "0.5.9" +version = "0.6.7" [package.extras] -doc = ["Sphinx (>=1.0)"] -test = ["pytest (>=2.3.0)", "pytest-xdist (>=1.8)", "psutil (>=1.0.1)"] +doc = ["Sphinx (>=2.4.1)"] +test = ["pytest (>=5.3.5)"] [[package]] category = "main" @@ -4125,7 +4146,7 @@ docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] [metadata] -content-hash = "7e969fc8797abbafe08b54b65493c8393c3b8bfa09c9096e9f13e7d3eb5ad896" +content-hash = "5a63f090ec1799e3372bc198b657552633e0afd617981346421f03f9ad0aec71" lock-version = "1.0" python-versions = ">= 3.7, <3.10" @@ -4343,36 +4364,58 @@ counter-robots = [ {file = "counter_robots-2018.6-py2.py3-none-any.whl", hash = "sha256:b4f4c4a0ce854fd4f012934084f8d5060ef9b2008e4e90d96cc79265dc93e7a9"}, ] coverage = [ - {file = "coverage-6.0b1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:da7de6e4162c69cc03cc56b7d051ae11147ac30872ff57df4ba4cac6d70ce5d9"}, - {file = "coverage-6.0b1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:23c1611471cbfa2ac0e283862a76a333c13e5e7c4d499feb9919a5f52884610e"}, - {file = "coverage-6.0b1-cp310-cp310-win_amd64.whl", hash = "sha256:ddb2287f66500ac57b24cce60341074b148977b74cd20eca755f95262928086f"}, - {file = "coverage-6.0b1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c8099c7033fb1ca73ac2246c3e52f45dd6a9c3826c59b3b5ad94e5be4e08d99b"}, - {file = "coverage-6.0b1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdaa96733c9cf85491ad406fd78aa16025a1ea468951545b3da7ee133c150c7a"}, - {file = "coverage-6.0b1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9981294b131023e63061ba88f4498fe27b9b15d908079d1866ee66a63d6e793f"}, - {file = "coverage-6.0b1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea784c96ca3b94912176d7adc9c4bb7d1988f36a0223a9ac128f4c834775202c"}, - {file = "coverage-6.0b1-cp36-cp36m-win32.whl", hash = "sha256:7beec4df7542cf681356ef243fee3bf948775fc0d125bdcad3508e834229e07d"}, - {file = "coverage-6.0b1-cp36-cp36m-win_amd64.whl", hash = "sha256:84a1000f622d1df8824cd1ac629aa8392679c5c4de3f0de9e6889373f99ff3a0"}, - {file = "coverage-6.0b1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c1630e847ae0a2a366f18ddc3e017b69f80d729e95830579c61b5f9e9b94b91e"}, - {file = "coverage-6.0b1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a585ba4087cc1fb5bfe34d1ecaaee183b854427992be2b42f1722ba8289fa82"}, - {file = "coverage-6.0b1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:16db4173575901db8f3e6cc05e50fe19c7849b0256f6dc2e0979485184053417"}, - {file = "coverage-6.0b1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a8826f6ecf079cb648534790ba59218a64e12a59bf2cd9ff00199abb39864a79"}, - {file = "coverage-6.0b1-cp37-cp37m-win32.whl", hash = "sha256:40e30139113b141c238620b700aa5bd5c1b3a7b29ae47398936ff1c9166109d9"}, - {file = "coverage-6.0b1-cp37-cp37m-win_amd64.whl", hash = "sha256:95d2293d6a60da8952c675050231c02c9f4f1c1b9cf916315173e921d137d683"}, - {file = "coverage-6.0b1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:22888d3ce1b6fa1125f0be1602d8c634e00e7ec3a87bdb594ad87bde0b00b2b6"}, - {file = "coverage-6.0b1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6fbe69d52628b3e8a144265fd134f5da07cf287a00cf529730ae10380d315b2"}, - {file = "coverage-6.0b1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f0b250a03891255feb3ae69ac29d05cf9a62f5869bb8bac0e7f4968e7274efac"}, - {file = "coverage-6.0b1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:951e8d7bc98bceb61fc4fb426966fae854160301c0f8cd0945c62f2504f68615"}, - {file = "coverage-6.0b1-cp38-cp38-win32.whl", hash = "sha256:e6a4260f0abf90c023b4f838905f645695b31666b76837152e2befad3d1ef5d6"}, - {file = "coverage-6.0b1-cp38-cp38-win_amd64.whl", hash = "sha256:ceb872b89c6461d4365be5f8fbf14f867be6b5217760980de7e014e54648f8ef"}, - {file = "coverage-6.0b1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2dcc6d62b69a82759e5dddd788e09dd329124e493e62d92cfd01c0b918d7e511"}, - {file = "coverage-6.0b1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e97b387f2744762b9984639b59abd7abb46ea6ae2ea24cb7c07893612328559b"}, - {file = "coverage-6.0b1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4528368196a90f11b70fb5668c13d92e88ba795eb4d37aab5855fd0479db417b"}, - {file = "coverage-6.0b1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:18183948d5480e2ae30ad67edddf748149c778592b7e4ee649c058d5de2dcbb1"}, - {file = "coverage-6.0b1-cp39-cp39-win32.whl", hash = "sha256:91cd79f0f2996a4de737de89fdcbcd379a5bfd7b15129378ad1e5fc234e58d33"}, - {file = "coverage-6.0b1-cp39-cp39-win_amd64.whl", hash = "sha256:4cbdc51fc8c00ec6e53b30221d5757034aecf9839761bf97eaec0db7f0ff4955"}, - {file = "coverage-6.0b1-pp36-none-any.whl", hash = "sha256:8394626a07e0a1b3695a16a4548d32e7259e00817d4bab1ef8172a1bd82a724e"}, - {file = "coverage-6.0b1-pp37-none-any.whl", hash = "sha256:79c136327e90ee46a2b3094263df94da5212890d6145678741eb805d79714971"}, - {file = "coverage-6.0b1.tar.gz", hash = "sha256:c6f46d5bbec8fe1ff25215356e819528a90d84b2801703514746b665742f1cd2"}, + {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, + {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, + {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"}, + {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"}, + {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"}, + {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"}, + {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"}, + {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"}, + {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"}, + {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"}, + {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"}, + {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"}, + {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"}, + {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"}, + {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"}, + {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"}, + {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"}, + {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"}, + {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"}, + {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"}, + {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"}, + {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"}, + {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"}, + {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"}, + {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"}, + {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"}, + {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"}, + {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"}, + {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"}, + {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"}, + {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"}, + {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"}, + {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"}, + {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"}, + {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"}, + {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"}, + {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"}, + {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"}, + {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"}, + {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"}, + {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"}, + {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"}, + {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"}, + {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"}, + {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"}, + {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"}, + {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, + {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, ] cryptography = [ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6"}, @@ -4525,8 +4568,8 @@ flask-principal = [ {file = "Flask-Principal-0.4.0.tar.gz", hash = "sha256:f5d6134b5caebfdbb86f32d56d18ee44b080876a27269560a96ea35f75c99453"}, ] flask-resources = [ - {file = "flask-resources-0.6.0.tar.gz", hash = "sha256:ca29486e492b6638c6bb916b0bae00ae590f5e0db9030f90f020d55c7a87c43a"}, - {file = "flask_resources-0.6.0-py2.py3-none-any.whl", hash = "sha256:64f6b5c20f96075c1f6a965d0f7a1eda1961abbd854a2f78f30c73702aa801f0"}, + {file = "flask-resources-0.8.1.tar.gz", hash = "sha256:78a8c59a1ec7ee5ed62964349032a67d5935c6b1dc8c7394f1afcba634a524f5"}, + {file = "flask_resources-0.8.1-py2.py3-none-any.whl", hash = "sha256:50a2128ec3cc9aadad707edb55c8bb2ad218233a4bf3d4287635d90891a9fda1"}, ] flask-restful = [ {file = "Flask-RESTful-0.3.9.tar.gz", hash = "sha256:ccec650b835d48192138c85329ae03735e6ced58e9b2d9c2146d6c84c06fa53e"}, @@ -4716,20 +4759,20 @@ invenio-queues = [ {file = "invenio_queues-1.0.0a3-py2.py3-none-any.whl", hash = "sha256:15cf3ea8487a387c07c6cce7f955aa9d64570884f2a6907dbabe8660d186e9e4"}, ] invenio-records = [ - {file = "invenio-records-1.6.0.tar.gz", hash = "sha256:a56e2d2268289c7d78b47ee51d8981ed168e03a339c19ac6c017e37da3e7d871"}, - {file = "invenio_records-1.6.0-py2.py3-none-any.whl", hash = "sha256:c66f45ee92dd6be64ea222c2fef99bf78f4e2e1d683a7ebe694c83641d8b5758"}, + {file = "invenio-records-1.6.1.tar.gz", hash = "sha256:8eb0f0343ecb8c6f968e9b66162046131eef34739a33f26b2c16b84f2e987353"}, + {file = "invenio_records-1.6.1-py2.py3-none-any.whl", hash = "sha256:0dafee31de372969be1f56ed672a535b5cd5d0fdf17c8f1a0b37cc0eab79819e"}, ] invenio-records-files = [ {file = "invenio-records-files-1.2.1.tar.gz", hash = "sha256:a08da459517f6354cb99bb0005f32fab3894f2852fe3a1a602bda3b6dcad4082"}, {file = "invenio_records_files-1.2.1-py2.py3-none-any.whl", hash = "sha256:46155d8a21b7b9ef7ba0665b824c35c86b44e06b940953990473c252a8d9e18b"}, ] invenio-records-permissions = [ - {file = "invenio-records-permissions-0.11.0.tar.gz", hash = "sha256:f8e4fb95aabadc39e07c9247ee33661a194d57e281478bf670be392128f603a7"}, - {file = "invenio_records_permissions-0.11.0-py2.py3-none-any.whl", hash = "sha256:0e069f303b8afbbaa96f347fcd2e83989d8678896abcae779ca1f70948b12b8c"}, + {file = "invenio-records-permissions-0.13.0.tar.gz", hash = "sha256:f061be7633f80fac626a5da1f8116b01dfff5146105e7faf12fda9f8241e84bd"}, + {file = "invenio_records_permissions-0.13.0-py2.py3-none-any.whl", hash = "sha256:381a37b4c6d7f9900fbdc59f81370b0b566a91c5bcf8bacf763abe088c353437"}, ] invenio-records-resources = [ - {file = "invenio-records-resources-0.12.5.tar.gz", hash = "sha256:5932c9cbb8c4ba94ae50dd40e1c0c34b7df3da19801fcd9a85fa023a8522251f"}, - {file = "invenio_records_resources-0.12.5-py2.py3-none-any.whl", hash = "sha256:d597941a0f55f3ef89139a96d6a114c5846a8dcb667eceb82d45579a6edcfa98"}, + {file = "invenio-records-resources-0.17.1.tar.gz", hash = "sha256:4872fdf2df271947a9abab4b75b6ab16a0b073840351b4c37bbd1f4c3a0c405c"}, + {file = "invenio_records_resources-0.17.1-py2.py3-none-any.whl", hash = "sha256:fd63267ffefbff6fa79dae80bb97813509fd1334a5e793457b1af48268cde5ca"}, ] invenio-records-rest = [ {file = "invenio-records-rest-1.8.0.tar.gz", hash = "sha256:70ba741f19f8c9a1ae14a700d82c632175e881fd786ffdc4692f2718482e8dd1"}, @@ -4752,8 +4795,8 @@ invenio-stats = [ {file = "invenio_stats-1.0.0a18-py2.py3-none-any.whl", hash = "sha256:91a377a1e5db8a43ebf52c15868550f336682beb16337f8052acfccb74a78f10"}, ] invenio-theme = [ - {file = "invenio-theme-1.3.19.tar.gz", hash = "sha256:1cbdef2b5ba15a0ff4e0c6bd688b4d0a7d139b4e390907dfe87a9e9fef47786f"}, - {file = "invenio_theme-1.3.19-py2.py3-none-any.whl", hash = "sha256:7fa999ca7252438d6b652253c54a5917c2c4092176aa96aebd837813490ef372"}, + {file = "invenio-theme-1.3.20.tar.gz", hash = "sha256:b3895108905b2ded88fb07c4b5b8ceb690cb3b33428f192b8d1ee38e4101f82d"}, + {file = "invenio_theme-1.3.20-py2.py3-none-any.whl", hash = "sha256:a5a0b09f48b11a224022aa84b1dc8a66a936320bb68d8461512f2e09237ef15d"}, ] invenio-userprofiles = [ {file = "invenio-userprofiles-1.2.4.tar.gz", hash = "sha256:09817499c49a8437b55f2fa7e7d0107dd9c380571c0183e1747b79e6f9519d8d"}, @@ -4826,6 +4869,10 @@ limits = [ {file = "limits-1.6-py3-none-any.whl", hash = "sha256:12ae4449cf7daadee43edf4096acd9cb9f4bfdec3a995aa9fbd0f72b0b9af762"}, {file = "limits-1.6.tar.gz", hash = "sha256:6c0a57b42647f1141f5a7a0a8479b49e4367c24937a01bd9d4063a595c2dd48a"}, ] +luqum = [ + {file = "luqum-0.11.0-py3-none-any.whl", hash = "sha256:f7518558bcfd219771083fcca9c2c877c3ff621beb2f5197d569e14ec2c6fe6f"}, + {file = "luqum-0.11.0.linux-x86_64.tar.gz", hash = "sha256:2910a6d1eaba62a7fbaf3ea867b0da9b0d80739f87eb804906dc6bc4cbf6647f"}, +] lxml = [ {file = "lxml-4.7.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:fd2d46aa9f379553ff30fd915f039c0296837e99b91e75e77f36a0819331a724"}, {file = "lxml-4.7.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b584fa08ff85e441c70ea8310e274eda0b6fb522a86679d07839737629c0b891"}, @@ -4980,8 +5027,8 @@ marshmallow-oneofschema = [ {file = "marshmallow_oneofschema-3.0.1-py2.py3-none-any.whl", hash = "sha256:bd29410a9f2f7457a2b428286e2a80ef76b8ddc3701527dc1f935a88914b02f2"}, ] marshmallow-utils = [ - {file = "marshmallow-utils-0.3.10.tar.gz", hash = "sha256:2f32e4b12f0a74fb3dcb24b11f464bb70ba24d4a10d95d606206771629b79274"}, - {file = "marshmallow_utils-0.3.10-py2.py3-none-any.whl", hash = "sha256:50c74cd89f2d2a977b7c122009c35de2fef65db733cdaf3720340e6d61861710"}, + {file = "marshmallow-utils-0.5.5.tar.gz", hash = "sha256:3c24569fd3cd9cb7d89400bef09d2ec3c4012067f07b4bdda4129b07a3c4add0"}, + {file = "marshmallow_utils-0.5.5-py2.py3-none-any.whl", hash = "sha256:7d3aa62463882e4e8dc19ad8a68dc450f3f90405073bb75bf87b6f03be48504f"}, ] matplotlib-inline = [ {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, @@ -5136,6 +5183,10 @@ pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, ] +ply = [ + {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, + {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, +] polib = [ {file = "polib-1.1.1-py2.py3-none-any.whl", hash = "sha256:d3ee85e0c6788f789353416b1612c6c92d75fe6ccfac0029711974d6abd0f86d"}, {file = "polib-1.1.1.tar.gz", hash = "sha256:e02c355ae5e054912e3b0d16febc56510eff7e49d60bf22aecb463bd2f2a2dfa"}, @@ -5449,8 +5500,8 @@ selenium = [ {file = "selenium-4.1.3-py3-none-any.whl", hash = "sha256:14d28a628c831c105d38305c881c9c7847199bfd728ec84240c5e86fa1c9bd5a"}, ] sentry-sdk = [ - {file = "sentry-sdk-1.5.7.tar.gz", hash = "sha256:aa52da941c56b5a76fd838f8e9e92a850bf893a9eb1e33ffce6c21431d07ee30"}, - {file = "sentry_sdk-1.5.7-py2.py3-none-any.whl", hash = "sha256:411a8495bd18cf13038e5749e4710beb4efa53da6351f67b4c2f307c2d9b6d49"}, + {file = "sentry-sdk-1.5.8.tar.gz", hash = "sha256:38fd16a92b5ef94203db3ece10e03bdaa291481dd7e00e77a148aa0302267d47"}, + {file = "sentry_sdk-1.5.8-py2.py3-none-any.whl", hash = "sha256:32af1a57954576709242beb8c373b3dbde346ac6bd616921def29d68846fb8c3"}, ] sickle = [ {file = "Sickle-0.7.0-py3-none-any.whl", hash = "sha256:6ace7b1d1fc76571fe0dbfefc2c49e5e6c026e2d0dcaae521f4da21e98d4bc85"}, @@ -5694,8 +5745,8 @@ vine = [ {file = "vine-5.0.0.tar.gz", hash = "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e"}, ] wand = [ - {file = "Wand-0.5.9-py2.py3-none-any.whl", hash = "sha256:598e13e46779e48fcecba7b37fd9d61fcdd1e70007ccba5d5b2e731186a2ec2e"}, - {file = "Wand-0.5.9.tar.gz", hash = "sha256:6eaca78e53fbe329b163f0f0b28f104de98edbd69a847268cc5d6a6e392b9b28"}, + {file = "Wand-0.6.7-py2.py3-none-any.whl", hash = "sha256:5ba497e90741a05ebce4603b04ee843150c566482a753554da54dc57d8503bba"}, + {file = "Wand-0.6.7.tar.gz", hash = "sha256:ebc01bccc25dba68414ab55b482341f9ad2b197d7f49d5e724f339bbf63fb6db"}, ] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, diff --git a/pyproject.toml b/pyproject.toml index 0fd04692a..eb8895931 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,10 +18,10 @@ invenio-oaiserver = "^1.4.1" invenio-pidstore = ">=1.2.1,<1.3.0" invenio-records-rest = ">=1.8.0,<1.9.0" invenio-records-ui= ">=1.2.0,<1.3.0" -invenio-records = "<=1.6.0" -invenio-stats = "^1.0.0-alpha.18" -# TODO: update invenio-records-resources -invenio-records-resources = "==0.12.5" +invenio-records = "<=1.7.0" +invenio-stats = "^1.0.0a18" +invenio-records-resources = "*" +invenio-previewer = ">=1.3.5" invenio = {version = ">=3.4.0,<3.5.0", extras = ["base", "files", "postgresql", "auth", "elasticsearch7", "docs", "tests"]} uwsgi = ">=2.0" @@ -36,7 +36,7 @@ pycountry = "*" flask-wiki = {git = "https://github.com/rero/flask-wiki.git"} markdown-captions = "*" bleach = ">3.11" -wand = ">=0.5.0,<0.6.0" +wand = ">=0.6.6,<0.7.0" python-dotenv = "*" flask-cors = ">3.0.8" cryptography = ">=3.2" @@ -49,19 +49,16 @@ python-Levenshtein = ">=0.12.0" polib = ">=1.1.0" idutils = ">=1.1.8" urllib3 = ">=1.26.4" -coverage = {version = ">=6.0b1", allow-prereleases = true} pillow = ">=9.0.0" celery = ">=5.0.0" -jedi = "<0.18.0" wtforms = "<3.0.0" flask-wtf = "<1.0.0" zipp = "*" pycparser = "*" -invenio-previewer = ">=1.3.5" -markupsafe = "<2.1.0" -# TODO: normaly not needed with invenio-records[postgresql] -sqlalchemy-continuum = "<2.0.0" +sqlalchemy_continuum = "<2.0.0" psycopg2-binary = "<3.0.0" +MarkupSafe = "<2.1.0" +jedi = "<0.18.0" [tool.poetry.dev-dependencies] Flask-Debugtoolbar = ">=0.10.1" diff --git a/sonar/dedicated/hepvs/projects/resource.py b/sonar/dedicated/hepvs/projects/resource.py index 9b3f0899d..1f9238c3a 100644 --- a/sonar/dedicated/hepvs/projects/resource.py +++ b/sonar/dedicated/hepvs/projects/resource.py @@ -17,36 +17,39 @@ """HEP Valais Projects resource.""" +from flask_resources import ResponseHandler from flask_resources.serializers import JSONSerializer from invenio_records_resources.resources import \ RecordResourceConfig as BaseRecordResourceConfig -from invenio_records_resources.resources.records.response import RecordResponse +from invenio_records_resources.resources.records.headers import etag_headers from sonar.dedicated.hepvs.projects.serializers.csv import CSVSerializer from sonar.resources.projects.resource import \ RecordResourceConfig as BaseRecordResourceConfig -from sonar.resources.resources.responses import StreamResponse +from sonar.resources.resources.responses import StreamResponseHandler class RecordResourceConfig(BaseRecordResourceConfig): """HEP Valais Projects resource configuration.""" response_handlers = { - 'application/json': - RecordResponse(JSONSerializer()), - 'text/csv': - StreamResponse(CSVSerializer(csv_included_fields=[ - 'pid', 'name', 'approvalDate', 'projectSponsor', 'statusHep', - 'mainTeam', 'innerSearcher', 'secondaryTeam', 'externalPartners', - 'status', 'startDate', 'endDate', 'description', 'keywords', - 'realizationFramework', 'funding_funder_type', - 'funding_funder_name', 'funding_funder_number', - 'funding_fundingReceived', 'actorsInvolved', 'benefits', - 'impactOnFormation', 'impactOnProfessionalEnvironment', - 'impactOnPublicAction', 'promoteInnovation', - 'relatedToMandate_mandate', 'relatedToMandate_name', - 'relatedToMandate_briefDescription', 'educationalDocument', - 'searchResultsValorised' - ]), - filename='projects.csv') + 'application/json': ResponseHandler( + JSONSerializer(), + headers=etag_headers), + 'text/csv': StreamResponseHandler( + CSVSerializer(csv_included_fields=[ + 'pid', 'name', 'approvalDate', 'projectSponsor', 'statusHep', + 'mainTeam', 'innerSearcher', 'secondaryTeam', + 'externalPartners', 'status', 'startDate', 'endDate', + 'description', 'keywords', 'realizationFramework', + 'funding_funder_type', 'funding_funder_name', + 'funding_funder_number', 'funding_fundingReceived', + 'actorsInvolved', 'benefits', 'impactOnFormation', + 'impactOnProfessionalEnvironment', 'impactOnPublicAction', + 'promoteInnovation', 'relatedToMandate_mandate', + 'relatedToMandate_name', 'relatedToMandate_briefDescription', + 'educationalDocument', 'searchResultsValorised' + ]), + filename='projects.csv', + headers=etag_headers) } diff --git a/sonar/ext.py b/sonar/ext.py index 0d069f2a0..618705abd 100644 --- a/sonar/ext.py +++ b/sonar/ext.py @@ -39,10 +39,10 @@ from sonar.modules.users.signals import add_full_name, user_registered_handler from sonar.modules.utils import get_language_value, get_specific_theme, \ get_switch_aai_providers, get_view_code -from sonar.resources.projects.resource import \ - RecordResource as ProjectRecordResource -from sonar.resources.projects.service import \ - RecordService as ProjectRecordService +from sonar.resources.projects.resource import ProjectsRecordResource, \ + ProjectsRecordResourceConfig +from sonar.resources.projects.service import ProjectsRecordService, \ + ProjectsRecordServiceConfig from . import config_sonar from .route_converters import OrganisationCodeConverter @@ -117,6 +117,8 @@ def init_views(self, app): @app.route('/', defaults={ 'view': app.config.get('SONAR_APP_DEFAULT_ORGANISATION')}) + + @app.route('//') def index(view): """Homepage.""" @@ -201,8 +203,10 @@ def favicon(org): def create_resources(self): """Create resources.""" # Initialize the project resource with the corresponding service. - projects_resource = ProjectRecordResource( - service=ProjectRecordService()) + project_service = ProjectsRecordService(ProjectsRecordServiceConfig()) + projects_resource = ProjectsRecordResource( + service=project_service, + config=ProjectsRecordResourceConfig) self.resources['projects'] = projects_resource def get_endpoints(self): @@ -238,7 +242,7 @@ def register_blueprints(self, app): """Register the blueprints.""" # Register REST endpoint for projects resource. app.register_blueprint( - self.resources['projects'].as_blueprint('projects')) + self.resources['projects'].as_blueprint()) @app.before_request def set_accept_mimetype(): @@ -248,5 +252,5 @@ def set_accept_mimetype(): in flask_resources: https://github.com/inveniosoftware/flask-resources/blob/master/flask_resources/content_negotiation.py#L105 """ if request.args.get('format'): - request.accept_mimetypes = MIMEAccept([(request.args['format'], - 1)]) + request.accept_mimetypes = MIMEAccept([ + (request.args['format'],1)]) diff --git a/sonar/modules/documents/receivers.py b/sonar/modules/documents/receivers.py index ebc4e0efd..ff7347a4f 100644 --- a/sonar/modules/documents/receivers.py +++ b/sonar/modules/documents/receivers.py @@ -23,6 +23,7 @@ from os import makedirs from os.path import exists, join +import click import pytz from flask import current_app @@ -57,7 +58,8 @@ def transform_harvested_records(sender=None, records=None, **kwargs): max_records = None if kwargs.get('name'): - print('Harvesting records from "{set}"'.format(set=kwargs.get('name'))) + click.echo( + 'Harvesting records from "{set}"'.format(set=kwargs.get('name'))) harvested_records = list(records) @@ -80,7 +82,7 @@ def transform_harvested_records(sender=None, records=None, **kwargs): for chunk in list(chunks(records, CHUNK_SIZE)): import_records.delay(chunk) - print('{count} records harvested in {time} seconds'.format( + click.echo('{count} records harvested in {time} seconds'.format( count=len(records), time=time.time() - start_time)) @@ -175,7 +177,7 @@ def export_json(sender=None, records=None, **kwargs): records_to_export = [] - print('{count} records harvested'.format(count=len(records))) + click.echo('{count} records harvested'.format(count=len(records))) for record in records: loader_schema = LoaderSchemaFactory.create(kwargs['name']) @@ -192,4 +194,4 @@ def export_json(sender=None, records=None, **kwargs): client = HegClient() client.upload_file(file_name, file_path) - print('{count} records exported'.format(count=len(records_to_export))) + click.echo('{count} records exported'.format(count=len(records_to_export))) diff --git a/sonar/modules/pdf_extractor/pdf_extractor.py b/sonar/modules/pdf_extractor/pdf_extractor.py index 48923b1d0..26daf449d 100644 --- a/sonar/modules/pdf_extractor/pdf_extractor.py +++ b/sonar/modules/pdf_extractor/pdf_extractor.py @@ -52,7 +52,7 @@ def api_is_alive(self): """ try: response, status = self.do_request('isalive', 'get') - except Exception: + except Exception as err: return False if status != 200: diff --git a/sonar/resources/projects/resource.py b/sonar/resources/projects/resource.py index ab837f4cc..7e7d9eed1 100644 --- a/sonar/resources/projects/resource.py +++ b/sonar/resources/projects/resource.py @@ -17,35 +17,51 @@ """Projects resource.""" +from flask_resources import ResponseHandler from flask_resources.serializers import JSONSerializer -from invenio_records_resources.resources import \ - RecordResourceConfig as BaseRecordResourceConfig -from invenio_records_resources.resources.records.response import RecordResponse +from invenio_records_resources.resources import RecordResourceConfig +from invenio_records_resources.resources.records.headers import etag_headers from sonar.resources.projects.serializers.csv import CSVSerializer -from sonar.resources.resource import RecordResource as BaseRecordResource -from sonar.resources.resources.responses import StreamResponse +from sonar.resources.resource import RecordResource +from sonar.resources.resources.responses import StreamResponseHandler -class RecordResourceConfig(BaseRecordResourceConfig): +class ProjectsRecordResourceConfig(RecordResourceConfig): """Projects resource configuration.""" - resource_name = 'projects' - list_route = '/projects/' - item_route = f'{list_route}/' + blueprint_name = 'projects' + url_prefix = "/projects" response_handlers = { - 'application/json': - RecordResponse(JSONSerializer()), - 'text/csv': - StreamResponse(CSVSerializer(csv_included_fields=[ - 'pid', 'name', 'description', 'startDate', 'endDate' - ]), - filename='projects.csv') + 'application/json': ResponseHandler( + JSONSerializer(), + headers=etag_headers), + 'text/csv': StreamResponseHandler( + CSVSerializer(csv_included_fields=[ + 'pid', 'name', 'description', 'startDate', 'endDate' + ]), + filename='projects.csv', + headers=etag_headers) } + # # Request parsing + # request_read_args = {} + # request_view_args = {"pid_value": ma.fields.Str()} + # request_search_args = SearchRequestArgsSchema + # request_headers = {"if_match": ma.fields.Int()} + # request_body_parsers = { + # "application/json": RequestBodyParser(JSONDeserializer()) + # } + # default_content_type = "application/json" + + # # Response handling + # response_handlers = { + # "application/json": ResponseHandler( + # JSONSerializer(), headers=etag_headers) + # } + # default_accept_mimetype = "application/json" -class RecordResource(BaseRecordResource): - """Projects resource".""" - default_config = RecordResourceConfig +class ProjectsRecordResource(RecordResource): + """Projects resource".""" diff --git a/sonar/resources/projects/service.py b/sonar/resources/projects/service.py index e6f12a27e..a4341d483 100644 --- a/sonar/resources/projects/service.py +++ b/sonar/resources/projects/service.py @@ -17,31 +17,47 @@ """Projects service.""" +from invenio_records_resources.services import \ + SearchOptions as BaseSearchOptions +from invenio_records_resources.services.records.facets import TermsFacet +from invenio_records_resources.services.records.params import FacetsParam, \ + PaginationParam, QueryStrParam, SortParam from invenio_records_resources.services.records.schema import \ - MarshmallowServiceSchema + ServiceSchemaWrapper from invenio_records_rest.utils import obj_or_import_string -from sonar.config import DEFAULT_AGGREGATION_SIZE from sonar.modules.organisations.api import current_organisation -from sonar.modules.query import and_term_filter from sonar.modules.utils import has_custom_resource -from ..service import RecordService as BaseRecordService -from ..service import RecordServiceConfig as BaseRecordServiceConfig +from ..service import RecordService, RecordServiceConfig from .api import Record, RecordComponent from .permissions import RecordPermissionPolicy from .results import RecordList -class RecordServiceConfig(BaseRecordServiceConfig): - """Projects service configuration.""" +class PreFacetsParam(FacetsParam): + """.""" - permission_policy_cls = RecordPermissionPolicy - record_cls = Record - result_list_cls = RecordList - search_sort_default = 'relevance' - search_sort_default_no_query = 'newest' - search_sort_options = { + def filter(self, search): + """Apply a pre filter on the search.""" + if not self._filters: + return search + + filters = list(self._filters.values()) + + post_filter = filters[0] + for f in filters[1:]: + post_filter |= f + + return search.filter(post_filter) + + +class SearchOptions(BaseSearchOptions): + """Search options.""" + + sort_default = 'relevance' + sort_default_no_query = 'newest' + sort_options = { 'relevance': { 'fields': ['_score'], }, @@ -55,40 +71,44 @@ class RecordServiceConfig(BaseRecordServiceConfig): 'fields': ['metadata.startDate'] } } - search_facets_options = { - 'aggs': { - 'user': { - 'terms': { - 'field': 'metadata.user.pid', - 'size': DEFAULT_AGGREGATION_SIZE - } - }, - 'organisation': { - 'terms': { - 'field': 'metadata.organisation.pid', - 'size': DEFAULT_AGGREGATION_SIZE - } - }, - 'status': { - 'terms': { - 'field': 'metadata.validation.status', - 'size': DEFAULT_AGGREGATION_SIZE - } - }, - }, - 'filters': { - 'user': and_term_filter('metadata.user.pid'), - 'organisation': and_term_filter('metadata.organisation.pid'), - 'status': and_term_filter('metadata.validation.status'), - } + + pagination_options = { + "default_results_per_page": 10, + "default_max_results": 10000 } - components = BaseRecordServiceConfig.components + [RecordComponent] + + params_interpreters_cls = [ + QueryStrParam, + PaginationParam, + SortParam, + PreFacetsParam + ] + + facets = { + 'user': TermsFacet(field='metadata.user.pid'), + 'organisation': TermsFacet(field='metadata.organisation.pid'), + 'status': TermsFacet(field='metadata.validation.status') + } + + + + +class ProjectsRecordServiceConfig(RecordServiceConfig): + """Projects service configuration.""" + + permission_policy_cls = RecordPermissionPolicy + record_cls = Record + result_list_cls = RecordList + + search = SearchOptions + + components = RecordServiceConfig.components + [RecordComponent] -class RecordService(BaseRecordService): +class ProjectsRecordService(RecordService): """Projects service.""" - default_config = RecordServiceConfig + default_config = ProjectsRecordServiceConfig @property def schema(self): @@ -101,4 +121,4 @@ def schema(self): schema = obj_or_import_string(schema_path) - return MarshmallowServiceSchema(self, schema=schema) + return ServiceSchemaWrapper(self, schema=schema) diff --git a/sonar/resources/resource.py b/sonar/resources/resource.py index 5d50835c7..16eb05ce9 100644 --- a/sonar/resources/resource.py +++ b/sonar/resources/resource.py @@ -19,40 +19,31 @@ from invenio_records_resources.resources import \ RecordResource as BaseRecordResource -from invenio_records_rest.utils import obj_or_import_string -from sonar.modules.organisations.api import current_organisation -from sonar.modules.utils import has_custom_resource +# from invenio_records_rest.utils import obj_or_import_string + +# from sonar.modules.organisations.api import current_organisation +# from sonar.modules.utils import has_custom_resource class RecordResource(BaseRecordResource): """Base record resource.""" - def __init__(self, service=None): - """Constructor. - - Needed to override parent constructor because `config` must not be set - as it is calculated when calling the property. - - :param service: Record service. - """ - self.bp_name = None - self.service = service + # @property + # def config(self): + # """Get the configuration depending on the orgnanisation. - @property - def config(self): - """Get the configuration depending on the orgnanisation. + # :returns: Default configuration or the dedicated configuration. + # """ + # if not hasattr(self.default_config, 'resource_name'): + # return self.default_config - :returns: Default configuration or the dedicated configuration. - """ - if not hasattr(self.default_config, 'resource_name'): - return self.default_config + # if not has_custom_resource(self.default_config.resource_name): + # return self.default_config - if not has_custom_resource(self.default_config.resource_name): - return self.default_config + # resource_name = self.default_config.resource_name + # resource_config = (f'sonar.dedicated.{current_organisation["code"]}.' + # f'{resource_name}.resource:RecordResourceConfig') - resource_name = self.default_config.resource_name - resource_config = (f'sonar.dedicated.{current_organisation["code"]}.' - f'{resource_name}.resource:RecordResourceConfig') + # return obj_or_import_string(resource_config) - return obj_or_import_string(resource_config) diff --git a/sonar/resources/resources/responses.py b/sonar/resources/resources/responses.py index 814c22d6c..f865278a6 100644 --- a/sonar/resources/resources/responses.py +++ b/sonar/resources/resources/responses.py @@ -17,24 +17,24 @@ """SONAR resources responses.""" -from flask import Response, make_response -from flask_resources.responses import Response as ResourceResponse +from flask import Response +from flask_resources.responses import ResponseHandler -class StreamResponse(ResourceResponse): +class StreamResponseHandler(ResponseHandler): """Stream response.""" filename = None - def __init__(self, serializer=None, **kwargs): + def __init__(self, serializer, filename='records', headers=None): """Stream response initialization. - Sets the filename for attachment if present in kwargs. - + :param filename: File name. :param serializer: Record serializer. """ - self.filename = kwargs.pop('filename', 'records') - super().__init__(serializer) + self.filename = filename + super().__init__(serializer=serializer, headers=headers) + def make_list_response(self, content, code=200): """Builds a response for a list of objects. @@ -43,7 +43,7 @@ def make_list_response(self, content, code=200): :param code: Status code. :returns: Response object. """ - response = make_response( + response = super().make_response( "" if content is None else Response( self.serializer.serialize_object_list(content)), code, diff --git a/sonar/resources/service.py b/sonar/resources/service.py index c1e352bf1..db582b4de 100644 --- a/sonar/resources/service.py +++ b/sonar/resources/service.py @@ -24,20 +24,15 @@ from invenio_records_resources.services.records import \ RecordService as BaseRecordService -from .params import FilterParams - class RecordServiceConfig(BaseRecordServiceConfig): """Service factory configuration.""" - search_params_interpreters_cls = \ - [FilterParams] + BaseRecordServiceConfig.search_params_interpreters_cls - class RecordService(BaseRecordService): """SONAR resources base service class.""" - def create(self, identity, data, links_config=None): + def create(self, identity, data): """Create a record. :param identity: Identity of user creating the record. @@ -48,7 +43,7 @@ def create(self, identity, data, links_config=None): identity.provides.add(UserNeed(1)) identity.provides.add(Need(method='system_role', value='any_user')) - return super().create(identity, data, links_config) + return super().create(identity, data) def bulk_reindex(self): """Send all records to the index queue and process indexing.""" diff --git a/tests/api/projects/test_projects_filters.py b/tests/api/projects/test_projects_filters.py index b65c1c615..f29cae289 100644 --- a/tests/api/projects/test_projects_filters.py +++ b/tests/api/projects/test_projects_filters.py @@ -28,20 +28,20 @@ def test_filters(client, superuser, project, make_project): login_user_via_session(client, email=superuser['email']) # Without filter - res = client.get(url_for('projects.projects_list')) + res = client.get(url_for('projects.search')) assert res.status_code == 200 assert res.json['hits']['total'] == 2 assert len(res.json['aggregations']['user']['buckets']) == 2 # Existing user filter res = client.get( - url_for('projects.projects_list', user='orgadmin')) + url_for('projects.search', user='orgadmin')) assert res.status_code == 200 assert res.json['hits']['total'] == 1 assert len(res.json['aggregations']['user']['buckets']) == 1 # Non existing organisation filter - res = client.get(url_for('projects.projects_list', user='unknown')) + res = client.get(url_for('projects.search', user='unknown')) assert res.status_code == 200 assert res.json['hits']['total'] == 0 assert not res.json['aggregations']['user']['buckets'] diff --git a/tests/api/projects/test_projects_permissions.py b/tests/api/projects/test_projects_permissions.py index 9f0e4fa71..16fa95836 100644 --- a/tests/api/projects/test_projects_permissions.py +++ b/tests/api/projects/test_projects_permissions.py @@ -36,17 +36,17 @@ def test_list(app, client, make_project, superuser, admin, moderator, time.sleep(1) # Not logged - res = client.get(url_for('projects.projects_list')) + res = client.get(url_for('projects.search')) assert res.status_code == 403 # Logged as user login_user_via_session(client, email=user['email']) - res = client.get(url_for('projects.projects_list')) + res = client.get(url_for('projects.search')) assert res.status_code == 403 # Logged as superuser login_user_via_session(client, email=superuser['email']) - res = client.get(url_for('projects.projects_list')) + res = client.get(url_for('projects.search')) assert res.status_code == 200 assert res.json['hits']['total'] == 3 assert 'organisation' in res.json['aggregations'] @@ -54,7 +54,7 @@ def test_list(app, client, make_project, superuser, admin, moderator, # Logged as submitter login_user_via_session(client, email=submitter['email']) - res = client.get(url_for('projects.projects_list')) + res = client.get(url_for('projects.search')) assert res.status_code == 200 assert res.json['hits']['total'] == 1 assert 'organisation' not in res.json['aggregations'] @@ -62,13 +62,13 @@ def test_list(app, client, make_project, superuser, admin, moderator, # Query string res = client.get( - url_for('projects.projects_list', q='metadata.name.suggest:Proj')) + url_for('projects.search', q='metadata.name.suggest:Proj')) assert res.status_code == 200 assert res.json['hits']['total'] == 2 # Logged as moderator login_user_via_session(client, email=moderator['email']) - res = client.get(url_for('projects.projects_list')) + res = client.get(url_for('projects.search')) assert res.status_code == 200 assert res.json['hits']['total'] == 2 assert 'organisation' not in res.json['aggregations'] @@ -76,7 +76,7 @@ def test_list(app, client, make_project, superuser, admin, moderator, # Logged as admin login_user_via_session(client, email=admin['email']) - res = client.get(url_for('projects.projects_list')) + res = client.get(url_for('projects.search')) assert res.status_code == 200 assert res.json['hits']['total'] == 2 assert 'organisation' not in res.json['aggregations'] @@ -87,7 +87,7 @@ def test_list(app, client, make_project, superuser, admin, moderator, lambda *args, **kwargs: [any_user]) new_user = make_user('user', 'org', 'admin_access') login_user_via_session(client, email=new_user['email']) - res = client.get(url_for('projects.projects_list')) + res = client.get(url_for('projects.search')) assert res.status_code == 200 assert res.json['hits']['total'] == 3 @@ -101,42 +101,42 @@ def test_create(client, project_json, superuser, admin, moderator, submitter, } # Not logged - res = client.post(url_for('projects.projects_list'), + res = client.post(url_for('projects.search'), data=json.dumps(project_json), headers=headers) assert res.status_code == 403 # User login_user_via_session(client, email=user['email']) - res = client.post(url_for('projects.projects_list'), + res = client.post(url_for('projects.search'), data=json.dumps(project_json), headers=headers) assert res.status_code == 403 # submitter login_user_via_session(client, email=submitter['email']) - res = client.post(url_for('projects.projects_list'), + res = client.post(url_for('projects.search'), data=json.dumps(project_json), headers=headers) assert res.status_code == 201 # Moderator login_user_via_session(client, email=moderator['email']) - res = client.post(url_for('projects.projects_list'), + res = client.post(url_for('projects.search'), data=json.dumps(project_json), headers=headers) assert res.status_code == 201 # Admin login_user_via_session(client, email=admin['email']) - res = client.post(url_for('projects.projects_list'), + res = client.post(url_for('projects.search'), data=json.dumps(project_json), headers=headers) assert res.status_code == 201 # Super user login_user_via_session(client, email=superuser['email']) - res = client.post(url_for('projects.projects_list'), + res = client.post(url_for('projects.search'), data=json.dumps(project_json), headers=headers) assert res.status_code == 201 @@ -150,56 +150,56 @@ def test_read(client, make_project, make_user, superuser, admin, moderator, # Not logged res = client.get( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 403 # Logged as user login_user_via_session(client, email=user['email']) res = client.get( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 403 # Logged as submitter login_user_via_session(client, email=submitter['email']) res = client.get( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 200 res = client.get( - url_for('projects.projects_item', pid_value=project2['id'])) + url_for('projects.read', pid_value=project2['id'])) assert res.status_code == 200 # Logged as moderator login_user_via_session(client, email=moderator['email']) res = client.get( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 200 res = client.get( - url_for('projects.projects_item', pid_value=project2['id'])) + url_for('projects.read', pid_value=project2['id'])) assert res.status_code == 200 # Logged as admin login_user_via_session(client, email=admin['email']) res = client.get( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 200 res = client.get( - url_for('projects.projects_item', pid_value=project2['id'])) + url_for('projects.read', pid_value=project2['id'])) assert res.status_code == 200 # Logged as admin of other organisation other_admin = make_user('admin', 'org2', access='admin-access') login_user_via_session(client, email=other_admin['email']) res = client.get( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 200 # Logged as superuser login_user_via_session(client, email=superuser['email']) res = client.get( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 200 @@ -215,7 +215,7 @@ def test_update(client, make_project, superuser, admin, moderator, submitter, } # Not logged - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project1['id']), data=json.dumps(project1.data), headers=headers) @@ -223,7 +223,7 @@ def test_update(client, make_project, superuser, admin, moderator, submitter, # Logged as user login_user_via_session(client, email=user['email']) - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project1['id']), data=json.dumps(project1.data), headers=headers) @@ -231,13 +231,13 @@ def test_update(client, make_project, superuser, admin, moderator, submitter, # Logged as submitter login_user_via_session(client, email=submitter['email']) - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project1['id']), data=json.dumps(project1.data), headers=headers) assert res.status_code == 200 - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project2['id']), data=json.dumps(project2.data), headers=headers) @@ -245,13 +245,13 @@ def test_update(client, make_project, superuser, admin, moderator, submitter, # Logged as moderator login_user_via_session(client, email=moderator['email']) - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project1['id']), data=json.dumps(project1.data), headers=headers) assert res.status_code == 200 - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project2['id']), data=json.dumps(project2.data), headers=headers) @@ -259,13 +259,13 @@ def test_update(client, make_project, superuser, admin, moderator, submitter, # Logged as admin login_user_via_session(client, email=admin['email']) - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project1['id']), data=json.dumps(project1.data), headers=headers) assert res.status_code == 200 - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project2['id']), data=json.dumps(project2.data), headers=headers) @@ -273,13 +273,13 @@ def test_update(client, make_project, superuser, admin, moderator, submitter, # Logged as superuser login_user_via_session(client, email=superuser['email']) - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project1['id']), data=json.dumps(project1.data), headers=headers) assert res.status_code == 200 - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project2['id']), data=json.dumps(project2.data), headers=headers) @@ -287,7 +287,7 @@ def test_update(client, make_project, superuser, admin, moderator, submitter, # Save status rejected --> OK project2.data['metadata']['validation']['status'] = 'rejected' - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project2['id']), data=json.dumps(project2.data), headers=headers) @@ -295,7 +295,7 @@ def test_update(client, make_project, superuser, admin, moderator, submitter, # Record is rejected, new save is not possible project2.data['metadata']['validation']['status'] = 'validated' - res = client.put(url_for('projects.projects_item', + res = client.put(url_for('projects.read', pid_value=project2['id']), data=json.dumps(project2.data), headers=headers) @@ -310,19 +310,19 @@ def test_delete(client, db, document, make_project, superuser, admin, # Not logged res = client.delete( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 403 # Logged as user login_user_via_session(client, email=user['email']) res = client.delete( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 403 # Logged as submitter login_user_via_session(client, email=submitter['email']) res = client.delete( - url_for('projects.projects_item', pid_value=project2['id'])) + url_for('projects.read', pid_value=project2['id'])) assert res.status_code == 403 project1 = make_project('submitter', 'org') @@ -330,11 +330,11 @@ def test_delete(client, db, document, make_project, superuser, admin, # Logged as moderator login_user_via_session(client, email=moderator['email']) res = client.delete( - url_for('projects.projects_item', pid_value=project2['id'])) + url_for('projects.read', pid_value=project2['id'])) assert res.status_code == 403 res = client.delete( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 204 project1 = make_project('submitter', 'org') @@ -342,11 +342,11 @@ def test_delete(client, db, document, make_project, superuser, admin, # Logged as admin login_user_via_session(client, email=admin['email']) res = client.delete( - url_for('projects.projects_item', pid_value=project2['id'])) + url_for('projects.read', pid_value=project2['id'])) assert res.status_code == 403 res = client.delete( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 204 project1 = make_project('submitter', 'org') @@ -354,7 +354,7 @@ def test_delete(client, db, document, make_project, superuser, admin, # Logged as superuser login_user_via_session(client, email=superuser['email']) res = client.delete( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 204 project1 = make_project('submitter', 'org') @@ -369,5 +369,5 @@ def test_delete(client, db, document, make_project, superuser, admin, document.reindex() res = client.delete( - url_for('projects.projects_item', pid_value=project1['id'])) + url_for('projects.read', pid_value=project1['id'])) assert res.status_code == 403 diff --git a/tests/api/suggestions/test_suggestions_rest.py b/tests/api/suggestions/test_suggestions_rest.py index 0e0642c02..cbb322673 100644 --- a/tests/api/suggestions/test_suggestions_rest.py +++ b/tests/api/suggestions/test_suggestions_rest.py @@ -30,7 +30,7 @@ def test_completion(client, project_json, make_user): login_user_via_session(client, email=user['email']) project_json['metadata']['projectSponsor'] = 'Sponsor 1' - res = client.post(url_for('projects.projects_list'), + res = client.post(url_for('projects.search'), data=json.dumps(project_json)) # Ensure project is indexed current_search.flush_and_refresh(index='projects') diff --git a/tests/api/test_ext_before_request.py b/tests/api/test_ext_before_request.py index 9b16c9aef..0bd3a5c8c 100644 --- a/tests/api/test_ext_before_request.py +++ b/tests/api/test_ext_before_request.py @@ -25,10 +25,10 @@ def test_ext_before_request(client, superuser): """Test before request hook in extension.""" login_user_via_session(client, email=superuser['email']) - res = client.get(url_for('projects.projects_list')) + res = client.get(url_for('projects.search')) assert res.status_code == 200 assert request.accept_mimetypes.find('text/csv') == -1 - res = client.get(url_for('projects.projects_list', format='text/csv')) + res = client.get(url_for('projects.search', format='text/csv')) assert res.status_code == 200 assert request.accept_mimetypes.find('text/csv') == 0 diff --git a/tests/conftest.py b/tests/conftest.py index 7581e713f..1462afcf6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -980,7 +980,7 @@ def mock_thumbnail_creation(monkeypatch): b'Fake thumbnail image content') -@pytest.yield_fixture +@pytest.fixture def without_oaiset_signals(app): """Temporary disable oaiset signals.""" from invenio_oaiserver import current_oaiserver diff --git a/tests/unit/resources/test_resources_resource.py b/tests/unit/resources/test_resources_resource.py index 882675e7a..e84f23f68 100644 --- a/tests/unit/resources/test_resources_resource.py +++ b/tests/unit/resources/test_resources_resource.py @@ -47,8 +47,8 @@ def test_config(app, client, make_user, admin): assert isinstance(app.extensions['sonar'].resources['projects'].config(), HEPVSRecordResourceConfig) - # No `resource_name` attribute + # No `blueprint_name` attribute delattr(app.extensions['sonar'].resources['projects'].default_config, - 'resource_name') + 'blueprint_name') assert isinstance(app.extensions['sonar'].resources['projects'].config(), RecordResourceConfig)