From 5e668f00af2ae4666480490efe76a19a50a8512e Mon Sep 17 00:00:00 2001 From: Johannes Nussbaum <39048939+jnussbaum@users.noreply.github.com> Date: Mon, 7 Aug 2023 12:10:30 +0200 Subject: [PATCH] chore: replace gui_element Slider by Spinbox, remove gui_element SimpleText for intervals, et al. (DEV-2501) (#452) --- .github/pull_request_template.md | 4 +- README.md | 13 +++++-- docs/file-formats/json-project/ontologies.md | 12 ++---- docs/index.md | 12 ++++-- src/dsp_tools/resources/schema/project.json | 36 +----------------- .../resources/schema/properties-only.json | 36 +----------------- .../test_excel_to_json_properties.py | 6 +-- .../excel2json-expected-output.json | 2 +- .../test-name (test_label)/properties.xlsx | Bin 16826 -> 10423 bytes .../properties-invalid-gui_attribute.xlsx | Bin 7085 -> 7075 bytes .../json-project/test-project-systematic.json | 6 +-- 11 files changed, 35 insertions(+), 92 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 7eed0224b..e01b8f7f2 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,7 +1,7 @@ ===REMOVE=== Important! Please follow the guidelines for naming Pull Requests: - + **Note:** When squash-merging a PR into the main branch, @@ -12,5 +12,3 @@ GitHub will take the name of this single commit as squash-merge-commit message. In this case, you have to manually ensure that the squash-merge commit message is identical to the PR title. ===REMOVE=== - -resolves DEV- diff --git a/README.md b/README.md index ea6e505a1..141f2ceb7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,13 @@ -[![PyPI version](https://badge.fury.io/py/dsp-tools.svg)](https://badge.fury.io/py/dsp-tools) -[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) -[![linting: pylint](https://img.shields.io/badge/linting-pylint-yellowgreen)](https://github.com/pylint-dev/pylint) +[![](https://badge.fury.io/py/dsp-tools.svg)](https://badge.fury.io/py/dsp-tools) +[![](https://img.shields.io/pypi/pyversions/dsp-tools.svg)](https://pypi.org/project/dsp-tools/) +[![](https://img.shields.io/badge/Python%20code%20style-black-000000.svg)](https://github.com/psf/black) +[![](https://img.shields.io/badge/Python%20linting-pylint-darkgreen)](https://github.com/pylint-dev/pylint) +[![](https://img.shields.io/badge/Python%20typing-mypy-darkgreen)](https://github.com/python/mypy) +[![](https://img.shields.io/badge/Markdown%20linting-markdownlint-darkgreen)]( + https://github.com/igorshubovych/markdownlint-cli) +[![](https://img.shields.io/badge/Link%20validation-markdown%20link%20validator-darkgreen)]( + https://www.npmjs.com/package/markdown-link-validator) + # DSP-TOOLS - DaSCH Service Platform Tools diff --git a/docs/file-formats/json-project/ontologies.md b/docs/file-formats/json-project/ontologies.md index a6680153a..dd2234055 100644 --- a/docs/file-formats/json-project/ontologies.md +++ b/docs/file-formats/json-project/ontologies.md @@ -251,7 +251,7 @@ These three are related as follows: | hasValue | BooleanValue | Checkbox | | hasColor | ColorValue | Colorpicker | | hasValue | DateValue | Date | -| hasValue | DecimalValue | Slider,
SimpleText | +| hasValue | DecimalValue | Spinbox,
SimpleText | | hasValue | GeonameValue | Geonames | | hasValue | IntValue | Spinbox,
SimpleText | | hasValue | ListValue | List | @@ -364,7 +364,7 @@ information. *gui_elements / gui_attributes*: -- `Slider`: Provides a slider to select a decimal value. +- `Spinbox`: Provides a spinbox to select a decimal value. - *gui_attributes*: - `max=decimal` (mandatory): maximal value - `min=decimal` (mandatory): minimal value @@ -896,12 +896,8 @@ See the [`isSequenceOf` property](#issequenceof-property) or the *gui_elements / gui_attributes*: -- `SimpleText`: A simple text entry box (one line only). - - *gui_attributes*: - - `maxlength=integer` (optional): The maximum number of characters accepted - - `size=integer` (optional): The size of the input field - - `Interval`: Two Sliders, one for each decimal - - *gui_attributes*: No attributes +- `Interval`: Two spinboxes, one for each decimal + - *gui_attributes*: No attributes Example: diff --git a/docs/index.md b/docs/index.md index 5f959c416..6f978ab8a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,12 @@ -[![PyPI version](https://badge.fury.io/py/dsp-tools.svg)](https://badge.fury.io/py/dsp-tools) -[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) -[![linting: pylint](https://img.shields.io/badge/linting-pylint-yellowgreen)](https://github.com/pylint-dev/pylint) +[![](https://badge.fury.io/py/dsp-tools.svg)](https://badge.fury.io/py/dsp-tools) +[![](https://img.shields.io/pypi/pyversions/dsp-tools.svg)](https://pypi.org/project/dsp-tools/) +[![](https://img.shields.io/badge/Python%20code%20style-black-000000.svg)](https://github.com/psf/black) +[![](https://img.shields.io/badge/Python%20linting-pylint-darkgreen)](https://github.com/pylint-dev/pylint) +[![](https://img.shields.io/badge/Python%20typing-mypy-darkgreen)](https://github.com/python/mypy) +[![](https://img.shields.io/badge/Markdown%20linting-markdownlint-darkgreen)]( + https://github.com/igorshubovych/markdownlint-cli) +[![](https://img.shields.io/badge/Link%20validation-markdown%20link%20validator-darkgreen)]( + https://www.npmjs.com/package/markdown-link-validator) # DSP-TOOLS documentation diff --git a/src/dsp_tools/resources/schema/project.json b/src/dsp_tools/resources/schema/project.json index 1fe26e879..3acd3caf0 100644 --- a/src/dsp_tools/resources/schema/project.json +++ b/src/dsp_tools/resources/schema/project.json @@ -112,7 +112,6 @@ "Richtext", "Searchbox", "SimpleText", - "Slider", "Spinbox", "Textarea", "TimeStamp" @@ -589,7 +588,7 @@ }, "gui_element": { "enum": [ - "Slider", + "Spinbox", "SimpleText" ] } @@ -755,10 +754,7 @@ } }, "gui_element": { - "enum": [ - "Interval", - "SimpleText" - ] + "const": "Interval" } } } @@ -897,34 +893,6 @@ } } }, - { - "if": { - "properties": { - "gui_element": { - "const": "Slider" - } - } - }, - "then": { - "properties": { - "gui_attributes": { - "type": "object", - "properties": { - "max": { - "type": "number" - }, - "min": { - "type": "number" - } - }, - "additionalProperties": false - } - }, - "required": [ - "gui_attributes" - ] - } - }, { "if": { "properties": { diff --git a/src/dsp_tools/resources/schema/properties-only.json b/src/dsp_tools/resources/schema/properties-only.json index df1911831..32ba55bad 100644 --- a/src/dsp_tools/resources/schema/properties-only.json +++ b/src/dsp_tools/resources/schema/properties-only.json @@ -88,7 +88,6 @@ "Richtext", "Searchbox", "SimpleText", - "Slider", "Spinbox", "Textarea", "TimeStamp" @@ -419,7 +418,7 @@ }, "gui_element": { "enum": [ - "Slider", + "Spinbox", "SimpleText" ] } @@ -585,10 +584,7 @@ } }, "gui_element": { - "enum": [ - "Interval", - "SimpleText" - ] + "const": "Interval" } } } @@ -727,34 +723,6 @@ } } }, - { - "if": { - "properties": { - "gui_element": { - "const": "Slider" - } - } - }, - "then": { - "properties": { - "gui_attributes": { - "type": "object", - "properties": { - "max": { - "type": "number" - }, - "min": { - "type": "number" - } - }, - "additionalProperties": false - } - }, - "required": [ - "gui_attributes" - ] - } - }, { "if": { "properties": { diff --git a/test/unittests/test_excel_to_json_properties.py b/test/unittests/test_excel_to_json_properties.py index adf0520dc..03bdd2053 100644 --- a/test/unittests/test_excel_to_json_properties.py +++ b/test/unittests/test_excel_to_json_properties.py @@ -248,7 +248,7 @@ def test_excel2properties(self) -> None: "Date", "SimpleText", "Colorpicker", - "Slider", + "Spinbox", "TimeStamp", "Interval", "Checkbox", @@ -334,11 +334,11 @@ def test_validate_properties(self) -> None: "testdata/invalid-testdata/excel2json/properties-invalid-gui_element.xlsx", "did not pass validation. The problematic property is 'hasInterval' in Excel row 4. " r"The problem is that the column 'gui_element' has an invalid value: " - r"'Geonames' is not one of \['Interval', 'SimpleText'\]", + r"'Interval' was expected", ), ( "testdata/invalid-testdata/excel2json/properties-invalid-gui_attribute.xlsx", - "did not pass validation. The problematic property is 'hasInterval' in Excel row 4. " + "did not pass validation. The problematic property is 'hasInteger' in Excel row 4. " r"The problem is that the column 'gui_attributes' has an invalid value: " r"Additional properties are not allowed \('rows' was unexpected\)", ), diff --git a/testdata/excel2json/excel2json-expected-output.json b/testdata/excel2json/excel2json-expected-output.json index 8d0d7524a..6032eca6d 100644 --- a/testdata/excel2json/excel2json-expected-output.json +++ b/testdata/excel2json/excel2json-expected-output.json @@ -376,7 +376,7 @@ "de": "Dezimalzahl", "fr": "Chiffre décimale" }, - "gui_element": "Slider", + "gui_element": "Spinbox", "gui_attributes": { "min": 0.0, "max": 100.0 diff --git a/testdata/excel2json/excel2json_files/test-name (test_label)/properties.xlsx b/testdata/excel2json/excel2json_files/test-name (test_label)/properties.xlsx index bdd57544c1b9cbfde2cb2a44cd890653d47737ff..28a18ebee95b3d6997532f31c2955db787e6f190 100644 GIT binary patch literal 10423 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 literal 16826 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 Ud&Oxa0_ew1L8^l~q1%`L0dM8dcmMzZ delta 2253 zcmZ8jc{~){8lFLxVr(;Gj4WxCQMPaFON5xItYeClC8h?0Y}uP+yR=MWM9G@SzKbYJ zmTYC>!_>rQD>9?|(a6rV)a~By{Bh3nzUMv5@0{oNyl;+Xi6+SE3@6uqz)l;#K{!VN z$#CtA6@MH6?gHvb;Nd+$07~wG_@ADta^Q!3ygSi@gwAp*g-4p?aHdrS7Q1!2D`IVN zEFk(h=YvbyLTU1&F;fgE5rlZ}y)|0Q(0SA#>L)sSv@Zy)&nQ${F`dqRFMzB}L*%~@ zwkeZXs84%_O>@5?Y#~L(^Yy$rOt*H!NdA^ZhV zwZWLVUe<|Px&kB%NpMZGYW(L~bjN3`AXp;D7O_*&xDvsGyKOM_~J)+iT*RxuLX`ce_(vjstXn6~|BBaYr+ z_SX;Ofdpu%*R?|yj!N@lyT%xS7Zol;t6938HHey(zXg^cLZ=rQKT!bZ1bfb+2NuqZR3$$z=!;@899L~kB> z38uSl9t-KP&s|DVg_m|w=HuMc6ptWy>wKOn)Jm&bp5wL|?ZzvP^?F5IYS-xT?<0rG zkj%pQ=uYf2f7rXic7u+#m%%G&>Wz z1{e|fycuL$X0qre&pAbNzpKtJWCmhLe&sIO|K3;oG38SonHrEmn?791-EFw#!;~0A zi}yb=%Ji1cfh!nm;MP4>)ap`?8Ee?-O$d(KU+_KrC1n6X=}l3 zgGH+{*S{KgKRXuJi&>?Sd=FJHMXb`}O*pzyiinZ$?uEw4SaG#pXo23}xWK9I zzqufu7#l-nFN6r~tb_F}L)4r{c6CAihrB0wGf=e|I=C{{Fv?L-6sk28* zf>A3!{0mu9SxVQ@h}C@y5|dDaKsp07pR{pt);&Nsm$MKe?CdbQH`Y}m&4+l~yXD~7 zF%*`t3=%*Q9vZiDz>{g^l`)~OJ2S>mo&>sKD-?cR-I#(e`7wv=I9l1#)kU_E8&j^g zuU}cJdWycL)cB>Wc_qO=L37e0=!?%XqU(CN9XYAegBnu5mFdP-{v{y1yJB5+K>*0P ztI1VPLIHbvT{SFR_EWhNME8`tszOu@NZJvaOAoNBBp?8w%LM>{w-rB_sO(R0@x!}e z1N_{*ulg$mdl3VvmX@t5{OwJrlMaYwF_sUj)ugu}ghVvCd6eY6-onvoiFGQ=?7GVk z8>-~@8}GudOH3D~t51lA(?AEb4bm|{y9U$A=l98vA5)JZIgrF8U*4GYSdz?nyc7pt zV|?~~MeEw$N~>CDoK~Qu4E6kUiR_70FQ|@SA)g|^o~n4Is;5`suFapNW(rd)MhQ}j zW`azEan?n@XeECIYx_==!gr$9mb)p=*%2@h>Yuea_$<)eeS}fqsOt$tQuGqF!Vtcz z=!tbon`CrjRA(p7$I9#oiQ(9EGqOcK222^oSqkM<5-C<9|_-#rEm6Sxw{Fw4e)HM9=tR}E>%A8&e`XySzcG2IUBTQ`W$LdHyu1uCMN8H zmmtZPPdv62xc!Phy)a}X#GjKV@_5X$a!>F^kJCRs`5M&q=Z6l9sqAIo12FYHkO_xV z9bw{oMi@--x3}Y$cM_)mJ4eflYwm@(ifjE(>Uk=zFTKN$;}S2XK5_s6UIzdGf!&(m zSBFW2AKY6h1BU}GsJd|3J=0~|?4X9jrT=@hR*2{>vz+|!ME`BZ0y)5dodRQzv%Knm x9h%&>>b8%8|Jr?b%%aZ2k-OLUCry8cHBhxBewHK75^x}q8YUsj{a$P*;6FQR?u!5b diff --git a/testdata/json-project/test-project-systematic.json b/testdata/json-project/test-project-systematic.json index ae19c3c10..5415258ad 100644 --- a/testdata/json-project/test-project-systematic.json +++ b/testdata/json-project/test-project-systematic.json @@ -352,10 +352,10 @@ "labels": { "en": "Decimal number" }, - "gui_element": "SimpleText", + "gui_element": "Spinbox", "gui_attributes": { - "maxlength": 255, - "size": 80 + "max": 100.0, + "min": 0.0 } }, {