From 16bd3b61bffbc647fbffe7b466a9cebc13dccdca Mon Sep 17 00:00:00 2001 From: anonymous <anonymous> Date: Thu, 21 Mar 2019 13:41:02 +0100 Subject: [PATCH] ODPSH-319: fix date handling --- .../odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo | Bin 6854 -> 7236 bytes .../odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po | 12 ++++ ckanext/odsh/plugin.py | 2 - .../snippets/package_basic_fields.html | 4 +- ckanext/odsh/validation.py | 56 ++++++++---------- 5 files changed, 38 insertions(+), 36 deletions(-) diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo index f6ea89603905f9e8c34163ed34e4c37f6745d5fb..6a4f231e3fe3eb077e58edd541d7f9df437152ed 100644 GIT binary patch delta 2049 zcmX?Rdc>mso)F7a1_lO(A_fKq83qQ1HOwF$0^6`NFo1+?p|m5Ec4cQ^U}0cj@PzXH z*cljv7#J9W*clkO85kH+*&*f?vNJHSGB7aou`@8RGcYhrfy&QeXJFuGV5nzU!Op<I z#lXO@gPnmvkb!~WFgpW-0s{lXRdxmjNd^XnZ%}ao4v0D>4u}Q191w#oIUp9>b1*Ql zfgHfWz`)7Cz!1s7z#zfEz>o|Tui;=|5MW?nXy$;}GlheJL5!iEfnga3#ASP-7952d zd;zNQ8V3Ud9|Hr!T@D5YQ3eKvHyjKMstgPaOq>i1ybKHs8k`IaDhvz^W}FNRA`A=+ z(VPqnvJ4Ci1yK1uPKZb5a6-)4#tCuwQ4qhLfq~&PRO2m9h|AwY>7SespE7fSgNlKl zi-AFkfq_Au3lj8JTnr363=9nRTo8kOxEL68K@Q-8IJA=sV$pmq1_llW28N|vkPuo2 zRlk*sfuSBGafFM3L7ahs;Vjgmr%(&NLKXgkigR*994N^RF;JNs5+yp^5C@oZLmcMD z&A_0@z`)?m4GGy?sQOYUT?Z9!=Vqt}$5}r&Bq*nGL*i@+H^k?AxfvL=85kH&ax*Yk zGcYiG<%T3iLmo&Rn({y_bmw7U5N2Rt@Zo{@Jb?$|p)wvwTI%D0MA>>C1_n(~+Jf@` z^VCBWsPZx}$T2W5xbZ^xsl1TX+r|rt+r_+)I6c7&iOXla3=Hz1Ou`4@EAT-Qp%s+& z<%2jVfe&JC2_M8^lldU#ujGS-<f(c-1_mYu28Jt8gRb*2Fi0~nFnr`=V9;Y=VBqCv zVDMsKV6fq5V6b3dU})!OV3@$jz;J*c5@LaZkhBpm2#JDxC|xHA3Bg`Lh`O1AkdR$2 z2nmS;Q1SX_f{;Y?1xhmtL0rlw1j-%^3@T8*wGab?8Uq7Epb*686+#e$XF%nb2|*mN zM+g$<r-dNd?XnOg(LE7@q?Ok~kdXQY;ny>83NtV$GcYiS2s1D!F)%P#2t$G_S{S0S z3Q9K$LsD}Gl;0-|$!=4HAtAO(7?M_w2}2z632F|b2qY>ML?8~g6@i3ItOzJd>lqj_ zMIec(T?CS7W{N;UU?Y@&Tm<5i`yvn@e-MGh-9HgX+;fOR5|xrDMBYaf68BM}5OeZG z85oQh7#LbaAr9Cs3h~HwQ3eK1Q2xIw3i0W4kN^V%!#hz(s{SDg3G%<95TB}uL4wv& z4B}u%F^I#0#UKt!fzo+m5QkJi)wPL1a?K1e1_m7l28KCeknDR>jDevZR8(GqYP<ub zpNT;d)dw+1fdVQV%o!LM^u!?+rinwMs9YS9NT-QId~{SC;;_@=5D(pjs(&KRz@P!j zzTyz`<RlmvK<4>KFw}#yU5f<7pv4l9)Okq)6gLbEKO`VQCngCA2~SA|1}#w0DhVlI zW=ld0+$#x*``3~T42BF04B}Fdp!bx5I5=JklIRMgAnKc?AP(3l<pI&~QVLSQNJ~S4 zCR`d4WC_xcA~!`El8EZ185k@<K`70@;LO0la7`K#_fj&Of3c~vXQbv9<QFC8#HZ$^ zSSh6D7L-&nl%R;^<(DWVDwHMWWTq&jB$lKiq>D=ui%KvwK}FHEZI<WT#XWhExY%S( zNx8`@#05Ch5AVq-$xKfzo~$7$KY4{X|Kuh~xyg&gMR-&56kw8h3X|tcin1sqmKIOG HA^8pf@R#NJ delta 1819 zcmX?Nam=*-o)F7a1_lO(JO%~^83qQ19%c{^f&Z{EFo1;qLTN^J2%nXmfq{jAfq@gs z=VNDJ5Mp3p5MpOw;AUW8P-TahXUNXLz{<eD;K$Cuz|O$H5CWBtVP|0AXJDvj$Y5t+ z;9_84s9<Mc5M*FrXl7?%P+(wSn99z;Aj!bMunj7H0jlm1)PT28gMUIT{?E?9zy@*v z2Ll5q0|SF32Lpoy0|SFH2SnV4gMmSSfq}u917c4I2Lpo`Lp=jS8VAH>wHy$Kv~oaP zJOQe48V3Ud9|Hr!Tn+{XQ3eKvH5?2KstgPahd3A*co`TNUT`ols4y@veB)qX5Mf|o zkmh7ykY!+CFyMs9`*A`%62l2Gr;HO~ek+Jy&%nUY%?Z&sixcAV^-y{zCnP8jbAp44 z;XEe;gA@Y;!+lOj(Es9OVBle3VE7L*h=GBDhl_zh7vumgh(kTOAQr`QF)(m2FfgQY zK|&&r3*wMcE(V5rkVFd?1A{mN14Azt#G<8K5DT_K74CwHpX7o#@Fvv2$6SyQdjnPX z9jcFwn}I=*fq{XW8xpd*+z<ztLTNjwxH~sPJvh$%xgkLn#tn(H6mE#mYq=R1v>6x} zI=LAbtQi;>wsJ!f-$!mp9De17IFy}-fk7A)0z43(EAT)(WX1zYOMX0%D9h(zV9*4m zEhv9KPd!AzQyvBeIR*v>HeLu{l^2qF-FP8!o6HM|(+*xpTrT5fV322EU^oEfKj4L= z{$Eg<mk$zB3VaL<ObiSRT6_?Fx_k@_(hLj??tBakdJGH<$@P2;3|<Tj43qd67%UhV z81C{hFic=%U=ZVngvfFMNR(_9fW+BRD1Ai$5<-s!AnM)=Ktk@X0K}(af)H^VK}Z_$ zg3{rFkPu1{1f_lkhWaX~z(hd?1~mo-hUJ0~pPhpm@D3{fM-buwAt6YdDhffelco?P zQCSH=(t@K9BqV&G{CFV-24w~YhAbfl1|<dthCU%kNN<Gbt7o_XVK7`5f~3}aQ2rAk zNUnG-1PL-w1cTCoj4;F@9>NfV!i6DGRVEB^_+(*7$ZQsdMA?2}NLslo3`rC3g&`rp zE&}4$Gcd@CKzw2<0tqrV5lGyHh(O{jP6U!@DxmU<L?DT6g9yZ+BO(k8MhpxLw?rTg z;1z{<L{}7Ij<F~tglwUF7g0!}^%G@aPy^-vU{Q!qt3)9|+b;@n@pMs$!&X8y?t;=s zL?I462UT}R6p}06i83(gFfcHD5`|<pc`=9sG@!H*l(rFrq$xKs28Mc2fe|Lgz+le6 zz|bNFv2c$VBxuiyK~m`(F^G?(#UTz;6o>f8SRA6>N}Pc~gMop;TO3jVm54*kTO<xK z=ax9coS)*5#Hk?xi5fo%hI(+&<w!sh-+T!M1}z2#hGP<t0_39v#6V$5NIBpr$-rR9 zz`&3z2?_f7k`M=Mm4qa^W0DY`-;{)e$RkNeiTO+tl13P%7#J)W7#QTF7#N%x7#Jd? ZI3RI5M{2VbyE^;k(|kL)Cx=VF1ps=>oTdN( diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po index 9fc567af..94c7e9e3 100644 --- a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po +++ b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po @@ -177,9 +177,21 @@ msgstr "Bitte geben Sie einen räumlichen Bezug an" msgid "odsh_temporal_start_error_label" msgstr "Bitte wählen Sie einen Beginn des Zeitraumes aus" +msgid "temporal_start: empty" +msgstr "Bitte wählen Sie einen Beginn des Zeitraumes aus" + msgid "odsh_temporal_end_error_label" msgstr "Bitte wählen Sie ein Ende des Zeitraumes aus" +msgid "temporal_end: empty" +msgstr "Bitte wählen Sie ein Ende des Zeitraumes aus" + +msgid "temporal_start: not a valid date" +msgstr "Bitte wählen Sie einen gültigen Beginn des Zeitraumes aus" + +msgid "temporal_end: not a valid date" +msgstr "Bitte wählen Sie ein gültiges Ende des Zeitraumes aus" + msgid "odsh_temporal_error_label" msgstr "Bitte geben Sie einen gültigen Zeitraum an" diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py index a60136bd..744e6066 100644 --- a/ckanext/odsh/plugin.py +++ b/ckanext/odsh/plugin.py @@ -247,8 +247,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm schema['extras'].update({ 'key': [ - 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 8371d5d7..4445b81a 100644 --- a/ckanext/odsh/templates/package/snippets/package_basic_fields.html +++ b/ckanext/odsh/templates/package/snippets/package_basic_fields.html @@ -107,8 +107,8 @@ is_required=true,placeholder=_('Enter title')) }} {% endblock %} <!-- timerange --> - {% set error_start = h.odsh_extract_error('temporal_start', errors) %} - {% set error_end = h.odsh_extract_error('temporal_end', errors) %} + {% set error_start = h.odsh_extract_error_new('temporal_start', errors) %} + {% set error_end = h.odsh_extract_error_new('temporal_end', errors) %} {% set error_string = 'odsh_temporal_error_label' if error_start and error_end else (error_start if error_start else (error_end if error_end))%} <label for="start-end" class="control-label">{{ _('timerange') }}: <span title="{{ _("This field is required") }}" class="control-required">*</span> diff --git a/ckanext/odsh/validation.py b/ckanext/odsh/validation.py index 05fd5ade..0c2177f3 100644 --- a/ckanext/odsh/validation.py +++ b/ckanext/odsh/validation.py @@ -21,12 +21,12 @@ def _extract_value(data, field): return None return data[(key[0], key[1], 'value')] -def validate_extra_groups(data, requireAtLeastOne): +def validate_extra_groups(data, requireAtLeastOne, errors): value = _extract_value(data, 'groups') if not value: - if not requireAtLeastOne: - return None - return 'at least one group needed' + if requireAtLeastOne: + errors['groups']= 'at least one group needed' + return groups = [g.strip() for g in value.split(',') if value.strip()] for k in data.keys(): @@ -34,29 +34,24 @@ def validate_extra_groups(data, requireAtLeastOne): data[k]='' # del data[k] if len(groups)==0: - if not requireAtLeastOne: - return None - return 'at least one group needed' + if requireAtLeastOne: + errors['groups']= 'at least one group needed' + return for num, tag in zip(range(len(groups)), groups): data[('groups', num, 'id')] = tag def validate_extras(key, data, errors, context): - pass extra_errors = {} - error = validate_extra_groups(data,False) - if error: - extra_errors['groups'] = error + isStaNord = ('id',) in data and data[('id',)][:7] == 'StaNord' - error = validate_extra_date_new(key, 'issued', data, False) - if error: - extra_errors['issued'] = error + validate_extra_groups(data, False, extra_errors) + validate_extra_date_new(key, 'issued', data, False, extra_errors) + validate_extra_date_new(key, 'temporal_start', data, isStaNord, extra_errors) + validate_extra_date_new(key, 'temporal_end', data, True, extra_errors) + validate_licenseAttributionByText(data, extra_errors) - error = validate_licenseAttributionByText(data) - if error: - extra_errors['licenseAttributionByText'] = error - - if extra_errors: + if len(extra_errors.values()): raise toolkit.Invalid(extra_errors) def _set_value(data, field, value): @@ -69,25 +64,24 @@ def _set_value(data, field, value): return None data[(key[0], key[1], 'value')] = value -def validate_extra_date_new(key, field, data, optional=False): +def validate_extra_date_new(key, field, data, optional, errors): 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' + if not optional: + errors[field] = 'empty' + return else: if re.match(r'\d\d\d\d-\d\d-\d\d', value): try: + print('parse') + print(value) dt=parse(value) _set_value(data, field, dt.isoformat()) return except ValueError: pass - return 'not a valid date' + errors[field] = 'not a valid date' def validate_extra_date(key, field, data, optional=False): value = _extract_value(data, field) @@ -113,7 +107,7 @@ def validate_extra_date(key, field, data, optional=False): def validate_extra_date_factory(field, optional=False): return lambda key, data, errors, context: validate_extra_date(key, field, data, optional) -def validate_licenseAttributionByText(data): +def validate_licenseAttributionByText(data, errors): register = model.Package.get_license_register() isByLicense=False for k in data: @@ -133,9 +127,9 @@ def validate_licenseAttributionByText(data): hasAttribution = value != '' break if isByLicense and not hasAttribution: - return 'empty not allowed' + errors['licenseAttributionByText'] = 'empty not allowed' if not isByLicense and hasAttribution: - return 'text not allowed for this license' + errors['licenseAttributionByText'] = 'text not allowed for this license' def known_spatial_uri(key, data, errors, context): value = _extract_value(data, 'spatial_uri') @@ -210,8 +204,6 @@ def tag_string_convert(key, data, errors, context): def get_validators(): return { 'known_spatial_uri': known_spatial_uri, - 'odsh_validate_temporal_start': validate_extra_date_factory('temporal_start'), - '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