From 93df33485214aef9bd76d42d1e0c7cfd15cd5ade Mon Sep 17 00:00:00 2001 From: anonymous <anonymous> Date: Thu, 21 Mar 2019 09:30:00 +0100 Subject: [PATCH] start refactor validation --- ckanext/odsh/helpers.py | 2 + .../odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo | Bin 6459 -> 6632 bytes .../odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po | 6 +++ ckanext/odsh/plugin.py | 1 - .../snippets/package_basic_fields.html | 6 +-- ckanext/odsh/validation.py | 50 ++++++++++++++---- 6 files changed, 51 insertions(+), 14 deletions(-) diff --git a/ckanext/odsh/helpers.py b/ckanext/odsh/helpers.py index d2d07cfb..92ee251f 100644 --- a/ckanext/odsh/helpers.py +++ b/ckanext/odsh/helpers.py @@ -160,6 +160,8 @@ def odsh_extract_error(key, errors, field='extras'): return error.replace(key+':', '') def odsh_extract_error_new(key, errors): + print('ERRORS') + print(errors) if not errors or not ('__extras' in errors): return None error = errors['__extras'][0].get(key,None) diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo index 6c58f6b551b398f3a3e09aed54d9584bf7cb6417..621d249dadacd7b628fc15fa6ccd6f87096605a4 100644 GIT binary patch delta 1833 zcmdmO^uoCQo)F7a1_lO(90mpk83qQ18fFj=f$y*}Fo1;aLg|N4`Y9U&0}BHK!%Hat z9UB9K5Ca3lCpHEKZUzPhR(6Pag6s?otPBhcdh84g><kPHChQP-8+HZ;eg=km1`l=y z1}+8$h6r{B20;b}hGcdI1_cHNhEjG021y16hG|go4N!H5paz_U8hn!-V)1=;1_m~e z1K1fDI2jliezG$#NH8!kFmph}WjGiZ1Q-|?lsO>wm~b#Kh%wYNFt~9*To%g#aY!l$ z#Ki?rjb$7R415d>47D5#45ADS3_TnS45|za42w7z7<d^N7*237FsLvvFkItcU=U$o zVEE0!z#z-Oz#za0k=Nsdc*KSiVon$*#Qanczn+1CA)6DTv5FJo@_r~ilM@nDi#fqT z#ju`}fkBFafnh%<B<OE(GBEHkFfiN)8N|TA@P?CtK^NozPKZM_xgZwVb1^V*FfcH< zazR4Ej|<|EP%Z|BdXPj47XyPh0|P@Y7sR4gE{Kb#azQLw57n>*Du0*@;?T=bgYR-d zLhcz<-AAZCP(lF3IV(5B0lZLJj2jZ-^4tvd;5bv~h6WWkB+hKOAwCb~h9tg3Zb+P^ zazh+c&dtCe3`(rr5T8!qhIn8ZHze)s<Ay}heQpK@O;BRwf$;TtAo8I+3=DD%3=CyF z^$>xnJdo77jRz8!mw6y@_=5)$5@Ngz4Dt*N3<kUqegH2d(PcsDT3$$qOyFf;U}9ik zm<3fgmzRM-nt_2~J1+x+9s>izWnKmbF9rq%CO!rR3kC)T-+Dd<h6#)e3~hXn5D*uD zM1iURB#um>w2J^FM1ln%>f!|;A(blt@mU*Ge2oAkP3(fw#|0oEbVUG^+8G#LLHUe= z3=C=v3=H++f)JnC2|^5x6NG5U5rjCPNe~iO69pmJXQm(|5v>x0#Q8=+NJ#8~^3Mx0 zFeo!HFx(PkU{GRUVE88p32H?lh&~4>?JfjPob?QTP=OF3NG^yLf&^KC5CelYD7y(k z9I`_QV$g9RNK`!&f;gO67!oqd!jLG_7lx!2Utvg^h!=)<s2s}g6^3|ZsW8aH^$ZN# zgduTvL>Lmc=Y%1N<^@;*1A~wVB(W)oKnyYwVPG&~U|{ePfjFR61nd)rxgrpA7K=c9 zx)#dcA_7UY`$Ql?epm$J(N`i23_76v|6c?W#5$r7mz#(}T<9hWF)$oTCyIhx%)pQh zRaYqr$sOIIknGhDRW}1lFM`r*L?LNvn<%7wI3~)#V9vn6@I{n?p&nEu>WD#nU@Hc3 zfU_9H2ccpRhs206Fld0v2Qi2N)5IVK91(*=$saLD>XsIVBt|cBNK_PvLqe)g9OCnX z;tUL03=9k}#2FYA85kIZB^c7cC6=iKB(9Ss7#Iv07#R8`AVGal0^)${5|BjpLIUE` z-x3g?vq(ZpL=H(vnoyQxV6bFhU~rIRU~pz&V5pLWMCHECJJ~{6)G~{UOH)&<6jE~w sN-7y(yuADpg+zt2#GK3&g_OjS)XluyMO>2~iHlDDCmOi9UUUyL09?PTe*gdg delta 1754 zcmaE1yxXY$o)F7a1_lO(ECvP!83qQ19A*#?f%mX6Fo1;iLg|B0`Y0O%0}BHK!$~Or z92*0J5Ca3lB{l{IZUzR1r)&`OKC&?|ure?(@Ub&6urn|)h_FNCW!M=Q_!$`L88p}# z7`PZ17%bQs7z7y@7@XM|7!(*77(&?@7$g}O7|NjH6QJrAK@C{T4l#HqJH+Ds><kQS zAP2BBFmN(3Fx+HkV31&7V0a7_|HIC}Ai%)Dz{~-$M}&icL5!iEfkBM};xbzfh(laC zAO;6;Knx7yU|`^5U|@*lU|<jhg%Ae=gDL|9LlXxB11|#u!wL=t1{DSdhHV@S3?d8+ z47WKL7-Sh37(PJd`8XjSk>P}xW5x+F-xb8KXJBCP=7eaB;)J+7A4*qpLV~K96C6|w z{hSO8QVa|X^En|wzl)QBfro*CVL!+q1_p*RoD2-QAO~<l9LmWBu}Geafq{d8fkBlE z;vqdQh(k=d7#Qk75-wZ}4B`w748B|ti&D8DE-vMQSkw>IFa;{Vm<!_2%}|5)azR4w z7*yRwsJ;hWkdS=}RreN3e}jtu=VGV_#~C{}#HW1Rki;g%4T&Q;ZioX6xEUCP85kH$ zxgkFD<c2sno*R-@%DEv?GJ~6eL6d=jVIP$L0xHkP!@wZNz`&r-15xkC14*3uJoS*c z>*0aK*+w3S&(HHPFvv47Fua8FIe8(8Oc_d>@j^ntlb3;kiGhJ3m=~fijF*8ynt_3# zfR}+mkAZ=qhnIoDi-Cb*H!lN&1p@;E8y^G11V#o1dp=0oxlqp!3G#dVkT`h<rT_9n zLWD;EqEJErlA6^7AU?H+il+)d(m*kkZV-TkP_F<ebu%z5hVpj_FfgbwFfd#YfOzaX zRDZp=AVh<zAjARIf{-}#5`<)zAVEl?Nfv~}ah4z?Bub(D4nYP6Wd;U@$$|_FN(>AP z+XW#(eG97ZCzJ*i4xn;?T?k?xuMjxV*E5I+L4r(Eh=D<yfq}tQ2;z`JA&5Z@LXfzc zF9dP<9wA7`+!2CA*$W{^T4580qzMUOh=&ZId^cf;N8*GbA(<}>iMm>0P?Xg(FtiIp z63s%Wg44o~#C8*E&|6^!1|v|xAp&uLnFu6Xg^556iV=bMC=JTb6@et$auG<7*NA|9 z%CK03fkB6XfnkRTB!r)eFfa&$^8Z^AhztKi4G<887%U|Uaj}Xh#D_+rklf)S3dzqN zP<4S&IvPr+ibB#<z9_`pdQpgjCqT`aCJJ%z3Q-1zdQg$LUX+1BgMoqJfGDH@c`3@k zV9vn6AT9=p0)H_`YR(gbB)+*~kf1*-1__ymVi2E-h%+!~F)%P#i!(4NGB7Zti9^im z5QjwVHgN_9Lk0$hN8*qu5|LnV1DDBK5|Bh?EdlYFp9I9G;S!J%FIobU2FfHD7%V}F hO@e{JnSp`ftOO+L1UKJg3uW0H%3a8{Sx0OSGXN5BktP5D diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po index 950414e8..65fedcd3 100644 --- a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po +++ b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po @@ -207,10 +207,16 @@ msgstr "Bitte geben Sie einen Titel ein" msgid "odsh_issued_error_label" msgstr "Bitte wählen Sie ein Veröffentlichungsdatum" +msgid "issued: empty" +msgstr "Bitte wählen Sie ein Veröffentlichungsdatum" + msgid "odsh_issued_not_date_error_label" msgstr "Bitte wählen Sie ein korrektes Veröffentlichungsdatum" +msgid "issued: not a valid date" +msgstr "Bitte wählen Sie ein korrektes Veröffentlichungsdatum" + msgid "Tag string: Fehlender Wert" msgstr "Bitte wählen Sie geeignete Schlagwörter" diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py index 71ecf35f..52d4e62a 100644 --- a/ckanext/odsh/plugin.py +++ b/ckanext/odsh/plugin.py @@ -253,7 +253,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm schema['extras'].update({ 'key': [ - toolkit.get_converter('odsh_validate_issued'), toolkit.get_converter('odsh_validate_temporal_start'), toolkit.get_converter('odsh_validate_temporal_end'), toolkit.get_converter('known_spatial_uri'), diff --git a/ckanext/odsh/templates/package/snippets/package_basic_fields.html b/ckanext/odsh/templates/package/snippets/package_basic_fields.html index 5426a680..29ba4e24 100644 --- a/ckanext/odsh/templates/package/snippets/package_basic_fields.html +++ b/ckanext/odsh/templates/package/snippets/package_basic_fields.html @@ -158,8 +158,8 @@ is_required=true,placeholder=_('Enter title')) }} {% set field = 'issued' %} {% set data_issued = h.odsh_extract_value_from_extras(data.extras,field) %} - {% set value = data_issued.split('T')[0] if data_issued else h.odsh_now()%} - {% set error = h.odsh_extract_error(field, errors) %} + {% set error = h.odsh_extract_error_new(field, errors) %} + {% set value = data_issued.split('T')[0] if data_issued else (h.odsh_now() if not error else '')%} <div class="control-group {{ " error" if error }} control-full"> <label class="control-label" for="field-{{field}}">Veröffentlichungsdatum: <span title="Dieses Feld ist erforderlich" class="control-required">*</span> </label> <div class="controls"> @@ -172,7 +172,7 @@ is_required=true,placeholder=_('Enter title')) }} </div> <div class="span6 inline-error"> {% if error %} - {{_(error)}} + {{_('issued: ' + error)}} {% endif %} </div> </div> diff --git a/ckanext/odsh/validation.py b/ckanext/odsh/validation.py index 3a6d6ef8..4b9c0db7 100644 --- a/ckanext/odsh/validation.py +++ b/ckanext/odsh/validation.py @@ -24,7 +24,7 @@ def _extract_value(data, field): def validate_extra_groups(data): value = _extract_value(data, 'groups') if not value: - raise toolkit.Invalid({'groups':'at least one group needed'}) + return 'at least one group needed' groups = [g.strip() for g in value.split(',') if value.strip()] for k in data.keys(): @@ -32,13 +32,24 @@ def validate_extra_groups(data): data[k]='' # del data[k] if len(groups)==0: - raise toolkit.Invalid({'groups':'at least one group needed'}) + return 'at least one group needed' for num, tag in zip(range(len(groups)), groups): data[('groups', num, 'id')] = tag def validate_extras(key, data, errors, context): - validate_extra_groups(data) + pass + extra_errors = {} + error = validate_extra_groups(data) + if error: + extra_errors['groups'] = error + + error = validate_extra_date_new(key, 'issued', data, False) + if error: + extra_errors['issued'] = error + + if extra_errors: + raise toolkit.Invalid(extra_errors) def _set_value(data, field, value): key = None @@ -50,12 +61,32 @@ def _set_value(data, field, value): return None data[(key[0], key[1], 'value')] = value -def validate_extra_date(key, field, data, errors, context): +def validate_extra_date_new(key, field, data, optional=False): + value = _extract_value(data, field) + + if not value: + if optional: + return + # Statistikamt Nord does not always provide temporal_start/end, + # but their datasets have to be accepted as they are. + if not ('id',) in data or data[('id',)][:7] != 'StaNord': + return 'empty' + else: + if re.match(r'\d\d\d\d-\d\d-\d\d', value): + try: + dt=parse(value) + _set_value(data, field, dt.isoformat()) + return + except ValueError: + pass + return 'not a valid date' + +def validate_extra_date(key, field, data, optional=False): value = _extract_value(data, field) if not value: - if field == 'temporal_end': - return # temporal_end is optional + if optional: + return # Statistikamt Nord does not always provide temporal_start/end, # but their datasets have to be accepted as they are. if not ('id',) in data or data[('id',)][:7] != 'StaNord': @@ -71,8 +102,8 @@ def validate_extra_date(key, field, data, errors, context): raise toolkit.Invalid(field+':odsh_'+field+'_not_date_error_label') -def validate_extra_date_factory(field): - return lambda key, data, errors, context: validate_extra_date(key, field, data, errors, context) +def validate_extra_date_factory(field, optional=False): + return lambda key, data, errors, context: validate_extra_date(key, field, data, optional) def validate_licenseAttributionByText(key, data, errors, context): register = model.Package.get_license_register() @@ -172,9 +203,8 @@ def get_validators(): return { 'licenseAttributionByText': validate_licenseAttributionByText, 'known_spatial_uri': known_spatial_uri, - 'odsh_validate_issued': validate_extra_date_factory('issued'), 'odsh_validate_temporal_start': validate_extra_date_factory('temporal_start'), - 'odsh_validate_temporal_end': validate_extra_date_factory('temporal_end'), + 'odsh_validate_temporal_end': validate_extra_date_factory('temporal_end', True), 'odsh_tag_name_validator': tag_name_validator, 'odsh_validate_extras':validate_extras } \ No newline at end of file -- GitLab