From 2207cd128dd1343b8592c28ce6b4a7481673ff25 Mon Sep 17 00:00:00 2001 From: Eniwoke Cornelius Date: Wed, 14 May 2025 16:03:29 +0100 Subject: [PATCH 1/6] Add template and add excel as an option to export --- datacontract/export/exporter.py | 25 +++++++++++++++++------ datacontract/export/exporter_factory.py | 18 +++++++++++++--- datacontract/schemas/orders-example.xlsx | Bin 0 -> 97335 bytes 3 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 datacontract/schemas/orders-example.xlsx diff --git a/datacontract/export/exporter.py b/datacontract/export/exporter.py index f0b9d2f3e..937153b60 100644 --- a/datacontract/export/exporter.py +++ b/datacontract/export/exporter.py @@ -13,7 +13,9 @@ def __init__(self, export_format) -> None: self.export_format = export_format @abstractmethod - def export(self, data_contract, model, server, sql_server_type, export_args) -> dict | str: + def export( + self, data_contract, model, server, sql_server_type, export_args + ) -> dict | str: pass @@ -43,6 +45,7 @@ class ExportFormat(str, Enum): dcs = "dcs" markdown = "markdown" iceberg = "iceberg" + excel = "excel" custom = "custom" @classmethod @@ -54,7 +57,9 @@ def _check_models_for_export( data_contract: DataContractSpecification, model: str, export_format: str ) -> typing.Tuple[str, Model]: if data_contract.models is None: - raise RuntimeError(f"Export to {export_format} requires models in the data contract.") + raise RuntimeError( + f"Export to {export_format} requires models in the data contract." + ) model_names = list(data_contract.models.keys()) @@ -69,18 +74,26 @@ def _check_models_for_export( model_name = model model_value = data_contract.models.get(model_name) if model_value is None: - raise RuntimeError(f"Model {model_name} not found in the data contract. Available models: {model_names}") + raise RuntimeError( + f"Model {model_name} not found in the data contract. Available models: {model_names}" + ) return model_name, model_value -def _determine_sql_server_type(data_contract: DataContractSpecification, sql_server_type: str, server: str = None): +def _determine_sql_server_type( + data_contract: DataContractSpecification, sql_server_type: str, server: str = None +): if sql_server_type == "auto": if data_contract.servers is None or len(data_contract.servers) == 0: - raise RuntimeError("Export with server_type='auto' requires servers in the data contract.") + raise RuntimeError( + "Export with server_type='auto' requires servers in the data contract." + ) if server is None: - server_types = set([server.type for server in data_contract.servers.values()]) + server_types = set( + [server.type for server in data_contract.servers.values()] + ) else: server_types = {data_contract.servers[server].type} diff --git a/datacontract/export/exporter_factory.py b/datacontract/export/exporter_factory.py index 4804f7993..054e50da4 100644 --- a/datacontract/export/exporter_factory.py +++ b/datacontract/export/exporter_factory.py @@ -22,7 +22,9 @@ def create(self, name) -> Exporter: raise ValueError(f"The '{name}' format is not supported.") exporter_class = exporters[name] if type(exporters[name]) is tuple: - exporter_class = load_module_class(module_path=exporters[name][0], class_name=exporters[name][1]) + exporter_class = load_module_class( + module_path=exporters[name][0], class_name=exporters[name][1] + ) if not exporter_class: raise ValueError(f"Module {name} could not be loaded.") return exporter_class(name) @@ -113,6 +115,12 @@ def load_module_class(module_path, class_name): class_name="OdcsV3Exporter", ) +exporter_factory.register_lazy_exporter( + name=ExportFormat.excel, + module_path="datacontract.export.excel_converter", + class_name="ExcelExporter", +) + exporter_factory.register_lazy_exporter( name=ExportFormat.go, module_path="datacontract.export.go_converter", @@ -192,9 +200,13 @@ def load_module_class(module_path, class_name): ) exporter_factory.register_lazy_exporter( - name=ExportFormat.iceberg, module_path="datacontract.export.iceberg_converter", class_name="IcebergExporter" + name=ExportFormat.iceberg, + module_path="datacontract.export.iceberg_converter", + class_name="IcebergExporter", ) exporter_factory.register_lazy_exporter( - name=ExportFormat.custom, module_path="datacontract.export.custom_converter", class_name="CustomExporter" + name=ExportFormat.custom, + module_path="datacontract.export.custom_converter", + class_name="CustomExporter", ) diff --git a/datacontract/schemas/orders-example.xlsx b/datacontract/schemas/orders-example.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2c9c95da3c5eb21f6c0232eee2b32c9d669fe3a2 GIT binary patch literal 97335 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
  • 0Ca$+51+Swz@hXRgLK(>R0Q5VVYCvVaqCh4pOpTR}REP?s9RX6eNY9<7dGw+yg zUV;F_Zz`w?veJr=U-_q(Gqgl_JMX`rzM0}^iDX<9k4(_Ct0xrcyKaIa)Cbffw?gg% zSdz2~3TdHvPKN#jC$^2rgIw;@nV}hX`qK0s^-5Li%+@}0nHczkpIcz`x*ze>H&7d< znwx7^`8j4+7n5s#WQ$xFaPuKt6%cz14li^SnC4}w)ssXEzfJxY!lgRsvN1yKzk>J6 zd&jYzER8@{TjiKM*LME%yIAZhiP%(|%9@(X*BCM0*|&avP(1%c)-JFU8FiVhabux>!_HcO{r^CD70#?suj@gVTPS2TtIaZ8Jjtnl4G1 zJEToAjfSEM0om_FO>c?;dNB>A7d{z+V@r0WYmhg7lypsfhK}yvATJY?i#Xo)_JcPk zBg#n;ItYs47u}f=xMo>OIHhej4Yv~}!5E-QfhEgJArfvaL}GlA7{O%&?B$G*TQAI- z((0}fp-ldCvZ|(3c{ABoDH=!$&5ACN*&R;g(j zg1wXxDSpYsI1BkBfdGc8>ua)C1Sew8eJgp&{9&#oOp}TjkRXwH7iwTBRBkBlI}F8| zFM5DAt<6k3EmF?F_gQo2`6P}T`Z@9-*JAD9K-+hKso84xbjkdotey?rkDyt*xu-RY`j!bmdFkat>k=Z#SeWoEbkD* zXu?JkyKqeCp@IxZPzW+h+r()9Ts+SKjV5Pn&b1Q0L^+@FuRqlXsv;`Q=$Afq4^aWh zABd0m`(pROmB7=wrj^|Hk1gSf!xaq0g&vMzIZ4^;;;I3=Gq&*=kS03HIe(+!q739X zTbZ#a;J45cqU@LDr#TVt=$@hm=?cq$txeK)Mi1qf>FowLxz zIvtv~^p}!9$)o`iLlED(bnH?7)+k3mRg&<+pEW}(o)l>Vq2)J4=x4J1zc6~Oa zyML*zshV)E4ZVfjgN5Og-FaS6v7pZ%Qpb)B$pY}|Ro8{g%31!T@OQRA9pCYUCypip z=nKFRTrYcm7Q{H1+Ws(8PN{w3i?}8sL(&Py=^XYXPZ0Ga%L^Vjddc3m8i zm)d_Ka(R90r#$1{!_Xt9t*v>*ad-4ix7#-L5MEq7wpIWb7+sYBy$v;#^zufe6eQE# zkTLF#nYM6th%X;Fv16QZZ=1V}CdnFG9N5alHq}!5B6F&Lc$%1FuLox}gjIj1-}!oa zE#lGKWHWiIotf%q^OO5Ng|>3D5rayz8(K3Ubvv0~((Xlc(i6}tSUGgE^S54F?I)9f zHu{X#8fRCiHS=@3(ab+hzo=w$_4kHX>|FA{gwIj37biT~r$ms^arnY|VSl%Ju3C`V zig`UR#pt8ONlWz&`4jhX40VpQmF3V<7dTP`>>A%}OB7%YISW5^8CKxZwg{)?Fix|u z$%Ao5f0-=NSt7Qm+itYoQJexw!zf{L)}lX*>vsDw*Xjmw6OHflq}k5EQ|@0dAV*`d zwTJ;b0w?y{bum?mA&h`4FmkUK+hgP_A-m=H7=1ijTr)CuW%7<2FYAi$+=l^lH#>@< z0ivk`6D79YO4rD5X5KW`Y;GW=JFLR6R=3|S_xfq@X|Hd*_mEQ_QX(jd+)~D-kxUT$ zvaN=n<0QtT#R6_l%QL0d_Em#2wF&i19B_8tiS-%3i(&XRxZqcHOl4%VBABkY0Y9>$ zdPQ=BGNNl6F#n*we!ji+76Iwa-C1#GyfF_g~HgEy7CX4bq{lJ2RzjJ7v_ZuT!H zC4Hp-;zp6@b#sPML^?F!vlg7VH^RM(B5?g#W(nI!N(IYDaSTSKp4d>OIk(fR)f||1 zEa0C6i0Xo>*R7x(3L?Iu1x#T0x=iZRQ`nJ`Mf+;(RjK6enrpiyGALY;NYh2;@AZ)QAjm|!P%t?Ej7SVB z+BxjHK0V=yM(n?V{~3p1JcExwD9N2jFFt~(uQ_$jNK_f}C;Gu^g?MjCWw zfV96hW>mG|;(!Zxzph22invM*!$lU5g-WXEDb$l9K+4i~H%1DL35POBr z>Mz-UT8kG5+?mX}?{AWAD&?tVLp9t<<-M5I05Gq8 z(m5X#WvtF$71o4h)Y6%w_!0GFCpuHf4v-59TK74fidAX(*4JOp;v-0iLo9z#|Dvq^ ze1EbTq({ZREE3e+B1pn&(8ZtgovV5aKmy4Zf*mJsU#PGBoO$H*;UR@da{%5Qy7QuS zb2?5=N_|;<@Ss;}B+!RvILhVBLrU{OqInhlw9jzx_Hl>^2KrtLnRx~AAM}_bv|eZ& z4E=ia=|r4*|8uJEr}IBTm(xQixDs;$)a{)gtE1Zrf|oVx#gU`q$39fcZC4+MfsdR~ ze<`kg9PeU)q|gOo5Qh1vnyo+AEyWv{Tfxgey%41;h_^b5x$MM0tbf`P{`ePO#@{En zSD_veU98MRO=k+dKMJQ3$uwd?5S%kp4AK)J1Dz>;{*Y_t{BwZDmT+wMt{JFgJp{L7Q$o)uW49W5<)*`EMe+;b>^_rpVs$$0?< z!SDL(bCsK!{Zu$_)KPhqCpnVQhkMb~dQr)3C7TL-#fnlHK-id2n>%ON#N?cSWx~(k zFYZx)IIvGQE!^@$=`30vL7W_VWm<=DWlqGDX5w6EFJeaA7KAbZ`f`?W;|*fequMro z8BS9rhqeyz2PNe$zS0s$h%KGG&5)3qPhAlj;D&U7MHy-3wHwpGs7~Gcak*R`SxVB! z=>o>x8WY!7?lsh0h#FCrjOsK7Par2 z%x;~f6Z(eXsT<>uEO^12F}^jmxJ|uJ8l0O*MZ9DN*ictU{Hi20Jyh5q$uLd|kAP>a zx7ho2mP&$r18DCed)Jes49)h#lya}Wo#J<4&Z^_a5VT&OfIy@(-QX1c(E58vm95$N zYn?7{>!CKE*(Cm9cuk&ICuYo$cf-5-ZTIC$({93g3wTQcyZPtQ-R`_WP)jyLLA($E zSINyD=>(;_1hGIg_`kU-DyTaDGCD8nFdijYF_Gm|MftVN>kDdlf=AW3y6+#aTMq%f zPf;c{;p|sqrGApF^Ea`>+q-o=fb$%`2@=7Vy7{ZXT4cE8ObyYZl)D*6$>nktI2ygn zZI)dLcuj6;^rz7!r7Id#SVr6cJ{3em-g~8(3yuxfJ#4@EQrCpllRq=xjiZ5T4~FxY zME^|{JLoGNKLz+FV=W~lW2T_djb9kiLRd9#LYDo+{hO!vLp2OrJ@j82KL4gQ9iGZ% z9u1;G;{N*8chIoK&L?B`qz{z^OdrfO&i4E=t1Qw zy*P%Pt>RY+lgtSof9gAbjk%x7U_gTk_SXaNjj!8)`LicqWai#z<%U633BipYmW*Vw zI(ZTP^4Y=Uw&{((7DRaBR~5w9_a(qlGO%=Q%ojhnm+I`N^iltSha4sC9UO!G+~G8e zhog-=G-7enq+`1~iBgQBb9mN|8cvR#i#p)vA#h9XAyEb$l6TgyUs{uVdyxTf0U&b{ za^gLjgD_civD68I;q@*jnV|lb#6iIe0$Kr(?r{3O2z?U9N_bwFo6&3q%k@)J9gNYl zzIqXi`Yf&&+n%!k_W)3@RdZGBnS;kaju1{HP^dptXpCf`kK|3;SEzYO+x z^4`Ff^8j3kc}~#WACv zwJ$g?tMs=CmMpS6!EGu@J2tHy3li6{;U{CN+I!^Ov4=G8q11YR;YB#ZLo|(eaG%&kI(Lf9gNH zdKGen|2_!tEO6pizhv~|N@&(?(oAUCqLe}(oeLS%)ot0~<})_SO33{%r!c8p*KOlo z`aaaFqG1K?Qy>Lcf`L36atzQlX==}^VFT3TGnEihSE7FZD*@1ehYXHfER^d-l_pmSisub!@T-4^HvF$x8&!l_=q?ge1JQtKOZRg1Mk>;I4E`2qjiE*_NG`ToM7be zE`aJC0NH>h$aRY`k#sx1^H0k}=sCrZCH0r0yVfHMgVtU|G3r9^Tg`X7kMsJeqi#F7 zvYPrgYU-rZxe(sMjWvi>RXI}ZdsBM{kBpo52YiWN$~fs{a>ploT{ zsiCHpfu4rw;(8>O3HH&FMr!8$Ck&$5`D@LizQKDDc~XO=I!0GKm8Y5n1V;XCHA5lM zUW4s1?3bz0W8QB;qkr|uP0rZ;`Qj;|0g$8+L3@Z|(36$`y5&3=pi2vC?bv5j*sLJ^ zd-Vof&aC#=>MTMl&>G>}xS13F6J1sYpPO-a?OTUP35QBb zcFDZeqTQ9;g#Cd>P>`+p3sKEmc$pd4cBeazwWSp|(ovKbnkbi=p0zPVvx4o2IUu-v zl!J;P!X`PaWSi}WM6_YQeq0pMWMCZ<)S)1HzpqTn^o*d8$rnrQ$h-XRvu{fsPjD&d zk-=opg#HkL3G@0eu5vFltyM}jW^g+i6dW0; z25#tJH505~pw)Iz&7-3*yRZDXg7yIA-#Qk$u5g3$(W_K2>uIC)8#&s%_4C*~izNv=floA3g5kX$_BR1!j%;T!6qxa)_Cr0sQ#{Ow;Wj$G|^StxBU7v22*9WrkR6I=SJ%QRr>S$*>Pwk!A zyM?PJ=JrC@)m)@{yRDEpJfs&HsmBwSmy|V;r7jxF#5mnX;QZ0BHk@lhFt82> zDzacL?5)9z)Mbv=kXF8nk(HVInwwo=LQgA`kv{tB>vQR%9*;*X`?%J!_xbgez(?|Chk=rR$xF zP(hD2Y_t^YF~;98e%N|16is)f{8#Jn4{E%2J!N$V6E@NkJVtLo@+7Ycb;{15pR0?w60>nDC&B&(QGwOf0$uj&y80)g_1Y}U-H34}!XFWo z*H%hR0SONsVv!7KF%UPo+NW=uMXYKVEZW$-*KVCcX{WTdqD!s0*{~rdRM0z-{=id^ zjaMmqBi$>xa<|OT#E-Sz_)B5TTb@05Pl|Jib0k3sMENwpr_oNuY7V>qix6dlhFaj9 z-IFLo{okeU*5nrf{V2agzXBi=(E#xA)l_gRCiQZrm(D?opw11op7~)o-(hc zA#Q#|?*phqO@dBd!zm^E-12ISYi{_LqP%m6xBK%#ED55BWFj=hf#Rl^{mE4&=LQqk z#{B=PA-QLAkC`wG*WkGs39->g0xIhO`!gyj;+5E;sY2GHQ?KdWg-XR{!dBA!{SC(J z3Vj#f(Uf?;9eb;I4i)_jIjt;J;QcGP3L1Y~a9?S_JO zSZ)9hp(!pk##t>)HEVq32hBLu6v++=NSB;8_JNeyh>ZL0_S|rf6_Z@HqRS`%g91f0 z9GZ?1ls{Tx;^qXw|J|&ZKI>Nc+gNc2TNLQXYR8cV<6K77wKmt38~tR=xB~C)sU>yV zVTk)~JuPKY>7yZ#`a|ex7j=1px`54fX`WHk`w#Ry@lt2b!Nm$860dC3Pl~t^2^-Pj zIU#7kGu@;~p1&Y;EqS)Meae}iq(ywQXsl2)imwm0RNnF#lvor2-h{+eZIaMD#9PWo zOlHozf`WB*paGH$sN8o?IPH!W-q_6=+y|Z5Q-J|o6+jJdp0(o#FSs2*DqhgZ5ls^> z?Z%M){U*sgMp(nQZ|Oe!Xpv#&QnC}EJqwx}tT2NFFG2X_|)txjjM@vbj8_Uf1 zoCoU+N&)oZzG)-cbsLJy!8;-xA3;LqoYLY`V!F~L4mb!)4(C5TI=HJ5!PV|KV0vCa zauetvymC^Dw;N2rp5QVR^#2GB-92=N9qC_EB%#rsOD_1Yq8xL3(nAvqHCd0BqZ*f# zMBU`2QqRMTRf(jcxJsv~G&dhk4uiUFl7B@R5k*Il7Oiy91oF4lro=lV_(YB~fo)O%D(kD@pbo{KFa_H|w2}xPJh_Vq$z9{)# zCsRyc#uLg^lqiZ`mAFv@dgRc>qed&4)}vzM5Te-v7Z_tqD0bF#U2NW`#%LxS?EyMg||Cc_Da9A#E36`iNH zRCtmcJ@?MVeuX}>z(OT0bG96`(%of2-aC!697WNqvX|Zj1v=^!(?N%3p)?+syrd+c zL%r^3Y=TrE*;!*DL*2Q?&;pzsdY_|p*c0_#e1DECrYSLL$d53G8YE$GQ@}ohpetqE z;MD%>D@wwU%WDM#b({|-W&+~4QV7DV;Ax^{kK4F_DOMm$2j&pd`2_}%cS-Zmf}`Ju z^skS>d3LJm5`-P)0}ACxlv~Oh+HIjM`2M;c8N<4)6=|#2{CoQ3J+f$f6G9tc1=juk z7@7^5k_-0WipZY7kBD;AcqX! ze&mYN96)4@6#LN9CE=;4kAI9no^VNroQ)M^Qd0joqbWWsi3TErOa9g!5jG{A3`~Hi z7SbfQ&UDh%cupjL50{TWtLHQwx+W7wFqWPApDJlp(Lx_PxSd;*{(Z@K$sM=8Y@4uxeqm@q+8*|&)A<9zhZ06adJT0*Yd61j9)BIti@1rSXa&P4s*Uk z7R9a^VR`6$g)5+D0(@iSi3|WQrr}-DmDdT`xG>Z;c9E%aUS3wO%$bj>z6YL6JBSdI zQjEl*rnI{T_WOMlsc~M9BNOChZP^GaHC6yR7E_!^D&xZvim)3kK0Y(D#jC4{n`yUQ zV6R;RJnd<1js~k$y@O8pA7TKK$*v0A%ZqitUAiN}Jp`LH{!+zz4v*j9W#QSu$pLs2 zEK{)0iDK9KzQ*&q>o&fZb$tL#?$ddowTH8j8C%+oN4O=!zO9ZvjQtU&@mv0#iJmMJ zR2vZB$P3z(IIaDm#0P}L4YF&zeTYJ|x>$4F@_4btem-eht z(sls_J~a5@pxi$c_=08hy!>B{U-|)GeDeSwkmh~ovhe5Oiy#=#W;Zy1A*c0srxQlO zgX#gI#4u@!Xw)9z+Kh`ZgCFb>AQ=`8eaQgh^Bqecv4rT<(Y=1MTb5oau{|oh536#r z@BbbsOxvN1P(_y@)jPG0UJ+X>_=hKm^bI~I85JM)5KHPNwMEWuQ8RGLwU;$#5>0u6 z888eiH#)CbQb~e>e8a&v@w&QXIR?45pB@q#{I0)5`zWCuS)w+Bhu<(0mpW2xG~nZ` zEOZ)&njkDx*REm7?Bna+1T6kdpy9&}F04Z%Rt%9_3(vE5WFvMX8y?w2l5d#zEyRE` zCKiXd+Nk!qkA^y<5zhjPvkF27>n7xnU-`-?Kt{mz{ux>t|_bo9}h z8xj{*WUW`D5NoS?7!+gaCE`&PBvb*dJCNYm(+4~8pT;|Z3hn;9AsTn&Acrp)Mn4>@ zHxcq%FG2;|+8@8ayCVm#A(+q(kB_EO9a{#2?Sp}QYDthoTVc^*QD5iR9%``mDbfo> zNI4sxdPa(W(6;N%@u)$UNr$>Z>ly+NOyoDA#lkGZB0TXUAdm*sf^#|HC-CdIs)P`B zYq#!Qct-`G^mR)5;Q@4nE`FPHY?Jy1nAqGxBtKmI)e9@KIra54RD>h0JfW=6>F0X7 zupXbGz=N1+6P~Tz(GcwjU|)l|U;_9I*6s{@gu;54MWqAEHbfaV0;HZeF#fI5QC8Qk z>c(c9|E`w|vq3AH$o+J3mp|C$OgGS`az-Z%%?mslto=Ga){aAIc~gi{W0vsuLfyFy z+Ky}JCx;43>di;hg1#%Jb7^>DC_yh4ESb(D&2n$4MQ>QU1`?#TMmIsZh28han|8`2 z9x7Zd^-bmH;=ut*2Tvh`LWPzp=C%)oKKKog^2vx2c}_Y{akREtZ<1&wM(V4kijosFXh0(Z&pbf6I}vKI zOUIX(OKW5HY9;0T0|)Uu7P}8-;)zPdF;9~$&CE&paAX@H(_hI{b+fD#^32xG_9{Hhzla4^mA zmjFYbQo_Xlqv@QZ+!*!IM>lg374+iaXPHXEDo^!cs#&#bJK znSAHYz31$^Kl>cZv?6ufy#Y4u>;*i~<7&`)3#$B=p~r{aeN(0-g97*w`zK9Xub(f; z!GV8xFu_SPp+u)ZS4k8fZZrg5-fHu^w#bW1nm+^$loMUTrMa^^@wxyD+RR zwt{OocxQomZ8T{Fptg9miDl5q^!}S%uTPOB+fYyGJ z$!Ugm8PmCe*#R-Z>}W8H6_izP@t5B{ zr2B5aunwX$sN_Kdp7;L9&|AJUYU(cZK!U>!>o|F3X7658l#C}zCk!~Ljt+F`t8`wi zc(zdp=t~<`eI58lMUS4ut2VP!J2)%p@e4mmYnK6>-n-KSkBXg16-`H4LL5$yIZ{3Q zEb0^%(zqL?7g#LJLyhsVBnH+{S?&74)|3cf%^ulp!2gc_B!q{<`iiVzR zKlXk*!yJ%y!}+486qy-!ARQ(;AtE;Qr8kzt==kGWWvpa%_b7j|r5+;2$RHS?qVA^t z`T8u@{@aNa4YWwEP_g^Pw0CwLsTS`=!HONWd6nHwR>2Fe)qIA9KR}*7A!VLVV>7iO z>Q>1H^%xK4Nje$nzj>O_g;xSG6bwrWHg?upRI|GYmnd>!JJgBJ+i24w@KVSE9&Jy8 zF~IAiS3kKINx)q+7@1(lLwzcF3ryf{qVw)AmsVJ>aQ#;>}#%X2)s zi4t56;YXc=4g-DQJ)T?8{y}LV*2ney^)8+%iyqk}I#eCwY1e(sfqRFzf!Lx;h)DWk z>G#I-luZ^)88St{9S}@Yh+Mdw2xd?3wAoi)WwT;!^^VAlGe5Vz?fy^V`~~5$jI0+V zQDNbEIC!UlobDgDH{;lf?JopE`M(l)$Ovw#-oDIO)Zwhx>jiPJHFz{iUBQ(>dTEBi zq9Smfvzts#Pd|MJ*(PtuzHNHN%7q_fn_yY;QlcI%E`5odaW z23%IsJAfqS-H6`J)aI*g(7EZ0rBtGLcmN-)JY|x=F4f5ENg~62MEd)eLY^`GRlPxb zsqIXC_0&Xj{NvONFDSttzp%6lAbCW6fa#xz z)&M3eXJkeGs0^uujcjzK;ZL+4QW=ht>1%y+xf$0{(pKr#Hvf{z>#1BIt!^!by|;y1 z_2D+fPmaA_R@(>o`A5u~#fRVk`82A*+Hak=dspd-fnU_9Xp`$sG{{3zwug>yR>-TfhSN;PlfQ>oZADCKFGX%+qf-col$z zh?IFSkEE7K;;A|2;o2vt23NI#!ElTL_V4y)ETEy8Dr`!fFwCpg4$OpBTs4DvsK;2~ zeX^st=U9{qNcv`^2QQHmtgo&ssoI&t*?eta;GNstCLOiZ$;!9vNF9bw@+SMIL2ach zq_x4*g3?Cn7QBPy~`+fzJ_7w$@zHnqoT#apr z)B9jb!>5u~rXxw}|Jr4LD7hCHD7n}ONI6pxz;PrPRr?XByE0lzp+Q@V3$SW9e@7qu z8@ximtvMKuS_gn&$xfu0uDO?WBBYXFwzQPbL!7k{M6*F^*$l1**P9H$WiI0XYk?Sh zhh=G^vaz?G)Cl?5@52T&)#@B>3EIzETGFHYv{laAda8{O1uGxkE8DsY=JC>&{5~0c z$)WVa15lBq1G4nCFg-SF^3zT`p?f4p8z^cDOKFNRw5DLzIw%nbpOFtc5U?S*j$>YW8{ zZc(UjeNUtG9}R_`6LEV3a_l(CF|_TN`8!?_a-S4t%IvWVvp)dFyI;N|Zd!Bx%BG34 zM(mI6+uJ3iMkYHE2MhwiEQ8Z21gV}SJ5hpny@ug!RAPT9$z7@JqhCbJJR0(up||~t z;Z*v(exYXQC~eHdiKK&X(og(AjynlAR4W&QKj5T2A~WD=L>-P z)uyWGf?r;0%SoHL4~NjBmuuD3Q^>j?!+QozcKeS9srLEUgzfl7ILPfWU)h^0S80fu zxC8=MYAA*XFj)&u=aRSe#C~3N8ql?!NO_C^5V1ZNCgaM1>Y$7qo^+!1KfuX^qD^>H~5_3+HUv_%+YsqQXdF~ zXG2n%#Nk1+`8LT}FZs<8Pa$Z~e(^x0$2WoIS#u3in6XTo9f$_UtF7=%bL0JTMuni! z7%;bji%y2e^cL=?%k*u3eIKcFzg^PaS8+y5ad3EvZbH%ShvXCJa`>)jacB)d{KWpW zQA4LmW&PO=1fzpp?;us){3<<248Dv9G{LTk5uO}OKy|=|U{QvLKEhYN*ths@@!~Ab zh*0QoP|8~H)-Yy$(Kx6G`0<Uz4fz*LP8%pZsNk2TpZtAAdK%80OI*hTc#=FIa z85S;11B1cftE;_HSH;;Ru30iDhL`|UQfy>{sTHq@rME^7KR&<_UvOP{xi7on7wuU^ zSdhQrI0)>>>|5<)*FU}H>&!yPk9_4P&9~08!a2D*TgItA{DM=nuY1|i2+rv2UG{yi zUJ2m)5fr4xR!~=}-L-Z{yZ5Qsb36SRFIQX$dO$OwVZ=A-h9?Xo(cWJGz_lvRf{)ce zO&Wy7iFO9}CvL_q_Z9x7Z=TsgRi6rr)nb)~#aQLd)D+DJc+!*FQ@TwF!C)3D3oQ7x zVzvL8)jlBy?7J_>_e`pe6^7MmLJW471~MYKhzH!>ep7nU`$r!9PWYi-v|u_X3cNKw zv%Typys=D*5y{PBeHX$F{tT!xM|==6Ug$RglvPHCpo?Zu!((L$HiA4335cJ$tGyWh z|K6#CTQq~*%0bZ;dV@=L=jlUCnXV&Wr~l`LCJZSk&T9Pch9UP;|5q*{EWH`V;lyly zBnydsIPf!2Dnl&@)?Lui`uZq+I3CaHlmkymrO|4cE~6&eO8`}8uz&vYRi~VHz2~5v z!+ujdVuIU|X2^Em0{C?uRP)n%K-9nrYk5P|zbNplqzcjp3vo|wYnl4txM~HBvih5ASN1>$h zEUE+S<}r9)D?MMZzx{?IlAwTJO`^f1MC*8?FnLxjh!-bYM;+5Qp^bdO`2-exq%5F| zjgn%?#FNT6qz;C>r0vy82U+r?EeoXUn{;8eA{>hF>%1ec_Pj@D{vbSZAZ$e6_LU^2 zC*G~l^?zp9O#N+J{}&~%Rl)I%M2o~d3{kWNN#Mj986x`=a1W0c-G4>`wrO_3@8lC= z#*>sPa_e_7zey0Y2#vsUB^0Ff*S=&|vQb0J4z8Z%-Ye!&?J)nmtFwnfMx;8o)7S!iPv~bm10_{>^7~3K&kn9KP5+pN7S_b6fPf{ z;!A*3!HJi77E>T=D^yaLE)qpqlp??!RG2Zyn1XlKi*Y7lni|;l`cs*4l7eWD!hAsM z9}=kg8+Vhvz|aEuL69$Y+ZYP?-L!A}q^X0Ro7iV|)3O_>gR+8mJZw!b=}8u4uNFIh zyhld<+0yo>=soCK+at>t3lkGr^=3%Xp^mzeSBiZXzwcm!ik{8A-5|5k-sI+Ya(LX(#H` zP{vR%j;DA)j6B=#y5b$uuKgoFjGSK;g{4N%q0@nQXcHyja@P10d2y|RoE*^LT6PBR zBy%Q2AFqL1C+wh&e-H!Q&!>QSC&I&tBXJpYdI-u;bW0B#U(!@=egzq#zCh*?Mxax$ zkKvvZveP$~ZRk7@_YIh-^jmsU-1PE4ao`0fkbLvQU-kwpl8#O>NRHBlt^;mI5-3QZ zY+}HogU?Jb-}0(cl<9GvO0@c&*~SjNa2dKiC<(B8tiM-y3>iy`Z+?Yx@|BPRP<2JV zzL#CBkf6BSYJC_Kc7ts5?bc#P)xiO0g1}SdpQ>;3OL*uYZ-xUggtUy;cX7%5{QH?` zNzM^1fxPIx3zbmEI#u8R^h(aI4I50y$QY9rpOZlF?%Sp42W&*l+*ey!9v3*gU|12e zRSa`f)9-(ZntMz*@v)ej&TVCb+Q0(MYbgXLv;#+C+bv!r{h$g#7L0Mb#z_`jE;=#+ zqE{Up<#*n~*;wZH_Kkxqk94DT6{9)~Yk4p`>+ia6cBS)oi~WEyZ=&{(tILggZ{wR$ z*3nnIT`v{@m}oBt)RPIMn(CkK^$wFJE3)s#+4HqDDBg=qgSWxCrLeoyD~cWwemXc; zM(>N8I4wjT5kma1fy`@MJ}%O8;ZXA7HxE|OkiWk0qi=Lx^1nC1LhO^i*=6_33s}XG zlGDP0ACZAU?rQxjtNus~WOomZutjL~;@?pFXPF05S zZ0!-muNgkT{xr1tkXosL6`pP_3c?UBjjaJTm4h*F#Z;K(82_sdECp0diCi5c4sbe= zOfb;f!czL!6U(D+kVznBlna&n(-vXIOZ|U$9@E2?iPMRPeoaU4!-y6QybGvo;bQ*e ztG8Pimjx(?n|*%wsX>&-n&_ z9p>nwYWzRF9j|#@n_PZoKW{X+kLCFMhy$7RxP5%2RhM2uhaP8YVXfV%c5Xi% zJhj-}L`&Y1n6a)V*S>pfU<7j|Lb4!8;l`Q!*FU*Q1b~9*4P|R3vY&*QjEcdMIKDq&617;?O-Nt5|(k>ul+!Hbgr{dp$ z2QeZVqfx~Qi~KvHAWi`TRa)VSV%-#C%TDLe+~NZn4anYZyPb*<BLGf!WX7fjZ`iWzDq}oZo@v52?Rnn;nHIaRu(thBS1a zlz&O9y^>+d4=rPCNgklJ*Lu(4!<#YWKhp3ym-|Qi>d&$~+HKbA zG_}h^nKVegdQg&&hZ&6=Rp+^^^uo>97Q&r^ylUxr!I9htTUVCac{T3jDp#(BwnycU z1UgaWEkCyqPJzHfnVX5W?i0?|(hY+|+3>&Bown!yJm^$0kiRHFCnqF`eyPKEaQ;^_ zq#2zZ))y<1w{@f-aN&I8JJc(Z4~r%wh{a|j?g#QHCTb%`52^$;=&w7-q(a02e?db; zqT-m*SA|#rqQ-Uz9EZqwT&Pxp)tDDV%$}P_*Rvti#%H|AqbN*v z0Q!)gyv1&;WEh*)cIur+dX~;eHZQ z-V`Ucpt+5^L-Ub7P--yNw`-sh?rmF+fSel_4urG2BiZ2~Ol_oT(H`KY_uGoxHJ-p%s zV8zA43ZLDe`d8eiZ5bOpOS6HN!*7It2%-o&<#%QG=#34zh9`YZYkx;a-<+PegC`b_ zl&IvzS{kF&;>x;lPrhg|x(KsVhxD1ZwIRv_?fcEwif8TODbO(%==CwLeX`OfJg(kV z1I2Z~4PsgN&t`MZQ zDx&dYhADE^Aq;i%T0n@3 zx5169>}Vz6EhPj~RltNQnMEy`D=zKQ#_H9F8ZTF|6`{Ho5)X(LosdEK{pz<)ZQXCA ze>|}`NyT1P^tqN#qLf8Xuh!dFEH_$S+uEG&(~K92(}Y z7%K!1yx0~g6h+9=yjck4sG;+ixXNLxQZKlaSPTJuKepw|!%A;lCE#i^IuEB&%!*_; z3_`&`j|JJIruNAdh^rV?*LG-;{tk`Gl)kp|^i0mbqC2j10zDS%;AGLS&}&PD7upqY z5I+H!$+7%ORGqv>uh~+Je~FsTQ4U^MkP;%UxiRgehl_!*D&gd`dF*U1(~hYUEQ%ZG z%RzfFs3__adaWO<0HxW|6m<|%yYUc+u}G0~_YW@w{F?kHIQ&YTZD4{~MGT=7l z{O8n!(O7)V5|lTPXP)ZC?&M_`va`wj=VM`02+(WrG2-RFI&+td%PDoVYvPfW%kftl zVdm%SDL(y0ed{^Ma~qf`_XZgeh4<7oU?wkB3sMfjF^=wX=DI%R+8Q$lJ8=C`GP+%%e7zQqO!%Rd?NB+&;&6J}GKH*_Pw z{B|B-b@5eN&A_&5A|XY^BZ6UU=1g>QSbSUIrG8_}@6AH9Z7uSL`aeI&#kD@T(l*xB zK9QLOo-KKjaUMDP{i9o7UT(A363p7DLeQ5;(5Io&8>Nbw&U?EhHCvokVk*Z|^wwx{ zRPgyQ7tbUW(fco3z`N5%2vKZ-y=cG+00fS1qSDxhYcO*PYg=@}posoaRiRlXwR|4a zW?gLf{Ku4>q@{bIIfc}U%Z~C0T47Y%qXmfVA~7g>wtsU!e*PyE%CxrPfHtQ>+*eX7 z3>XUP5+4Y1a@I&YSk567RM)P-cW+4Vi?#987Q%%9#pBSgnp^!1lyP^s!#1sU;t}yD zfL=Kd`c5FqAer=tB1L^8GD=_IuiuWMM%y|F0!l$lC1GfboxP23^TPvXp1f4s^Tq%w zesHtOvjA_fT$5{mS)RAw$(-)SVlaH`|CXdmED!ojo@DE81x?3$Ew6ZQ(cLJoMfbTiy)=Gc=qq>6Kp?S22iA-j?&g8kUUJ{GxbD-7o8B zpf*Iu?yAdYw>id^#*Bmh3XXST5eozazV;}8G`pxy*KUJfb3S-hLY6jq>$I=;NYa=;^|xe0ndVs1#-xs z7z$A&$Ov=}>$-Ydn?ZvRZR()&iho5s*@YNVjA(!*2ni2=Pdo|&4=IQisCnfnEI7Lw)xJ3karC<_*IY1Zv02`yAUfYQkwQ>r_$T27)kWX_$%u^V zoM!TCo7@J>Z)DY^=vi_QkA0W^%K@|lPFDAvmecpM*oTRGs2i9)zkin^-OcS~+sXX# zbNRW4*8p(f9)2|cl+FV4s~!`5*#^~=t&U3b!|gIoVDj+?{yQtZQv6SREkXlXQ5vYW;jMUIqsPzxUp%GJKQ zx{qEgLjWKOFMJ7Np)gG1`J{B>KIt;!*&SvLFafpjH?kg{dHt;xxFZoXBlzGiCO^dW z;b8Lk$|{X7LsPE4SNXl!b`mwhj(w#rko=inzKd1tiXv+lu2pa$Pbe=27Aj%kwq-S9 zh4#}#Yn$-SdUkFZ&bO{`rtse}H7J$_LOX9Mc)`8J8`O6D;yeby!IP~6(jLFaJS=H~ zI2U?kf(Qu$RFYt2@=>G?x)xK6>sW!JSbY%>XlqE~oIk%Cj|F2W%CjN>93V$_!IF_* zZb7*B&Q8ccJhC1MiQJbM#6@8`T{KH5 z9^oMN=Ywz12p6U6{XAy&VEk+VGYF03J{o--i`{+uuAsAE)`Y@o3v$#Ndxjo82O+|s z)+KNA2NLlCBUAlCk#P7)cyGophKk=S72TjLm%nrg5$LlZBS-keNfh3ajHm!f+OWezzU!{mR=|5`gg9h zabMRMX^0|Rz#v%cIPgK2|3Bz-oWZ=;e8pED92W?DR;ByWklJV+T|{0)2Qlrr5>aNG zu_16TRp1Oy6gVY%brTaf639R+wMg1^*3R1anJJsgx3ZK;yikpm>}Tl5W8)CCfRCirR~J@_w2+r7Q=rpK?QMzZBa%G zF>xbnsjDWMSV0YS)locf0w~+T*N}Rn+~XYY(`@NV@+Hp|L0+I#aVtK&7X3;iwFE=w z_T3~cNv9Jn7ir|ux%x}DtTu1Uzk}dMA8jHin`wiaL_<-##w(J{O35}m2CPJP=31%6 zfZy?q+;)0tf%i{>$Z^0g2Ih2c@t}Cg!Xhzj3?C>_6REG&19hx#V8HN&4IXq2&K-D> zc5>?h_yMqPzZm_txD2vWhhk(6n$yk1hi)TPwIFkEK0eakU;I-7lRlQNd`d=)0RhS@ zgYCoh2fE@Bp7u_R@(Rbn8Qa7O@Yn2x+RSw6>^veKTD@W}ohkz1HSegs0{cDr${v40 zYB#&r{N_58OxXaoJckt{mkXT>5V$lr1J16S|TxAkXzcgmo1gbhW&_Al& z{_`QAQf){Kr@C{SxJSd9n5$KUTpa(ProlXTXdjOB)TIGMW_%JLs1eQ0Epz!oz0wdo zQMCjva^RCXyKcVoW_ug;Hvp29`2c~60KkKrwQ`2?-Jf$JZs+5LsP4=F&}l;zP?K`d zAC%arp75duG`9<6^=Q@Po4q@`qGQvH6RNHJ#H2FJ1KEAqg*vDoPr-WYeTUeMzY2t< z5!-ILfH7J40daQms&0B@qY!!DBX3$6su$*#k$o4Ge1!i`sks zU2zDlXXZc27B}ArM1{&3BMQZg(Y_-`gRNL`gsh;Uli8nEtP=AoaF!m6!Q>A~IsMNU zNYpFlUZf#0gn;)p-hY0dj!>7Uj z`HNeOXovf>hFbSkuZdVyn2Ym8nBNmtuhM-S7PQIp{(g0$y@?0<#D4N_yEGkr8Qp$d zqrddNftp6&(Vrh}s}Qx*7W*-Jt>BMDI>S2q*yw;lDk_^EQ@*A1k(#S2^v{q5kn=}o zjx`lLL1%m<2>{H8$-ZuO(pq1BEC}kZiK(#x7`YUGczAHgWeq|14@?7w8vBBuj3@}0 z4)x2k)t%RHu!9At9P8OibLbFe;P){fVj@soW8nf>5OPXf?G39)KB@hzaYiTt7Woh! z@I4gd?l7%)%3fbfO1vwt=YC`6E~{Y|d;@{tiYs&2n0w#zBbtU25JeGUM&{Trg+)@k z`~w{w>q7?TlrRSoP&NIqC|Pp13LAS^%V!aQyWKQRy}ORV zUO|tw2slwcEQ?#{{;E|1^^(w2MwiCXoZIcy$ECU<)*^r-|kK!98dXH1f1WWHr?7IprxIXy@qVFYGm%3z%J^N@jJt z3$JWy#e<*mtYy#0g|P;p8};wJjDMef@u^)Ffzw0(D$Tv9N0Ie~sb00$(jGd;6QXoE zCc1C^f>-1Ey%f(GlZYRl8XrN_ss9QL5wO*LaRcL7U9>~B1mbx+jD#Gj!|P0}MDeIY z(AfFW5GTtn|5?edLDiN5Iax*Zt}WhwDR)3nZW>RXm#krX!&$(E*3t{{C<%vS^g=yS zgyFNTfQ=HX3gWzuS%@W{?5RHWM6T=A7tm3fwpr92E|0??3%;OhuOD6+PYfxAMCd3H zz&-^-8Y*|G(dww-OU&+3W?dJOXUDueB4u!S@3HSBCB^sUR{k^Vs(#jAm&EFAAIvWW`>f2INPl%`%(IcoB!1w6&9qx+_$> z8E!}-ZDx*CQKbzW;5qPQB^F3Xk*;o$U`Dof*;zh^>E2ydD7lK9G>zhQc2`=v#G?Kt z2EQ;tHwqtB)_2>UGxD=kF47owBp4Y7Szjh58*qQ3M3d`{)QOTjFrIf_ZCf(xVSjkM zV~9l2QyrLNYxO$2<_{gXM0>y^#4RKWrybCDem%T#>VN=G+aBlhU)6~>!nrg)Sb1#_ zAezww`Ojg|J2o-hQuM-`@;L0rTKaA`Y5gC;*SyasitJg z4+2pgV$CDQr`38=Zpt5}79L6m^q&{RWIpT0Jk+MY1Hq^eGy8}26ZC9B6UB#izl_#` zB1{gE#tkpG#&8?22~8|#d5MFMULp7^jV)KlNTLUhHE<@GMY^}QddJ6MALG#tPk3-qRa4(V za2ilSMT-U8W~CmaDYC?Zt6cmOP&>pV^KJ<$Er@sJUz&vW!^Z;w+e4h+^GsSnpmL1n z9q!Ua&3bgoNCj*daxhx&rF@bI4ei4uDNqhIf7fZlNdpIK5-*yxePr8&><0K1)ZI?! zX-4Hg{)ztrG63NL+xwq|O+n2#TXbI!+2r%>XHKz_B+1V&q0usNbs|#!WvNvvk9wRz zahjPl(5j(xRQ|vJ|(C&vDt7IMu7jvPV06N|hbWAHOuQVS{rv!SnA4 zd}F{V*u(?<6a3@_1MaRz2@7xYL+_M5aTZ1U{0)tO5DFq!MZ4^i9dKDjG0`)GBfA2@^% zfP5k>gE)J=mgbhVaj~+)q6Qp9~fP>xGY) zQHX8qMF)J544tV1k5cqA8UC>kvP{!KeSV-@HW~CPCWWEaNZ5IzkUGH%5BoOAFN-7# zG&U8~1fa7Hpl+YPPYc=d8Zbj+ zQrWct5MxmxQ8*M}NJWR2xB$=yEiKK$#YZIN_o^!4UeUQ65!j^06cDEkURH)DC^7px z7Jtl9e-ONX2z}rZm5_6~mD*v8f${#N)yBNrt`C~?PmAl|K2536T`WgQ7LHNg)~$Xo z-+Dv~Fexp^&R-M+{;t$z)VuSwHG54xmm7nD{$nJ_h0CwW);HgSgpj%9{~G68QDYaG z!f=221w5mH7h&X$tnIAQg$o;`3on315QRg<7SVIM6f>nt1>_}BP%be|J073a!!r``$3-O$U ztYlX)J&gAt6kCbI+{t%nZTouJTwZcON=}a_O9+H95Jz;kD}G5mn97@>0AWuV>+7(g z+t`y^er%oxe{03VA#1;A@#RjOQ!zb>|3RY?UGVxrrQNW-vj>7oBo8{g`f10lK@c4T z3+EBc@V4+6ZZrf3Kli~~$pW}lCH4`cve9rTQMJuXZSS_VSVk+bm3bbc$pn@;wq`hW zT3HyJrR)$QQHFW9zH3=0qNDNycSM!(A`#acw zJa!~)QFq;|JNk-oHai8Mw7R|%O2h8tlcT&T=6OqgMH|1Qs?PR&2IbqSc;=xLdF@nW zTm}q7$$u>&DS8_VTt0So0c@}OVJ0ya5<1QphJ>h#dMDFUpy9*2-pGg z3;DwBTz#ji*sUhe|8{Sb@@!iGr0TcKQ-mFPUks6BAr{z#N+foc7Hq9 z?@Jr;=B2?;<{FW&)qz74hV2YJcjd88gfQPXL4J_yi?%hexf-&FgvdW);r$EP2I^!V zKL)qUhgM9WP&k5`lfGAAK=%!$Bxz19`Q8TNaZ*l!hz)~cnq4{%1ic)f-kS?r8UrXu zg-FyZy*;Psb{kC_(1#EEWWmR;4BfuP&NY3lsQ%MN>OajeopFnFqQ zM$#p~DZCJ-%(|#C%$)rOGF9Q6@U&_fR!(O5 zM}z+$7aF4FB!w|HktQUxb>E-YnI-`S*171-@0NUbjVKd*#LdLOPe8;5O#t)7@C)Cg zuI{cDATm|d;q|tSZ^;w!4AK1^n#N*J^mn8hx?Ry%Ag6nNSrH%&H+Jhl*EDaXnBJ$<^L$&XSDu-NExK4J$80k@=y9Y7uI4a8j|5 z{En~kaU06_A_po;()Cz~R#`GC7hgv^%;*Y;-%Wqt!({re+01H5TU;Pyi90KgkW@f; zazYZXFJ*MHkKjpr_!0^AF?`{^PT}2G(GSGJ?`t_sxk_0<@bv#w^H7gdCzGihy~^oq zwcZ1u)|HO{U2f;!$;tt_(QlkRuhec!1Mu~GIbu@o00w++dxoTMxZ)SQ+XkK}xe=Bs zL^~l?m5db@N&lY(VDY6HUXk%2XtCpQcf_ZydKL?@GFWWBfI)1wa(uPB|F$k?Gtv-W zH8>azl|dVyM$LV@_b8&Pphu^Aha+p(gLc2SePlUM;sl z$Naz)1oJPC1!7cp0~P*`AqL-tY#vUCz*p7*20WV)9NzRP*;f^I&CkUC3syv;kmwHB zI0PN9ve${}b_n}H&`n@Y)S^9g0Yg7=GzW~vzWPg&Cg?XQZ_Mfg?9CEM4MONiX?EBl)%FDgHH*ww|BU?+%& zBZ0gpFh8I-O-oqI3RsIRmZIYiPTSBt|Psw1IdQ2sm?d6@@mKXG@{=>;bQfXE9J5uE_ zzvqE%Qn$S(E6`YlD;3F&L4UwW9t&lP4xAVcw40rkU7wN1;j+{oP zhk;fcI#B=g?O^9Ee8I6)vAN2J3pE;)mI-6!Vt7iqvg~4xlSbeSkCIucr&)t<)cH~~ zQ~h%Rbk*TQfIhw&e}+ImS||epr29pDE&OZOwxHw#)*XVtbh@wfMBW}Snq7Lobl7{w z(pkN);{jeTk^SlMlSt6_qO5fMDMql#afb6+p50o=aV~T9tg6acPx%egU9@+cO;?sn zr~QxW&5ArOs6a>34x7lhHFD?sTUR^YHM-Sd0g{kZi@8c_GT##lXp*j&I2iN!4+Ae) z;1BA@9dB>UN}wU`V?O)~FhhI?PP_ts2EvH;s^EcCRoz3Kva72ej)I`~N!v%FM5Te=L+ zzYJwKOkk$nUzc$-qw50C;*>CF6|AirUfLwh8AFKQwttIZ@hKzX)L zFDo2*$a^v|u$j9w{?ocGUc{v;@AG96`IZe`kV(&yz}COQ2-T7h7s;Y-k!woRIP z);b1%4!63SX_WQ!tec`fHLZW{>~G6W z^`6-mq`P|vm2wkua>N66n9FWVyZyt65&X)MN)e2%#+buoHQ zl~G7o6r&jF;}~XvV6*g=lM6gT^(jz$LWjs~7;YL(Pz?{$UCh9ak|k`}8{BWpDE_6J%RU z{BH7^dxdL2NN~v_RfDMYgqEK zZvjpjVi0spQk=28us@E#nFq+%wsM~za#MqmUq4!x>81ykX#B_Nr+jNW&3E&ZXexMT zp_`MbH~dW_qc!tMZR9*HXeYsDmcFGY8Y7YN_Nd=69YqAEpy%RuNPgv+2eRmQl6~Wo zPDnvG*u56@zJAzjevotVhKXYoYH?qQM=>LLO84+|M;fswR;VQ)#=cpNoXey(A>g|) z^z{jftmi}OY$pwf0nVIK!P}3JZ2LpfNamlz{N2iv8y|C<_hc0M($_TmeI!E3ZtKNA z@%L0Fn6Cs6#d2DjVii4oxe#*%2VMkQyWQ~Z6}sW!QOXE5j|=x<>uPLCTe%fD?)kVh z#78^1*!&>z*7mT=~g$Dmf;V=ij@d0^#6QOS<2_icf{)kuj_ld`fl*u%&z zemGAi`Isf8-1m&dCG|2$#W!D(<`_s2gS@*%is5^+Uvphq(hW=?nI@Nqz-i7c5J`tB zomLUJ@4u|lZWm(ayk(=8R5WBCX*iBZV&Kuof$ zTR+@T@G34K)asXe(B!@r@Wp2#RJz()Z@i+FkM*9KhrSDPlBM$H`b!$JlbfN5N0^gr zBiYrXFYD!%Tc`N&WcxyllG{ADB<%$$9+qn~!K);kd?WTa)BjAbu*H*xIbjl77ZJ(LiD*&O{VdtaDM} zp}3jm)(U1!X4~ZZif+S*4 z!$EZPWP3JQmF5!ezIh%J%QYSS#3pm z?9|d-6J#&-$T8UJ0=d8}0wiVVX-DnoMaP+Z?kq?9(-n>RvstD6P{w50>1tzo~9k3G0`eE$v)1Sd|Cv3Hnu;r95sY~10v z(rRvcyRbH&dx1f=lNzvra7!og$*a~t*|Xe8$A;@?ByMt6A?9|odq`W zEKi(mM38gOU||C?V%OuIs8g$^CALps95m7-59dzRg5reKjGT`Bf;73!NtCYj9?{>C zB|5Xp{%8j}rnx+}xE(hYOMwUB?|O0jK4oI?OF~$3@|_H3=|tC}LHDgS0YuwuP~qOX zsRJT}&X)2Z&8?+KXneZxaSy_9ui&qT6;%^Xo}6M4ezz*pXnus~%}dQ>MbN0U5q|vV z0Y$l)khI>5%5l6Rwg==5r-jQ046y1K-_{xRm zMTr4Fi{d*2Wj z*K1zWRuHTy`JVD3KGLxxZ>C_*)iYtOTegKbAz{+}N|JzS&5FfxZ{Nc&13o&%7_Ohv zt0EToIq+yEaE2*ablQz6_8t$OEYE#&KX|EIg4anrLqw_Z&Ec8Rs+!BeZw?Krer%U~ z+cpw$RQIiy$rd-h7UnxH6I%`H9ZW>qza*7gacjkua+wteaBUGWWIN2~Vs)tY#f`CB zxP0d~qM4skJ|7hq7k~ZA@rtIgg)o#fxAaYJ=%A9+8-tHGi z?yOSbQ8c&|aF}x~PUnDB>s6^Vvpp+~E}Mwv9;3B>J{j2?<1q9#?&I`S={o#hx>23F z>1^Fn&Fhj4#S`udetHqydct@zzW0RN-IXVtKN#jnPQUbv{A%`NbbikBwq@ybx01}; zwRRO12D}&Ww(Qd5cMFf6#I5)7pK4jX#;K~VdHCozDSP`DYj~UV<29_!Xn|5M(^Lv` zia66mBg=0|5#yLe$m@$O+&9mo78sdVYSh#%}c5E@%YYw#}9b}jkQD{x*U%X9IwxL z8#;OJ<)FwL`}Z5YBD&wQ6_wnG7o$ZT8tUBJcQsF7Uus)K#JhWShhxRd&$aG>pC>9| z(-nHWjkw!oFZlH1{krzS4 zL+p;F_9H!=!{5pVt_BR8%O3T1OGxDnn^3Zlp4he^$~R87QB_~SBQVtK&x$j@i8XF>MBfXCrBLX56gd9$ZR^hr|fd&`1rv3 zJK}gtwR|JReP=~hxgR=?(q8_X}B)a|hEw&1B0(z^O-w-7y@TIkqfWNo>4 zw&&xE3%px-Svy(|n-#my^55ySGBW>oH?d1beo!;bGcKcG#_mYi-OvlXdkPo7`m}Bl z-tPDD&4Vg~priW5ICq=2lUd%q1o@q3o8E=$Z1(t6Sn>Io06m(yAL?JZoB)lFZgrzdb9M zb2RgfW9GKk1|o80RQP!+YX>zNR=94{3mVB z_S9;e-1adibnp45C4WPaP`CcKJC-F*XDn0aW?z*tUte@zIhxyV($Mi7ehJQx7sA4l zx^-uEI;`Fxn=V=uhz z%>{_%Q|UbBeaU5Go#5d*cS8|nVOQsTZOzQ+R-N{eqL@nt$=LB zw9%LMUQ<$ul+=UGE;^(2C3#y4EtlRUjarFHyVqP;^-Lk?hf3hZcY!~PmDxq62K#Gn z&Wqk!xL7u-v)Oy`v&Of?u#0)FmfROK&#lSi6i7&>o4W^SZFDvgQrE{;|eo}EoMI6)1Yep;6a!SXdRnkND z>~5H}6!GWN3;Z_qB`=}%&KZGM#_}fHY+Fufwd~5?yHc)Z%|{@h_ZLM^^s&k$u54kyV+NbJU&Xn(FQ+~>vRx-zZQ0-3a(?C1MoG0c z7t?P1>2Ubr6n4)oK7KpPdpb|)dU%xU_O1Jq49{=(`O>jEpbh?S@2@)@+Go`VTMafH z4Q+l#EVU35NPVnw^00AoK}Tqu0@00KdhPmEM4c@bO4YR8>_zv92ckpi+xf8S4U5??|zV0d9u}S9${A|--vs$wK;xoIiU-N46k@H$#=6~P> z)W))lSN-3x)8-aKJS0+ElJ%Xvp(=#^~1T;*oOT!Q>3GX z-Iu!hROdr~4W(*cxKO-+drexCRIxwgaWki?Z-T$}?D6uRBCWIi&JJHD%q3K@^7#4S zP4*n~KvUe1R(Q{)YtmZk)d`Lg6%}T>mN6w>SAt~?q)x6jALy+yAha2i3f}O>dJa{+ zGZ2Z{Pu?))T#{nTG0OKjR!^m%+H^O^TA6G%;NZuYtr#sZmvWQtwG|^XeUyAGXk;d9KXBKnYel)YtN_Jw%+|jA_JwX|XJ;ASso|r+ z2lsh49=+HX6>9QDW@yE)00;Sc7xlX;SU7xp#edu_5pW;C4Wv0!7H>L?{So9KRm}VaLO(8jkZY$PR!E3vfU#oc~obc^yaEhKP~Ks zR}h1L-Y@-dFM6@r1(#r_LO67V&EiTnQ^I-9sQ67Edy;1tE5_`XH`=NE)p;p?w)_C$n4;`wCv+)54r?ibiH=3?46X&pO1_KkOkn<8~o= zN7Vp{-gGHY&2nMarz%Oeu`EiztSz8y3rCqrC%{{)8S8XJt zLhjncPpezHU+yJNtdq-Dm<%3oDg3%RPvZJe|8x5|Va~O8ifbL$-O$-89CS}ibwvDC z-usDreP7D5pWaRz$@$*J{nz{&IlBY7y3Mv1*e|u$aOG&YdGRJlS}J@#ar4xWhQI92 zzOF}JFYW|S#7J;?dkvId&&9QSbiFz{7)ddZjhs39{KU7$_iwuT^4BzxFYk88kSaaRXSfbo64pj8uOCrUQaqzHGPmX@Q%u6d+S~^Ux6k7$=e2g4 zvr%6dI8i?+9&o=|HOJ~T8AK&LRSy_F^R*7QYLSf}AA7ZkzA*a!{$*F~tuN~<%MbrN zRXStyxo}WT_2GWH?*}FM{&!Cum)GS+NDJ{aehEG>6nRrRxPPIQ?#C^CCoMz=5Ch(ikCF!(neED>s2ltJ2$G&GBBeO3prfOyf;r4&L zm)3GI`wC%eccbmGliZ)45i$;`^WXgO@ZIgOGzovzbj`SRn-ijq^qy=lv?!Y0ZWF3# zc*?7J?#;sa1yM_DPCpO!n@cWzkt7b=?5(@M24u2&X$C0dk~~zjJlf8k30&m3yRk5$ zNAdCa%8uw$;fqRnYntTJ`}So!_q4=OOG_xiT=K_+r!V+4rdj8i?Act}w<-R3nCT8X z^^0$pwfqGSJed;Dp0n*}W!v=5_;bStRwH4nzO|DM>E5D!GAaAClr`w9dd}Z^y_m{B z>Q$d1J@{>9w^UB0_qg(x)cyKYPl>M$TXDfUV_tHTN$L9RPhSi$CyuB%K9`Urw>$PV zyWb@RHXG+XGqpZmPucK33b$vRr41%59S0p6E`3%1{N3J`re+%tNH$EU>A&aOeJ~wY zvxh@}?=z!u5Akt{9^CtmcTe0G4~DX(7OYGtmJYc(cPivc|Jh)J(hvUSPrWiO<-`sP zuj{niH>94q!^3}i>&jTdM*c|XdDik3KdI4nxEr=JYox8G`1N>U^v=BkSEv;4uWx?V z-9GVc8+Y?}lb+=}gx+^ZcX3O;!B&I+wtvKem_zlKEbylmH1 zp;`NCnWX)wR4qU`;YI0Rd_rpchGDeHtgVFV*&F*KR|c9kE{xpN6PI?nqoQbfYAyVZ z#7gqBQKKKVW=9(4Z0nylJ+e(~nd2JN{`A>P_JV|!`h!o0o%$#nLhjtL#oI}BykaX1 zoZRG~fakg5{-i5iW$mFK%=NV;c8__ZmQ09Z#W!rWE$*+$EYN%!mwdByhumC8agqdU z)?A>vdd;!8YhEvp-!JwMT`?`)jB{IYcVF_29bxl!aV#@>WBnFe*T~pYDy#SG%zLQ$ zT0BZ#w$O6>`LZ&Dp(k7u`wX0L2G-2+G3i%&R-P(;r@H4? z`MfU|QIKC=IsPPPt;(6)Mw89CT^Cixo7-mpO48zgVKCe|kdjke6Gw6HHIY0J)R_A& zWkQFZ8UKo_zIf%HGdYV((XLOnKQU6ZSzM>3`83va9nT>P{Pyja`%KCQ3wcU3ZcFA^ z?yOr&LKOO;J>Q?J)YWz5OiEvPB#wZ5s1!$v1a)q#eF}pm`>~t4lKX8)2pN%CEUnY34zqD{70HSwi-^ zcqQJudXY0mfAye4&!(NH`o)$gtLywtu4fYoJ%!%=32QBf0-aY2*+YIXu$%q*b*tKz z@CW$^_grg;73{YZiTU{PZIF7u+3rd2^R4`+xrZt}%B!8^@f{!VBJvXlg|0ZS$~)0} z_D0K=;VUQ1J18GKj&ARLe~oN6?rb(EHonS_B$cH)waL`7NbA~E;jw2Xq@fR*QUhb5 z7w_4d?Wq+$J=9Yc*YVk_pz`Nm>8~+8&a7o@mz+1eh0krj(2&6M zi~Db67+#OP^yRp_u6^g7wx-PoOXH(8oOV6D8Q+z)bZyF=Th&q2ZS^HKZddK01V6Q3 zuQ=6I3L^FXTBT-Q|1rgM-oHG?c|q^OH?D!)lCS;{D zBk+FOWB1_lg+X&=`eJpHU*jd=`!6iG_RXAaQkLpOq{X^Q3zT~NT~C;pb!i27a@$OekBhx- zkQ9rWys=esBKB#zrSxI(xQp*yZa*9dGV0hh6g_ul@+H%&hbL-_ly$S!4=8L;#6 zO-zhD=kR)%BAca@=fceV{KUjr;hk#x_n2)-6sFYQv&*fX8 zbvfc_-ODc)tihrmIj`mDW$sWmFYwmLj^WtP^})-#UZwsoAM9N~~)Db(ONWcDJN%zo+9x{G=*cPcowFSOpVxSlt> zZoBx)6eUUe1pEvHm7YzVZO3uphl~d++fA*uz@yUDD%`x%bhbzSk^;D9rKlsPx9t-? zGa+vCL9gR0o85wZEUUT3j#X9Ozl!!NoLISIlWt+~Ue@8paEZEVr<;i}FQe^yRM+(^ zDQtPLr>iGisO3#~^@otL_G|rvuac)0Zmc`}-P!TP&y=aKyE2kP;~~}~F$Q0r-dN~9 z_t3F3cXSKcBKiIVYZ=SuhSOWu?pp{sS-bOj@(8zQbmhyb!!@bR&o(BBu^496ud`G4 zGW;vwwche)nR>C4@wYnhMYWRj^UQZFS!3R0yS*yUtNnU5Wx=aQa8}>_p3>HYTe)ps zFUG5{RCzYP&nxS6;S4()xwqY0A>dQyx8fz$kdvnHSR21CCFj>0*7ZHj8~Mn2O;oCq zjl^PM)Q*{lORmA+OAjTb8R$!mu^wuC8l5Lz*lrY}yZ4-igZ;C?-rUW-c{EG49qiJZ zwi?aL!cSjt3eQll3}<0J^Re0gW2#l;smC3&P7g||O8dUg;qJwT&omp zXgIIY?DoB^=0>2a>%Djdk9c3ph6gx`>jpLJ4(rO%`KMcE!g$4fYtDa3Fk%_x$K}u4 zHjBoEcYS!X$*;cGGdJ1i?U`6J>m1{-7U{@J{`>CRS`*aHRxelJHXPwlFMbxH<@!lk zo_n+?dpP)}|F#a1OuGChVgwIe9JkPwLPcHbs11%5@8`^136aeQuxS zg2DBjHdH_1&&O;9nq%*KWsN93(&>1^Ard90+4o3FENZRR<|leN6_$?l=$4BXM~pL0 zMx?ZauYN3f?S1g0iRtXw2Kj~>?U04_ocY;I)h_jNgCPfPkC8aG_7+(-&U4kJiX7vX zXLeByJ;pAW6E1)3WKM=q=ftMo2QAN%4rFC`@JM*v`Ag@zyKdg=2ah6(b)=$`B5YX< ze}q~NT0Yq`F&4wb(`fopHO+cxQc*o+M>lJU<6_^gX#oSdcY@`v-anV-t6Z;09oxu! zoz+3mbe*~CC7X=St5(FmH`*M$;?pdK^cx(*r1O#*OrLlDS*?X^91^*8A&8|h(Lmrn z%efkD*Rw4GmYWo=-#OdgQrmH8O{Wf1$2+?p@h!rWDgC#5a!&1;TZ=_g4&M&f<#Ifa zg|MnY8)@a5iyFaFt0SZN6>C`M6*>Klm;}yc1d4CgW!>97v9&MBKEak-2C2q(Y@Tle zNiU=Gv3OzCx$fm^<&ZQjmO##ngI>h+$GlZ`hYr8#k(yy)|30rYy{5TzV^Sv5!ROf$ zp=;&N_|FY8zgbo*>AO2Jyp>xzQjkAsA={cbAs>y$* zpv`C{v)Bnc`RWg^zOf#W2(4jVROH+!Q&u>YWm_#9$2V=?kz$|9f8%{{xpfFGfwg80 zPP0XlSJ>+1naYIfO4A2rgKc(;BSCBQH#5ubKI5I)7*Zl8jr8;DCI-zk+@4RhJN`AD z_01Ywfi>UK!DaF1JUQZK4<9ydEtZM!x_sunMaq(e-NH2>zv80Xf{UD6{U7JATcfYP zqxgF0(#%cOXZ!S1_|odKNgPh|1fkf|PKO<>Jz0_iUkRLxO?zhCJal@+0WN2G&iu1X zLzk(Rf;-pUP|UzzyK6A%&A#-uci)PG9Ns+- zoY3F%GfjY-#m&#B=xXj~W1M03kU2cIYN##rZrM${-2d?Q1F1E%qzFRzQHLE%uUieT zb~F`l-2Y+wCa0twt2p&vsJwo6J%D$2&(K*#2SMMI@Kx889$j|i-X0MW6~vaMq0nX; zh2yo`;*u*ou{O%UL7my7qxJgrUteSG*2QqQS7yh|!}AZ;GNJYdV-EzB`((d&ldEbs zB)bXO4{QxU=6k+#M={Sqqs89*WK|Xt$7nfuL-qcT^V)c|t(^CzmV0}rKU9&E@7>M+ z=Kn-uUDkPRYX$W+N!?!thc9#f@SoiNp;)w3-rYXp>rZ|=!e+VWtiu7`ACe@|sf&n}`uo+HM;32ZzUwfq$c*^Lr7H3(^#R*Q z<1RP8O;=Yng>f_;@6t94RtaXsg_WFkay%X!m<^{W$~HgR5_+ug|_KW~5S z#j%3H0~tblBu=MK@4uCO2HfDqn*YeG+gdH(dB99{G0e1jA6s71`y$gKjU*QdPKDm| z)V}rsp%ZV8TuLBu)E2XS@%#DAL~w|ggSpMt)6j1r-->$F?bajdtgUQvsVCkSI)$y# zmt($N`rR<=W>J07%q7LwFKb>tI;ugn z8M}j58tg=;)^i8Vn8+yPIZHFUT-}>DRXF%2-%T&BC-i{C;{elc0uQHiTtwBE$B&Y! zlTTlt^LDJB-6pI%l3n9sVIRo1t9AKjW{jwci=O+k)he+Q2G90b4L(aWmi?8fZK?a1 zz~YuunCP83^<`k>c%#a?=%?B%$|?_vimjDv77}@_1o+1 zD#IS;zI2W48xUyM-FBlSXDe5i>vR3aqU{?aVkTt^WXQ#0)$)pBzg(I)!uRV3;Gd?n zFG|Z?UB}1r?!MZ+^1}^#EUX65(@Qx&=krOI!>=w}+$YJmYbq*GcBj~D+?a%}_Dd#HZMp;76`W7(es0|IZoM2+>9DT5ZmDS1U*9YyclX)^n_Gr`8S756 zn2TDM^kF$m5-9j$vz`QhK#NhW@UoouIv(oT^FLqfome=cCVgUEzQ#J8FVRet+?MeD zlD)Vw>H4Ca_9NX={<~@w^`6wNczFNUeGT(X^CHZ&9p~~b)xC>tLzgzrC%VP-5)b)5 zXO$h}4!*RrwM_ZR_IIpljcV$Lhg!zj++S=uI3jv;^>p$E$)*eEg*5ae(-yJ~?Y0&k zo0>gtZeN;_%6=(I?3|o3$5^7;C&!s5Nfmd6@+ZxL5SZAvbzLBR{VWZto@z`Eqe5!TQ9R!KJpt z9^OM2IE7~3(({Ab4RrMfPC6}KyX?=xJ@TLmynzUQFOlSK>g9sAW z;$|O_lD{i>gnqPwUn{p)GTYrQvtF0womZy0v7`mn<&18zV8JP-(;_@l89epx1-FpC zDv7CF*W2d4>$J>?=Ls1DIen|MC37n8R1ePXU>7!dC(QfU{ayIJQxzXShK3Z?Q#ppI z6?WQr!tm;D(U7d0;B2zOPp#f7eGg(`#eleQAVrA3oMUpo7*0cGflV_*(f6#Yb*111*v{5lw&-Q!u z_nz`gmBPi6%2$tk+Wh#AA%~NK{eoVwncmb}S(d4&B7(~6f!ptL?Yk9{mD}{5*6FVL zWSek*?oqGy#k;;cPc0euEPu|l>bdPxx@Rh1e486z;0pa7uRE0s)fPPb=iKD!yegjF z+e_F=j>!CVuD;~2%%8aChD~p+HnsX{$wqC;TS1UmKc$k)!Rar{R6p!Aey{rRCSOXZzs%EqIOT%7`A#MYe}Oy8_o`%ld-4N_K?U3O#xKS*@o3s@^m?>+ z`;73z)RN#=F}7BF-v_NcyYJo(6I} z_IycVW#QFazKa^~BJ~^}l-*gO^GMA?f7FuHqt&&0&#>%;Y35$FJQjOrAFkpLy8VlZ zw8e!D9rEKVbXwy*bVovJ`0djjx9`eOD2!k#so$f$(f4tSU3`DRj&T>kmHaG!EXaTMNDN zPnnA!e!A&>e-`whqU7AO`j1ccx?IZ1(VJT{n)AYVThiHn(M8o)E^RxnP5%{i(2!^R zS}a(4+qxc^2dWY}Fc?lNB&6~|qmb4t*aWkVT{z{A{=3iF-o z^IRV1*StI{=qgH^*NXE{z$t~tST1M=TUWff!?{m(lbJ)X=a8Q3RJM5b+7e@#8kM{f znv<#elTBfQ>*pfxZHd^Q9wT(}*RLyeP0MDVdV2ORdEkqdA_3X!A2nsX{+yfX`-Oi+ zG=aS_`((`F@KHB%(u%HKpXYrq&2`5a%KnU&j@3&~*#7c!*M%z;jw{?%h`%gvY1Cai z^O$qOB>oB1;5 z1)Egu3c`X-U$4J3$KT2=smv2Vd;2lDaEq0BdSmdG=#`~>s|~g%JPv!}^yJ}>eIhA` zrZ!jBi5#-*)*hfNSB=Y6$uMc%UC^>P^*-sA#Fc2z#B(j;ngPozx3vcGt&|A~N#21T zU)+<8e% zhO}Uk!jqTqV6($nCUiV&JLuc<@EkokVkd`XOk2Fsrjg3?#kdbUKc4Dtu(CMi^}X)6 z3D;RR;l_uuxsX$ZEH4Bq-rd{N=`_aPXDWFzae_k`-~LYJ>h5;yX-n>&uPFG#dxfiH zBP-X)Pum@>=5L&o)69t#-tsEGvU?{y311)lYOF3)d-`L)nB>rTT431+W$|OLHtWj! z%dz84d3HY@JiA*5w`KXFdGcN-v4eNt?iTC$9?v8m%vd&ok9H})kh?88{Gf45?Ksq*0$cgWhWAJ z#wYWD$@>wZ9kBZq){|QZoHW@(=#}O=-_x_hZ1H|B4}^1C9aUXfhu3&EJa(wc784Iw z(za{PO1oc>(iYpXUY5scRoH+l+l`N$s}hn&ZsC4?f2zN6Ar`$*Vak_&i)9CNqf81} zIvbe>SxbniI+OR~H5sg-qABr)KVXIZ{ z#dj7@cG)d^)+M?YGYjw@8|*7P$Vpx9=(DNbuPk=ra~7VBGiiq$i_imsSf_%o0dB^d zhGoS+_{U3<`67f}x9$G<%R#GW*-EV0jFn@H+So+Fow|h^_mw$bw>-1<=;$k{cVPO^ zke0Zz{L{3LUcX5=ewynE%gaqWqEL?~#k}UEj>E3f^4N(_kLp&boc9^MR~5~#BFu_Y zyDQPuMD_V=U$A8Ju!xU+u~gZC<{bXugY|4XgLq=nLJMRP6Iw0bkkyQWuDN|bir$$| zGqcOQbA_{0>ZAXsUGz0`8zNihlDfA$jU2rr_A)&ETI%~=X*GIZ+z9>Ps9uog+JNW% zse4p8tg~%nHAlG0+NQ>=Y2#pi6 zSAkh;Sr#s?Egh4SKYz4{IhPVOCRbm6Kz}EO5QTXU)B&AZguT4km_OGGFrCN?CG6WoUUW$^uA!nGi{Zo#ZM(;hIKtz z!unU5D6RGsPOL6eRd3zN6RG1maBQEqsoT1>mlL8bJ{WH?G?-i!dizH;r>AgK_$P@* z>&HC#78a!%XAPrpkE%K0YqP0I)7M+{M5<1$uz2*< zQ2S>^$io8{c%~yRW~6SpTB6iy7QO$$_T;=d^KHWL%fSXGJtU;%C>l@29)(obZL7KZ zZE~`-HuW)#jWc2H*Blm{!KyD6#matianaW(^eBB}^J9^XTlrf?GA@~ls-3#9ef#PS zN511qZm+lRIKof&1b;~0 z5sG;$ZrHjfA4k=R4l^U&DuEI${!SzS>L?_#!bGy44D*^!&5MM6_SUL9#;!KR;MhkC z{^B7@p1xFjOl0>~)!r7Fg`1n+J3Y+}6XtnG5efgI_!=L5MEn)oy*!yNDs^_KE?Te6 zy?CaC?|_%Pz|-W1kBc7dk*-pCdFivZ<-4XwJsv@G`AH>3Z%X7@c^XTKbk`nd)gKmM zsn`;3xxZ_}lAF6&Y~!N&M(#Wjzq@h6<%%uF%UXPASB!Q=SP7>X9$OYp{dTC7XMG(d zGt|p^?s)w{@y5U=#TO^PoIXhUW|lv=Je*$bCAq5nMpUyw1grl4{r7(s`2U;*cr-_q znV6Vz474>Y|6i!QlqkzD$(p)uUvloxAkdS^K*v=3hNi>uT}CTdSD`Q9k2F&aXSz7Y zW+o=|R{*{V_Ehn5advl9arbg`bs;GG1-h!iU#UQMmmp1_;B7KEDV!9Zf>*}j2=GZz zCKAaqQo&xH-hSI;-2D9ysj8?11qCSw5tV&>T~!D;98LwU|9y&Tu&2AX$NzRBo=&H$ zU`J)7+?}_{XzY=Z@(FbDJ?QBZ1n0XuJG*$xY*%x3Iq0`tO@;As$kE?T3eGj5;+1JM zI_N_Kb%Aos6)rY@<^tFS~Loh$wUH4iiB4t zA+_LoB8^OtA`_HB3v4|)2}hJ7!}XvXNts5WP^8FYWh#Y)DNiE6LD(CK2)a;|sd&(h zf>S1=t-;q+0zry`u07i>6Gcz|~+CB15D?RKZaq4XlPIffuL{J?Jn%49O55QZ!^; zfGC~>@c=Om(Mlj9t^t`w0U3~tmW9Yh@gfB;Ok+{_w@d)&0^-s6M6e|V?g#OKCs82E zNhnUpG_)L%4&I?kkx9xpIu+>-_eD_#rx78p7|th4k>Rf3802d*d`$*VkdgKf-DEHo z#1#Qh2QqjP+zT>}fE@?Zkm=}r5(+qES~?w%mZQ@U^dNBHG%RY-W+1L8WRL-gI6N2& zJVypCVUKu(SmbC5cnSd+hc<@;&rpa`MA!}HcofE%h(iuygf+-u3o0-al7Z5Y%wRr{ z5la9ikr1p9ynyehU|EEFSey=)13n{CQ5544gJJwfCIEbpOowO#bkI=nBeW7outz{R z9>oE`kc{8~%M#(P=r{>o2NXqwFa(cNNJuL(kO6`##0d^ijwgYM5Zb{A1QZmoXB2K= zc><^hB8qtcBaVc?2{8>HH1H21=|3Xkb`*R>a0jeGBf>qvG9VKPus1*p4GRTe3<3lo z6~3nc#IaNXF%4*;644&u69)tbL`WeZW+P|7;rBhF%!sS z8h8X`DhU`5J0A|?Ay5!JC41JfXP%UppOJv;HjVuL>vJu4l)6UX#O7=Vh)qZWWWa;2M}Ys#bhkC04jmz z0X~3IFf|1{1!;mx1S|bPErxE`-5-==-=lp%YNCMkP;gP{*mYzSyRa@Dr9jLIz|#w|ge6hI^dFP;SY{EkW#l*lfS4XFSzl)<4~fuM)5qJp;w1av*aObD>3AfVG3*$jde zWGE-7#{XVk*qFfObUdUh02dwA8(;0(z)3(hAVZ!ZBeOyL0GPqdG;llQB}ny> zBrFX7WE$XyQPdC^bpdP~7=u8C4MMcS)xYy0L^l+A;4p|rj2K z4uAn_{2l$^SyWnq%s3A5NrhzakBsUPI8Ik40A2rPcd!`HCKmkwEJ!H-BBQbhEQaMK z&3?f(#WTk`eo3ms2r*hB^eS z2JWUI9!7kPd;$K&;UMQAwnu!7`3Tjo;42yqjsqWq5rAGPBrrZ08R|<&$S5~}OBsn6 ze1#=oMDqYAMl}E_38e+V2Lu!5TL>~#8xj%ffzu$$vFd^j=fQEP<={B*I|)eUpX0DA zs5(HVLW+gs5H_GL14^(|AL0V zm7oo(bx?kXS_hBL|09F8P#_~0K=lBt|1PmGn^RGeg9E4;Kt@GY0p(Ddf#cwDNIS53 z3S18mqoJ5))KpUNW^|6_QCHqpBTg ziOGN?0s;n#WB@*d9uPM}X_W3!IRGZ20#T8Hr=ezn!VBU8#SzF*zv59r2Qu_susl{S zU^Nnf4EY6%R!oF^3&jlLApi&#M!$m<(H{g03Qhnk4qyXYBmujlWI#l<>fbU7KFC48 z4?}LkVW0()LmUsJNrf+d*XnRnFa=ae4DLrQ1Y8cK6NCF9c0gw$6=hVcR{tGaklQfI zfZ`J~3FJQDdMFj)I3iDoF$Ni9IDyiiZu}qQY$GFe(B0E>o6H7+4l3+qRJN=A-8Z5d z5h^)kM-l}`(qa^ebYwRY7z~OENTdKFEMGz>K+^#ZKvfx;gbEvEUr-(F2=xkJ4(lI4 zCB*-zUIu>=fY(7KG6@wpz_cX57Fd>y#WgT94s96~DQG>&Z^-*#0vZXn3cdu>Lpp=? zkVHoH)!!1}9qY%p;Qg#M5P0x!+@**+zW9EER8ZJz#auV zDsNFDM%;k-8cS3_Qy@ZKMqguz3G9J7U^29_P*c;W&{;#U;OJmSFb|FnwEz2Z47~tH z5a}dX9V=rXhOl}Qs$NL%V0A|9k>EB^jzSVa%mVfY#6dczP%)-K%tJ;EH{?UaOwi`R zo*{ihvBzK{6thrtktx4pAM5{tz9~@VqUxH)DB>XfGnfh41`!M(3Dx3sR5L;pkx?gt z8hr>(uprcM;1+NL9jY5x9*2W0fwcxu!(n$vUPFxr6dx$ff;Uko0R+b=pAlUHN?=K} z8!Wvd8LBx{yx>Ss6yYJK;$W8`6Cm4QG6B#7G6m}eP|k(jLkB{lqox+ni1-n}gvWUI z-#|<;{tr;wn4sPRRnCx`A&bzppuGZ3Fd1?+m>)F5p-94VHqEJd1-XL&DTpz4 z0z*S>1w}B{wh7K|={B`ha6#LIcGdsuhupMr7bch8ci2AogHJ!*COD8piHG z2v`V%`!Je?>mkI+2pm{Rjm!kwgc!jn4XlAx_>ka$@`#8>FzRCvBJc#p#i-tfn?s|5 zbR?jD0P!XSF(N0Z>%o=?nZP3$@j;yjL_vYYu(kj^1xHalBC10y0r)}1JZKE8`iB*O zHPKC=dQ%Ob8oU`C+~4H#5ULw|}r*p*jMfhx#tK9jfLb^r6kb?vC*Y zG98*}VEsP^eF_~B9s({EGBN`HKR~uILE0cbf`Wof(PGp%04d~8pc(WnH~_99qj-m# z;ZTDQ^aG_4d;%*|5HL}%h+W62uDFVYf#3^EnX8o@I# zoPfQ->@F&jiwx!Eg{KZy(^>v ztY$-)M*M~X61E8o{Cz(_0JJc_`3m?C=#`2GcE6{wa6Xuqk&WSdnAj1qu_a8iu$l&L zi-pv0qd>idI^)09$A)ZZd!P?e7aPgJI^Yku9L<=CfYv{@!zwCZP&9|cqZt}%qOhV6 z;DV;85G81oz?e%yiG}9)NIlp!oCXax%uirLPY4?9`4O6QqMQ#-z$W}yp^0S3dSDmSWWsnCoDMYw>Iaa0 zFi`!D3`Bv5C;vTCpd|aZ$U!9;fD}OpN-_pG!Tto)+=9OFfCScO6!B<3jM@j> zia-kAlaT$erWfvqvKYcXe2+B}n4ZWE41Y0d7<3#Q1Gx|R1-0f3JHfsHycDb!Vmz;b zAt3f(0I7urR>=OSxkj}gHk-$4ERZ46Ax*(LKqjc=2XsP-jIB#Rpaz+Ywel!9&~XSl z6w6>IY(#*HJairAA6Vzl`G5BRXFZ0Q;5_6funVL`9Et{D9wG)~#&aYT^Y91{zK38# zrS)&K!Uq+lJ8(NRL)h2>Zzl?1V#8QThi2vlX@KqB-Wh=$NZLtqu z3&+9GXb6C+b`nAW7#JR=f(&UFMfBe?AQH7$f1eLXg{uDV^#OUPY6iyweZlsyDjc#I zWLJ3Dh9L}xY6euLBXeO0gf0NKhpt01Jf~sQf=G`)$KifJp_q*3k65-vxd=lnqq;@b z1c1}fJOw3lWNlQ$Gpce7j^GP83yN2mNWjgoFor?~QYBVZAvmI<7lIVqB*2o6N^T%i zjM6bE82<+}Y)rscL@XRIY~Zy(hIt;~k0B#p{w>20i{V=oK5+cE{4d9`%JyH^L+Age z3=Hru>qA+GJvxJwi3Yu}4d~Xv8dwU2(g8{$n796~GQunzhv%D&qBf{`uw@yzsQ(A|E@n640#_p1Xcn?wIIx4z>WeJcozi&s;YkvMo{ktbVOv-28c$n zT8RdU2sXrU5YPn$4a6DGjiIJP8-kJL-!jA`_FxmMP_UYhh6XTyq5*O<4$D7SZ2@y4 z)OsNF|09zK2%W#92aZFJ3uyc!BmEHEAj;uultrNB2NBW-qY8(ff}t)_A3_{TIK)qI zB76b`KqZW1)KmU00a1Fxcnr7(jav|x01zPeGcE^f{e~|v0u5EXh~=q&PX|Feh(#LI z7zl-EM2fNm5q8Z`4`T0+3}0ih_eVzRV526a4x`b;k|JX{FfN^lS{W>fL1;tHKm`!S z_23)Kx3D_Hx5oeB>;Fo+STzGtjm-e*1TA=+K!%nAjf!DJ!kD(gL=ch;qF@-=0;l{g zi5QRku=g&2DzKLkz^PP7I#^8v88Q8Icy&Y13_`6(6EUT|9~ znrpy-nu0alU{z#&xGfaj*l}QDPy;Z9hGf``7h(gm4SX_egE#&UTm4tN{ykekEKH+d zWe5Tu;247$V=e?Zf=LKC4i(hU5Fr>K%Eq!Pzz*0Cy}yDML(g_Fj>QUYz!!oYWDfM6 z3&I6F%|tRhWkxt*jNRaTm@qJ4h=?hr7+KX5(-HQFy496J-43?q8!NFt{*#;(`R4w2GDjvzdBNo*?@CpXj$lrSRoD9qtih(tj-1zrb*az0X=NST2rtr?2L%UD2yZs5sFSjI|Rd{huVK+uo!`a zT2r(t)GnYE1tA%(hsU2_Q8a0SA_DII$Nn%G0T{rL2JDOWfMoRS0yXI9dl-*`AK{%F z*drPyKs%5k{DJi`h!QYB(s3x{fA?JsMqyA2n(<<|Mh-xF zLZ1gR6`rvFBLkGs>oJVP2*d87z$z#o zW5z)SMg;|p#K=XzCG!7fR`d$vcJ$(;AQL+i2lnEmQ0Y~*I{23&GZWJW#*33dKE57) zZZ0nVek%KYT|E6%FafU&Z$~O4`9xy-szw~&iP__`e4o9$kMJcI+H21#d}2Q9{5{HR zO~w2bA0Or8$A`UKGkzQ_e5roLY+&=k@c9_?wNj5neOC6n-zGimUCS!xzgBNnzsZ>U z`;j|EPe}(_cMhzM)G4I(bzTt+G%TNV*F3vDsV$@LA*aRJatr2mp{?fAm!B7Xc^vUA zezWOrEwvYGw284Z%en7g1>*eY#wp20>RZxIe|gkSSmUH;5S2D7Q6FnQ{^;VA;ZduS z{jj%Rzg95)`|j_lbxu8oBiH`fy|b@lkh{0*pS}MU|JnWBqy|G)Ja-K2ewXj9tgNV$ zo~|k~Ggf^oIlKxj0?(bTR{rqH_T!tz#BjNqxiaTHpMu76&IYWYhJp zCq8i66e`m}<7wJ(_BD5AY39^0cUn~T4hfYz)L-qUZELpFZ~V@`_vPtT+~q+*QbHZ= z5q%;r*uK5kS#x3Au-EDN*CgHZW40?w?bX6zum95$>}&^n&VnVb!e2i43op<*IeI#2 zxjDLfBhRay(OAWT=VP5c9?szxbW>4Y#$c^rSmbsG_#f<(jL#bL{ivgd{1q27MOl=S z`&6hYLi^a>-~pdn0eSaFT!oF!BStJYUwJ1yd|S%A;hMKYIiHPfhfVzI zG_#nBHA~}r|7z(gzgJn3ekggzGvDs-ht;MA*oG7K^frz$DSTcnQ1om?CGlJRn`5Bi z|J*~^fz-3RV0Q;un3(vPIGCM%oOb#89P(3f^6_;+n~=K9$}E482~PR{_n(9mJEJC? zNc1e*FRjN%vyXXJL|3nntL0;BIQ7O(f5_{>c+|$1pI&EI+rIDQQdzu^DmQU=<9-Pp ziLl7>^b|J3%OY%2S#Qz@gx|T;ath0roiQ}^kiE1+$+}XZwA8nd(}Mj%Lbt;{Hp<*a zcg`L*RoWHKma`H&c8Q0?etcsps&QWZ+_t{7qn+D^NoRb@nDpoYfxk#8uz^!<;*&^^qKxm1dnrI+bNpV2pvHsdsU%YH@tS+ojzP)Gt zCcouZ!g*&?!yrZeQ)FZI5jRtCT`1q#vIWZhBQPUy&d1>{!g6 zm3u0APSy6}>X+xtj*&#hMaA6HDT`*uw$`bJ<+?`RmoK{BV0N!LDL12Z|Ecm@yxZKl zMJ+OMt%@>1y9G6NKi?rz_M*(?;L#P$d(>5CJPT#*ZC+5^ifHS3cXEYEkyiCyvK1JY z7=3a4XNKio(NV6To`TT`qxptAHbzoUEADo6zjAO*8;p1s<5^UZxO$C;*+<9Yqd6Bn z>k9v$rCN%({?}3y%G#44{*>oc!=f8D9oa1r`wTPWy*4h`%<8qtj{Da{?utq2_KFES zIaBlxWE&h|bc-mDoSQ9vV*35H`}swcSOX0fRL98vzVR<|{uFg>2KhLavY7Yt>a$z`*$c;eHOKTKJ1>f`RZ$gqQ@t}h?`N!cN@w&(5buHx7! ztEZ`(@QIc$j$dt>uxZw*GgU`7&vS{{(wH+j_nB2E)AIMbaw{93$jfkXEHQoJc!_`Q zBp1QMCS8;LZX0^6k6m+O!L{CHS96vd2iva6-n+Rl!Tj?UyRU`04L|v&0$^QJ?x1QLSecx>M{oys=x2ghmukU|bJR{^m;Kr17Ukm># ztlL?!uTMohG(_%e&(GTerN1-po?3kQ;D@&pT6cU`>pHt?>V9~Q#>k}0fN0xX(-Nzn z3zX|%hinQ#Bs~x-+BrY3BsH%jKBTfBwKx`(GXuO)4cHoLp!@}>)CZWGxlwdqV`gB0 zG>*VcB6N*kw_iw}$-=;}o{xcnA4TJDV4(o4TS0BCr2PDBY_{h7j`WcNI{O*W04WsB z2Z4?NYKB;hYy?(EoZI6&b0I4O!xcFO1_=~%q=C+YIs)3zLp1Twy<&HbHTMM2(Pg6O zrhEc!w83JE5jH`5K4Afk6X5C-_>fej$k4M8^$y)BP0&^sS&AUt3o`3E_8u;w51CNaXm&;qc5 zC=FzE=b$!55qcRIBnufCFq)?5+EE)3$l4baBWZ^=DFVD%fe9LvoP`;F0aK=WIjD^b E08#7(Hvj+t literal 0 HcmV?d00001 From 68d799505f1f9e57ed17bdef11d1675f73f98163 Mon Sep 17 00:00:00 2001 From: Eniwoke Cornelius Date: Sun, 1 Jun 2025 01:03:06 +0100 Subject: [PATCH 2/6] Add starter code --- datacontract/export/excel_converter.py | 648 +++++++++++++++++++++++++ 1 file changed, 648 insertions(+) create mode 100644 datacontract/export/excel_converter.py diff --git a/datacontract/export/excel_converter.py b/datacontract/export/excel_converter.py new file mode 100644 index 000000000..fa6c583c2 --- /dev/null +++ b/datacontract/export/excel_converter.py @@ -0,0 +1,648 @@ +from collections import namedtuple +from dataclasses import dataclass, field, fields +from typing import Any, Dict, List, Optional + +import openpyxl +from openpyxl.utils import column_index_from_string, get_column_letter +from openpyxl.worksheet.worksheet import Worksheet + +from datacontract.export.exporter import Exporter +from datacontract.model.data_contract_specification import DataContractSpecification, Info, Contact + +EXCEL_TEMPLATE_FILE_PATH = "datacontract/schemas/odcs-template.xlsx" +CellValue = namedtuple("CellValue", ["row_position", "column_position", "value"]) + +class ContractElements: + def __init__(self, header_cell: CellValue, layout: str, cells: List[CellValue] = []): + self.header_cell = header_cell + self.layout = layout + self.cells = cells + + def __repr__(self): + return f"ContractElements(header_cell={self.header_cell}, layout={self.layout})" + +@dataclass +class SchemaBasicInfo: + name: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue( 1, 5, "Name"), + layout="column", + cells=[], + )) + type: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(1, 6, "Type"), + layout="column", + cells=[], + )) + description: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(1, 7, "Description"), + layout="column", + cells=[], + )) + business_name: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(1, 8, "Business Name"), + layout="column", + cells=[], + )) + physical_name: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(1, 9, "Physical Name"), + layout="column", + cells=[], + )) + data_granularity: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(1, 10, "Data Granularity"), + layout="column", + cells=[], + )) + tags: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(1, 11, "Tags"), + layout="column", + cells=[], + )) + +@dataclass +class SchemaFullInfo(): + property: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(1, 13, "Property"), + layout="column", + cells=[], + )) + type: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(2, 13, "Business Name"), + layout="column", + cells=[], + )) + logical_type: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 13, "Logical Type"), + layout="column", + cells=[], + )) + physical_type: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(4, 13, "Physical Type"), + layout="column", + cells=[], + )) + examples: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(5, 13, "Example(s)"), + layout="column", + cells=[], + )) + description: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(6, 13, "Description"), + layout="column", + cells=[], + )) + required: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(7, 13, "Required"), + layout="column", + cells=[], + )) + unique: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(8, 13, "Unique"), + layout="column", + cells=[], + )) + classification: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(9, 13, "Classification"), + layout="column", + cells=[], + )) + tags: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(10, 13, "Tags"), + layout="column", + cells=[], + )) + quality_type: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(11, 13, "Quality Type"), + layout="column", + cells=[], + )) + quality_description: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(12, 13, "Quality Description"), + layout="column", + cells=[], + )) + authoritative_definition_url: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(13, 13, "Authoritative Definition URL"), + layout="column", + cells=[], + )) + authoritative_definition_type: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(14, 13, "Authoritative Definition Type"), + layout="column", + cells=[], + )) + physical_name: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(15, 13, "Physical Name"), + layout="column", + cells=[], + )) + primary_key: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(16, 13, "Primary Key"), + layout="column", + cells=[], + )) + primary_key_position: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(17, 13, "Primary Key Position"), + layout="column", + cells=[], + )) + partitioned: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(18, 13, "Partitioned"), + layout="column", + cells=[], + )) + partition_key_position: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(19, 13, "Partition Key Position"), + layout="column", + cells=[], + )) + encrypted_name: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(20, 13, "Encrypted Name"), + layout="column", + cells=[], + )) + transform_sources: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(21, 13, "Transform Sources"), + layout="column", + cells=[], + )) + transform_logic: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(22, 13, "Transform Logic"), + layout="column", + cells=[], + )) + transform_description: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(23, 13, "Transform Description"), + layout="column", + cells=[], + )) + critical_data_element_status: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(24, 13, "Critical Data Element Status"), + layout="column", + cells=[], + )) + maximum_items: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(25, 13, "Maximum Items"), + layout="column", + cells=[], + )) + minimum_items: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(26, 13, "Minimum Items"), + layout="column", + cells=[], + )) + unique_items: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(27, 13, "Unique Items"), + layout="column", + cells=[], + )) + format: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(28, 13, "Format"), + layout="column", + cells=[], + )) + minimum_length: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(29, 13, "Minimum Length"), + layout="column", + cells=[], + )) + maximum_length: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(30, 13, "Maximum Length"), + layout="column", + cells=[], + )) + exclusive_minimum: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(31, 13, "Exclusive Minimum"), + layout="column", + cells=[], + )) + minimum: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(32, 13, "Minimum"), + layout="column", + cells=[], + )) + exclusive_maximum: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(33, 13, "Exclusive Maximum"), + layout="column", + cells=[], + )) + maximum: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(34, 13, "Maximum"), + layout="column", + cells=[], + )) + multiple_of: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(35, 13, "Multiple Of"), + layout="column", + cells=[], + )) + minimum_properties: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(36, 13, "Minimum Properties"), + layout="column", + cells=[], + )) + maximum_properties: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(37, 13, "Maximum Properties"), + layout="column", + cells=[], + )) + required_properties: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(38, 13, "Required Properties"), + layout="column", + cells=[], + )) + pattern: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(39, 13, "Pattern"), + layout="column", + cells=[], + )) + +@dataclass +class Pricing(): + price_amount: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(2, 4, "Price Amount"), + layout="column", + cells=[], + )) + price_currency: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(2, 5, "Price Currency"), + layout="column", + cells=[], + )) + price_unit: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(2, 6, "Price Unit"), + layout="column", + cells=[], + )) + +@dataclass +class Fundamentals(): + kind: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 4, "Kind"), + layout="row", + cells=[], + )) + + api_version: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 5, "apiVersion"), + layout="row", + cells=[], + )) + id: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 7, "ID"), + layout="row", + cells=[], + )) + name: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 8, "Name"), + layout="row", + cells=[], + )) + version: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 9, "Version"), + layout="row", + cells=[], + )) + status: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 10, "Status"), + layout="row", + cells=[], + )) + owner: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 12, "Owner"), + layout="row", + cells=[], + )) + domain: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 13, "Domain"), + layout="row", + cells=[], + )) + data_product: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 13, "Data Product"), + layout="row", + cells=[], + )) + tenant: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 16, "Tenant"), + layout="row", + cells=[], + )) + description_purpose: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 19, "Purpose"), + layout="row", + cells=[], + )) + description_limitation: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 20, "Limitations"), + layout="row", + cells=[], + )) + description_usage: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 21, "Usage"), + layout="row", + cells=[], + )) + tags: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(3, 23, "Tags"), + layout="row", + cells=[], + )) + +@dataclass +class Support(): + channel: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(1, 5, "Channel"), + layout="column", + cells=[], + )) + channel_url: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(2, 5, "Channel URL"), + layout="column", + cells=[], + )) + description: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue( 3, 5, "Description"), + layout="column", + cells=[], + )) + tool: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(4, 5, "Tool"), + layout="column", + cells=[], + )) + scope: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(5, 5, "Scope"), + layout="column", + cells=[], + )) + invitation_url: ContractElements = field(default_factory=lambda: ContractElements( + header_cell=CellValue(6, 5, "Invitation URL"), + layout="column", + cells=[], + )) + + +class ExcelExporter(Exporter): + def export( + self, data_contract, model, server, sql_server_type, export_args + ) -> dict: + return to_excel(data_contract) + + +def to_excel(data_contract_spec: DataContractSpecification): + """ + Export data contract specification to Excel format. + + Args: + data_contract_spec: DataContractSpecification object containing models to export + """ + wb = openpyxl.load_workbook(EXCEL_TEMPLATE_FILE_PATH, data_only=True) + + for model_name, model in data_contract_spec.models.items(): + _create_schema_worksheet(wb, wb["Schema "], model_name, model) + + info = getattr(data_contract_spec, "info", None) + contact = getattr(info, "contact", None) if info else None + _create_support_worksheet(wb, wb["Support"], model_name, contact) + wb.save("excel_export.xlsx") + + return wb + + +def _create_schema_worksheet(wb, ws_template_schema, model_name: str, model): + """Create and populate a schema worksheet for a given model.""" + # Create new worksheet from template + ws_schema = wb.copy_worksheet(ws_template_schema) + ws_schema.title = f"Schema {model_name}" + + # Populate basic schema information + _populate_schema_basic_info(ws_schema, model_name, model) + + # Populate detailed field information + if model.fields: + _populate_schema_detailed_info(ws_schema, model.fields) + +def _create_support_worksheet(wb, ws_template_support, model_name: str, contact: Optional[Contact]): + """Create and populate a support worksheet for a given model.""" + # Create new worksheet from template + ws_support = ws_template_support + ws_support.title = "Support" + + # Populate support information + _populate_support_info(ws_support, contact) + +def _populate_schema_basic_info(ws_schema, model_name: str, model): + """Populate basic schema information in the worksheet.""" + schema_basic_info = SchemaBasicInfo() + + # Define basic info mappings + basic_info_mappings = [ + (schema_basic_info.name, model_name), + (schema_basic_info.type, _safe_getattr(model, "type")), + (schema_basic_info.description, _safe_getattr(model, "description")), + (schema_basic_info.business_name, _safe_getattr(model, "business_name")), + (schema_basic_info.physical_name, _safe_getattr(model, "physical_name")), + (schema_basic_info.data_granularity, _safe_getattr(model, "data_granularity")), + (schema_basic_info.tags, ", ".join(getattr(model, "tags", []) or [])) + ] + + # Populate cells + for field_info, value in basic_info_mappings: + field_info.cells.append(CellValue( + field_info.header_cell.column_position, + field_info.header_cell.row_position + 1, + value + )) + + write_to_sheet(schema_basic_info, ws_schema) + +def _populate_schema_detailed_info(ws_schema, model_fields): + """Populate detailed field information in the worksheet.""" + schema_detailed_info = SchemaFullInfo() + + for counter, (field_name, field) in enumerate(model_fields.items(), start=1): + _populate_schema_field_data(schema_detailed_info, field, counter) + + write_to_sheet(schema_detailed_info, ws_schema) + + +def _populate_schema_field_data(schema_detailed_info, field, counter: int): + """Populate data for a single field across all detail categories.""" + # print(f"Populating field data for: {field} with counter {counter}") + # Define field mappings with their corresponding values + field_mappings = [ + (schema_detailed_info.property, _safe_getattr(field, "title")), + (schema_detailed_info.type, _safe_getattr(field, "type")), + (schema_detailed_info.logical_type, _safe_getattr(field, "logicalType")), + (schema_detailed_info.physical_type, _safe_getattr(field, "physicalType")), + (schema_detailed_info.examples, _format_list_value(getattr(field, "examples", []))), + (schema_detailed_info.description, _safe_getattr(field, "description")), + (schema_detailed_info.required, _safe_getattr(field, "required")), + (schema_detailed_info.unique, _safe_getattr(field, "unique")), + (schema_detailed_info.classification, _safe_getattr(field, "classification")), + (schema_detailed_info.tags, _format_list_value(getattr(field, "tags", []))), + (schema_detailed_info.quality_description, _safe_getattr(field, "qualityDescription")), + (schema_detailed_info.quality_type, _safe_getattr(field, "qualityType")), + (schema_detailed_info.authoritative_definition_url, _safe_getattr(field, "authoritativeDefinitionUrl")), + (schema_detailed_info.authoritative_definition_type, _safe_getattr(field, "authoritativeDefinitionType")), + (schema_detailed_info.physical_name, _safe_getattr(field, "physicalName")), + (schema_detailed_info.primary_key, _format_list_value(getattr(field, "primary", []))), + (schema_detailed_info.primary_key_position, _safe_getattr(field, "primaryKeyPosition")), + (schema_detailed_info.partitioned, _safe_getattr(field, "partitioned")), + (schema_detailed_info.partition_key_position, _safe_getattr(field, "partitionKeyPosition")), + (schema_detailed_info.encrypted_name, _safe_str_getattr(field, "encryptedName")), + (schema_detailed_info.transform_sources, _format_list_value(getattr(field, "transformSources", []))), + (schema_detailed_info.transform_logic, _safe_getattr(field, "transformLogic")), + (schema_detailed_info.transform_description, _safe_getattr(field, "transformDescription")), + (schema_detailed_info.critical_data_element_status, _safe_str_getattr(field, "criticalDataElementStatus")), + (schema_detailed_info.maximum_items, _safe_str_getattr(field, "maximumItems")), + (schema_detailed_info.minimum_items, _safe_str_getattr(field, "minimumItems")), + (schema_detailed_info.unique_items, _safe_str_getattr(field, "uniqueItems")), + (schema_detailed_info.format, _safe_getattr(field, "format")), + (schema_detailed_info.minimum_length, _safe_str_getattr(field, "minimumLength")), + (schema_detailed_info.maximum_length, _safe_str_getattr(field, "maximumlength")), + (schema_detailed_info.exclusive_minimum, _safe_str_getattr(field, "exclusiveMinimum")), + (schema_detailed_info.minimum, _safe_str_getattr(field, "minimum")), + (schema_detailed_info.exclusive_maximum, _safe_str_getattr(field, "exclusiveMaximum")), + (schema_detailed_info.maximum, _safe_str_getattr(field, "maximum")), + (schema_detailed_info.multiple_of, _safe_str_getattr(field, "multiple_of")), + (schema_detailed_info.minimum_properties, _safe_str_getattr(field, "minimumProperties")), + (schema_detailed_info.maximum_properties, _safe_str_getattr(field, "maximumProperties")), + (schema_detailed_info.required_properties, "".join(getattr(field, "requiredProperties", []) or [])), + (schema_detailed_info.pattern, _safe_getattr(field, "pattern")) + ] + + # Populate all field data + for field_info, value in field_mappings: + field_info.cells.append(CellValue( + field_info.header_cell.column_position + counter, + field_info.header_cell.row_position, + value + )) + +def _populate_support_info(ws_schema, info): + """Populate detailed field information in the worksheet.""" + if not info: + return + + support_info = Support() + + for counter, (field_name, field) in enumerate(info.items(), start=1): + _populate_support_field_info(support_info, field, counter) + + write_to_sheet(support_info, ws_schema) + +def _populate_support_field_info( + support_field_info, + info_field, + counter: int +) -> None: + """ + Populate the support sheet from exactly one Contact object (or None). + """ + + + mappings = [ + (support_field_info.channel, _safe_getattr(info_field, "name")), + (support_field_info.channel_url, _safe_getattr(info_field, "url")), + (support_field_info.description, _safe_getattr(info_field, "description")), + (support_field_info.tool, _safe_getattr(info_field, "tool")), + (support_field_info.scope, _safe_getattr(info_field, "scope")), + (support_field_info.invitation_url, _safe_getattr(info_field, "invitation_url")), + ] + print(f"Populating support info with mappings: {info_field}") + + for elem, val in mappings: + elem.cells.append( + CellValue( + elem.header_cell.column_position + counter, + elem.header_cell.row_position, + val + ) + ) + + + +def _format_list_value(value_list) -> str: + """Format a list value as a comma-separated string.""" + if not value_list: + return "" + return ", ".join(str(item) for item in value_list) + + +def _safe_getattr(obj, attr: str, default=""): + """Safely get attribute with default value, handling None cases.""" + value = getattr(obj, attr, default) + return value if value is not None else default + + +def _safe_str_getattr(obj, attr: str, default=""): + """Safely get attribute as string with default value, handling None cases.""" + value = getattr(obj, attr, default) + if value is None: + return default + return str(value) + + # if data_contract_spec.info: + # if data_contract_spec.info.contact: + # support_info = Support( + # channel=getattr(data_contract_spec.info.contact, "name", ""), + # channel_url=getattr(data_contract_spec.info.contact, "url", ""), + # description=getattr(data_contract_spec.info.contact, "description", ""), + # tool=getattr(data_contract_spec.info.contact, "tool", ""), + # scope=getattr(data_contract_spec.info.contact, "scope", ""), + # invitation_url=getattr( + # data_contract_spec.info.contact, "invitation_url", "" + # ), + # ) + # write_to_sheet(support_info, ws_support) + + # if data_contract_spec.terms: + # fundamentals_info = Fundamentals( + # kind=getattr(data_contract_spec.terms, "kind", ""), + # api_version=getattr(data_contract_spec.terms, "api_version", ""), + # id=getattr(data_contract_spec.terms, "id", ""), + # name=getattr(data_contract_spec.terms, "name", ""), + # version=getattr(data_contract_spec.terms, "version", ""), + # status=getattr(data_contract_spec.terms, "status", ""), + # owner=getattr(data_contract_spec.terms, "owner", ""), + # domain=getattr(data_contract_spec.terms, "domain", ""), + # data_product=getattr(data_contract_spec.terms, "data_product", ""), + # tenant=getattr(data_contract_spec.terms, "tenant", ""), + # description=getattr(data_contract_spec.terms, "description", ""), + # description_purpose=getattr(data_contract_spec.terms, "purpose", ""), + # description_limitation=getattr(data_contract_spec.terms, "limitations", ""), + # description_usage=getattr(data_contract_spec.terms, "usage", ""), + # tags=", ".join(getattr(data_contract_spec.terms, "tags", []) or []), + # ) + # write_to_sheet(fundamentals_info, ws_fundamentals) + + + +def to_camel_case(text: str) -> str: + words = text.split() + if not words: + return "" + + first_word = words[0].lower() + rest = [word.capitalize() for word in words[1:]] + return first_word + "".join(rest) + + +def write_to_sheet(sheet_mapped_obj, worksheet: Worksheet): + """ + Writes data from a dataclass object to an Excel worksheet. + Handles 'layout' (row/column) and 'span_cells'/'span_columns' for lists. + Note: This version does not explicitly clear cells beyond the written data. + If a new list is shorter than previous data in the Excel file, + old values may persist in the remaining cells. + """ + for field in fields(sheet_mapped_obj): + # print(f"Processing field: {field.name} with layout: {field.metadata.get('layout', 'column')}") + for contract_element_cell in getattr(sheet_mapped_obj, field.name).cells: + row_position = contract_element_cell.row_position + column_position = contract_element_cell.column_position + print(f"Writing to cell at ({row_position}, {column_position}): {contract_element_cell.value}") + cell = worksheet.cell(row=row_position, column=column_position) + cell.value = contract_element_cell.value From e7646f43bad557ca5559d7caa409373b1be10c6c Mon Sep 17 00:00:00 2001 From: Eniwoke Cornelius Date: Tue, 3 Jun 2025 00:24:05 +0100 Subject: [PATCH 3/6] update excel converter --- datacontract/export/excel_converter.py | 131 +++++++++++++------------ 1 file changed, 69 insertions(+), 62 deletions(-) diff --git a/datacontract/export/excel_converter.py b/datacontract/export/excel_converter.py index fa6c583c2..e39913f0e 100644 --- a/datacontract/export/excel_converter.py +++ b/datacontract/export/excel_converter.py @@ -278,73 +278,73 @@ class Pricing(): @dataclass class Fundamentals(): kind: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 4, "Kind"), + header_cell=CellValue(1, 4, "Kind"), layout="row", cells=[], )) api_version: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 5, "apiVersion"), + header_cell=CellValue(1, 5, "apiVersion"), layout="row", cells=[], )) id: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 7, "ID"), + header_cell=CellValue(1, 7, "ID"), layout="row", cells=[], )) name: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 8, "Name"), + header_cell=CellValue(1, 8, "Name"), layout="row", cells=[], )) version: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 9, "Version"), + header_cell=CellValue(1, 9, "Version"), layout="row", cells=[], )) status: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 10, "Status"), + header_cell=CellValue(1, 10, "Status"), layout="row", cells=[], )) owner: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 12, "Owner"), + header_cell=CellValue(1, 12, "Owner"), layout="row", cells=[], )) domain: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 13, "Domain"), + header_cell=CellValue(1, 14, "Domain"), layout="row", cells=[], )) data_product: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 13, "Data Product"), + header_cell=CellValue(1, 15, "Data Product"), layout="row", cells=[], )) tenant: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 16, "Tenant"), + header_cell=CellValue(1, 16, "Tenant"), layout="row", cells=[], )) description_purpose: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 19, "Purpose"), + header_cell=CellValue(2, 19, "Purpose"), layout="row", cells=[], )) description_limitation: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 20, "Limitations"), + header_cell=CellValue(2, 20, "Limitations"), layout="row", cells=[], )) description_usage: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 21, "Usage"), + header_cell=CellValue(2, 21, "Usage"), layout="row", cells=[], )) tags: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 23, "Tags"), + header_cell=CellValue(2, 23, "Tags"), layout="row", cells=[], )) @@ -352,32 +352,32 @@ class Fundamentals(): @dataclass class Support(): channel: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 5, "Channel"), + header_cell=CellValue(1, 4, "Channel"), layout="column", cells=[], )) channel_url: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(2, 5, "Channel URL"), + header_cell=CellValue(2, 4, "Channel URL"), layout="column", cells=[], )) description: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue( 3, 5, "Description"), + header_cell=CellValue( 3, 4, "Description"), layout="column", cells=[], )) tool: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(4, 5, "Tool"), + header_cell=CellValue(4, 4, "Tool"), layout="column", cells=[], )) scope: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(5, 5, "Scope"), + header_cell=CellValue(5, 4, "Scope"), layout="column", cells=[], )) invitation_url: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(6, 5, "Invitation URL"), + header_cell=CellValue(6, 4, "Invitation URL"), layout="column", cells=[], )) @@ -404,7 +404,10 @@ def to_excel(data_contract_spec: DataContractSpecification): info = getattr(data_contract_spec, "info", None) contact = getattr(info, "contact", None) if info else None - _create_support_worksheet(wb, wb["Support"], model_name, contact) + _create_support_worksheet(wb, wb["Support"], contact) + _create_fundamentals_worksheet( + wb, wb["Fundamentals"], data_contract_spec.terms + ) wb.save("excel_export.xlsx") return wb @@ -423,7 +426,7 @@ def _create_schema_worksheet(wb, ws_template_schema, model_name: str, model): if model.fields: _populate_schema_detailed_info(ws_schema, model.fields) -def _create_support_worksheet(wb, ws_template_support, model_name: str, contact: Optional[Contact]): +def _create_support_worksheet(wb, ws_template_support, contact: Optional[Contact]): """Create and populate a support worksheet for a given model.""" # Create new worksheet from template ws_support = ws_template_support @@ -521,6 +524,47 @@ def _populate_schema_field_data(schema_detailed_info, field, counter: int): value )) +def _create_fundamentals_worksheet(wb, ws_fundamentals_schema, terms, make_copy=False): + """Create and populate a fundamentals worksheet for a given model.""" + # Create new worksheet from template + + ws_fundamentals = wb.copy_worksheet(ws_fundamentals_schema) if make_copy else ws_fundamentals_schema + ws_fundamentals = ws_fundamentals_schema + ws_fundamentals.title = f"Fundamentals" + + # Populate fundamentals information + _populate_fundamentals_info(ws_fundamentals, terms, 1) + +def _populate_fundamentals_info(ws_fundamentals, terms, counter: int): + """Populate fundamentals information in the worksheet.""" + fundamentals_info = Fundamentals() + fundamentals_mappings = [ + (fundamentals_info.kind, getattr(terms, "kind", "")), + (fundamentals_info.api_version, getattr(terms, "apiVersion", "")), + (fundamentals_info.id, getattr(terms, "id", "")), + (fundamentals_info.name, getattr(terms, "name", "")), + (fundamentals_info.version, getattr(terms, "version", "")), + (fundamentals_info.status, getattr(terms, "status", "")), + (fundamentals_info.owner, getattr(terms, "owner", "")), + (fundamentals_info.domain, getattr(terms, "domain", "")), + (fundamentals_info.data_product, getattr(terms, "dataProduct", "")), + (fundamentals_info.tenant, getattr(terms, "tenant", "")), + (fundamentals_info.description_purpose, getattr(terms, "purpose", "")), + (fundamentals_info.description_limitation, getattr(terms, "limitations", "")), + (fundamentals_info.description_usage, getattr(terms, "usage", "")), + (fundamentals_info.tags, ", ".join(getattr(terms, "tags", []) or [])) + ] + + # Populate all field data + for field_info, value in fundamentals_mappings: + field_info.cells.append(CellValue( + field_info.header_cell.column_position - 1, + field_info.header_cell.row_position + counter, + value + )) + write_to_sheet(fundamentals_info, ws_fundamentals) + + def _populate_support_info(ws_schema, info): """Populate detailed field information in the worksheet.""" if not info: @@ -528,8 +572,8 @@ def _populate_support_info(ws_schema, info): support_info = Support() - for counter, (field_name, field) in enumerate(info.items(), start=1): - _populate_support_field_info(support_info, field, counter) + # for counter, (field_name, field) in enumerate(info, start=1): + _populate_support_field_info(support_info, info, 1) write_to_sheet(support_info, ws_schema) @@ -549,9 +593,8 @@ def _populate_support_field_info( (support_field_info.description, _safe_getattr(info_field, "description")), (support_field_info.tool, _safe_getattr(info_field, "tool")), (support_field_info.scope, _safe_getattr(info_field, "scope")), - (support_field_info.invitation_url, _safe_getattr(info_field, "invitation_url")), + (support_field_info.invitation_url, _safe_getattr(info_field, "invitationUrl")), ] - print(f"Populating support info with mappings: {info_field}") for elem, val in mappings: elem.cells.append( @@ -584,42 +627,6 @@ def _safe_str_getattr(obj, attr: str, default=""): return default return str(value) - # if data_contract_spec.info: - # if data_contract_spec.info.contact: - # support_info = Support( - # channel=getattr(data_contract_spec.info.contact, "name", ""), - # channel_url=getattr(data_contract_spec.info.contact, "url", ""), - # description=getattr(data_contract_spec.info.contact, "description", ""), - # tool=getattr(data_contract_spec.info.contact, "tool", ""), - # scope=getattr(data_contract_spec.info.contact, "scope", ""), - # invitation_url=getattr( - # data_contract_spec.info.contact, "invitation_url", "" - # ), - # ) - # write_to_sheet(support_info, ws_support) - - # if data_contract_spec.terms: - # fundamentals_info = Fundamentals( - # kind=getattr(data_contract_spec.terms, "kind", ""), - # api_version=getattr(data_contract_spec.terms, "api_version", ""), - # id=getattr(data_contract_spec.terms, "id", ""), - # name=getattr(data_contract_spec.terms, "name", ""), - # version=getattr(data_contract_spec.terms, "version", ""), - # status=getattr(data_contract_spec.terms, "status", ""), - # owner=getattr(data_contract_spec.terms, "owner", ""), - # domain=getattr(data_contract_spec.terms, "domain", ""), - # data_product=getattr(data_contract_spec.terms, "data_product", ""), - # tenant=getattr(data_contract_spec.terms, "tenant", ""), - # description=getattr(data_contract_spec.terms, "description", ""), - # description_purpose=getattr(data_contract_spec.terms, "purpose", ""), - # description_limitation=getattr(data_contract_spec.terms, "limitations", ""), - # description_usage=getattr(data_contract_spec.terms, "usage", ""), - # tags=", ".join(getattr(data_contract_spec.terms, "tags", []) or []), - # ) - # write_to_sheet(fundamentals_info, ws_fundamentals) - - - def to_camel_case(text: str) -> str: words = text.split() if not words: From 5d223524e470e3fdd54b140eaa78b638760442a8 Mon Sep 17 00:00:00 2001 From: Eniwoke Cornelius Date: Tue, 3 Jun 2025 00:24:34 +0100 Subject: [PATCH 4/6] add template --- datacontract/schemas/odcs-template.xlsx | Bin 0 -> 110676 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 datacontract/schemas/odcs-template.xlsx diff --git a/datacontract/schemas/odcs-template.xlsx b/datacontract/schemas/odcs-template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0110493701676de6d4d8d6147c42fdd05e3ee307 GIT binary patch literal 110676 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 Date: Tue, 3 Jun 2025 00:26:18 +0100 Subject: [PATCH 5/6] remove example --- datacontract/schemas/orders-example.xlsx | Bin 97335 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 datacontract/schemas/orders-example.xlsx diff --git a/datacontract/schemas/orders-example.xlsx b/datacontract/schemas/orders-example.xlsx deleted file mode 100644 index 2c9c95da3c5eb21f6c0232eee2b32c9d669fe3a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97335 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
  • 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 E08#7(Hvj+t From 19fd43db890a5142b064104fbf83fcc5b5d21ad4 Mon Sep 17 00:00:00 2001 From: Eniwoke Cornelius Date: Tue, 3 Jun 2025 00:28:05 +0100 Subject: [PATCH 6/6] format --- datacontract/export/excel_converter.py | 1027 ++++++++++++++---------- 1 file changed, 621 insertions(+), 406 deletions(-) diff --git a/datacontract/export/excel_converter.py b/datacontract/export/excel_converter.py index e39913f0e..a26c3e1b5 100644 --- a/datacontract/export/excel_converter.py +++ b/datacontract/export/excel_converter.py @@ -7,13 +7,20 @@ from openpyxl.worksheet.worksheet import Worksheet from datacontract.export.exporter import Exporter -from datacontract.model.data_contract_specification import DataContractSpecification, Info, Contact +from datacontract.model.data_contract_specification import ( + Contact, + DataContractSpecification, + Info, +) EXCEL_TEMPLATE_FILE_PATH = "datacontract/schemas/odcs-template.xlsx" CellValue = namedtuple("CellValue", ["row_position", "column_position", "value"]) + class ContractElements: - def __init__(self, header_cell: CellValue, layout: str, cells: List[CellValue] = []): + def __init__( + self, header_cell: CellValue, layout: str, cells: List[CellValue] = [] + ): self.header_cell = header_cell self.layout = layout self.cells = cells @@ -21,366 +28,509 @@ def __init__(self, header_cell: CellValue, layout: str, cells: List[CellValue] = def __repr__(self): return f"ContractElements(header_cell={self.header_cell}, layout={self.layout})" + @dataclass class SchemaBasicInfo: - name: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue( 1, 5, "Name"), - layout="column", - cells=[], - )) - type: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 6, "Type"), - layout="column", - cells=[], - )) - description: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 7, "Description"), - layout="column", - cells=[], - )) - business_name: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 8, "Business Name"), - layout="column", - cells=[], - )) - physical_name: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 9, "Physical Name"), - layout="column", - cells=[], - )) - data_granularity: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 10, "Data Granularity"), - layout="column", - cells=[], - )) - tags: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 11, "Tags"), - layout="column", - cells=[], - )) + name: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 5, "Name"), + layout="column", + cells=[], + ) + ) + type: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 6, "Type"), + layout="column", + cells=[], + ) + ) + description: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 7, "Description"), + layout="column", + cells=[], + ) + ) + business_name: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 8, "Business Name"), + layout="column", + cells=[], + ) + ) + physical_name: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 9, "Physical Name"), + layout="column", + cells=[], + ) + ) + data_granularity: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 10, "Data Granularity"), + layout="column", + cells=[], + ) + ) + tags: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 11, "Tags"), + layout="column", + cells=[], + ) + ) + @dataclass -class SchemaFullInfo(): - property: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 13, "Property"), - layout="column", - cells=[], - )) - type: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(2, 13, "Business Name"), - layout="column", - cells=[], - )) - logical_type: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(3, 13, "Logical Type"), - layout="column", - cells=[], - )) - physical_type: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(4, 13, "Physical Type"), - layout="column", - cells=[], - )) - examples: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(5, 13, "Example(s)"), - layout="column", - cells=[], - )) - description: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(6, 13, "Description"), - layout="column", - cells=[], - )) - required: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(7, 13, "Required"), - layout="column", - cells=[], - )) - unique: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(8, 13, "Unique"), - layout="column", - cells=[], - )) - classification: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(9, 13, "Classification"), - layout="column", - cells=[], - )) - tags: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(10, 13, "Tags"), - layout="column", - cells=[], - )) - quality_type: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(11, 13, "Quality Type"), - layout="column", - cells=[], - )) - quality_description: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(12, 13, "Quality Description"), - layout="column", - cells=[], - )) - authoritative_definition_url: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(13, 13, "Authoritative Definition URL"), - layout="column", - cells=[], - )) - authoritative_definition_type: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(14, 13, "Authoritative Definition Type"), - layout="column", - cells=[], - )) - physical_name: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(15, 13, "Physical Name"), - layout="column", - cells=[], - )) - primary_key: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(16, 13, "Primary Key"), - layout="column", - cells=[], - )) - primary_key_position: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(17, 13, "Primary Key Position"), - layout="column", - cells=[], - )) - partitioned: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(18, 13, "Partitioned"), - layout="column", - cells=[], - )) - partition_key_position: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(19, 13, "Partition Key Position"), - layout="column", - cells=[], - )) - encrypted_name: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(20, 13, "Encrypted Name"), - layout="column", - cells=[], - )) - transform_sources: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(21, 13, "Transform Sources"), - layout="column", - cells=[], - )) - transform_logic: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(22, 13, "Transform Logic"), - layout="column", - cells=[], - )) - transform_description: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(23, 13, "Transform Description"), - layout="column", - cells=[], - )) - critical_data_element_status: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(24, 13, "Critical Data Element Status"), - layout="column", - cells=[], - )) - maximum_items: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(25, 13, "Maximum Items"), - layout="column", - cells=[], - )) - minimum_items: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(26, 13, "Minimum Items"), - layout="column", - cells=[], - )) - unique_items: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(27, 13, "Unique Items"), - layout="column", - cells=[], - )) - format: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(28, 13, "Format"), - layout="column", - cells=[], - )) - minimum_length: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(29, 13, "Minimum Length"), - layout="column", - cells=[], - )) - maximum_length: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(30, 13, "Maximum Length"), - layout="column", - cells=[], - )) - exclusive_minimum: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(31, 13, "Exclusive Minimum"), - layout="column", - cells=[], - )) - minimum: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(32, 13, "Minimum"), - layout="column", - cells=[], - )) - exclusive_maximum: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(33, 13, "Exclusive Maximum"), - layout="column", - cells=[], - )) - maximum: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(34, 13, "Maximum"), - layout="column", - cells=[], - )) - multiple_of: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(35, 13, "Multiple Of"), - layout="column", - cells=[], - )) - minimum_properties: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(36, 13, "Minimum Properties"), - layout="column", - cells=[], - )) - maximum_properties: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(37, 13, "Maximum Properties"), - layout="column", - cells=[], - )) - required_properties: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(38, 13, "Required Properties"), - layout="column", - cells=[], - )) - pattern: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(39, 13, "Pattern"), - layout="column", - cells=[], - )) +class SchemaFullInfo: + property: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 13, "Property"), + layout="column", + cells=[], + ) + ) + type: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(2, 13, "Business Name"), + layout="column", + cells=[], + ) + ) + logical_type: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(3, 13, "Logical Type"), + layout="column", + cells=[], + ) + ) + physical_type: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(4, 13, "Physical Type"), + layout="column", + cells=[], + ) + ) + examples: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(5, 13, "Example(s)"), + layout="column", + cells=[], + ) + ) + description: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(6, 13, "Description"), + layout="column", + cells=[], + ) + ) + required: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(7, 13, "Required"), + layout="column", + cells=[], + ) + ) + unique: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(8, 13, "Unique"), + layout="column", + cells=[], + ) + ) + classification: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(9, 13, "Classification"), + layout="column", + cells=[], + ) + ) + tags: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(10, 13, "Tags"), + layout="column", + cells=[], + ) + ) + quality_type: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(11, 13, "Quality Type"), + layout="column", + cells=[], + ) + ) + quality_description: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(12, 13, "Quality Description"), + layout="column", + cells=[], + ) + ) + authoritative_definition_url: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(13, 13, "Authoritative Definition URL"), + layout="column", + cells=[], + ) + ) + authoritative_definition_type: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(14, 13, "Authoritative Definition Type"), + layout="column", + cells=[], + ) + ) + physical_name: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(15, 13, "Physical Name"), + layout="column", + cells=[], + ) + ) + primary_key: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(16, 13, "Primary Key"), + layout="column", + cells=[], + ) + ) + primary_key_position: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(17, 13, "Primary Key Position"), + layout="column", + cells=[], + ) + ) + partitioned: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(18, 13, "Partitioned"), + layout="column", + cells=[], + ) + ) + partition_key_position: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(19, 13, "Partition Key Position"), + layout="column", + cells=[], + ) + ) + encrypted_name: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(20, 13, "Encrypted Name"), + layout="column", + cells=[], + ) + ) + transform_sources: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(21, 13, "Transform Sources"), + layout="column", + cells=[], + ) + ) + transform_logic: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(22, 13, "Transform Logic"), + layout="column", + cells=[], + ) + ) + transform_description: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(23, 13, "Transform Description"), + layout="column", + cells=[], + ) + ) + critical_data_element_status: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(24, 13, "Critical Data Element Status"), + layout="column", + cells=[], + ) + ) + maximum_items: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(25, 13, "Maximum Items"), + layout="column", + cells=[], + ) + ) + minimum_items: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(26, 13, "Minimum Items"), + layout="column", + cells=[], + ) + ) + unique_items: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(27, 13, "Unique Items"), + layout="column", + cells=[], + ) + ) + format: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(28, 13, "Format"), + layout="column", + cells=[], + ) + ) + minimum_length: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(29, 13, "Minimum Length"), + layout="column", + cells=[], + ) + ) + maximum_length: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(30, 13, "Maximum Length"), + layout="column", + cells=[], + ) + ) + exclusive_minimum: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(31, 13, "Exclusive Minimum"), + layout="column", + cells=[], + ) + ) + minimum: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(32, 13, "Minimum"), + layout="column", + cells=[], + ) + ) + exclusive_maximum: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(33, 13, "Exclusive Maximum"), + layout="column", + cells=[], + ) + ) + maximum: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(34, 13, "Maximum"), + layout="column", + cells=[], + ) + ) + multiple_of: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(35, 13, "Multiple Of"), + layout="column", + cells=[], + ) + ) + minimum_properties: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(36, 13, "Minimum Properties"), + layout="column", + cells=[], + ) + ) + maximum_properties: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(37, 13, "Maximum Properties"), + layout="column", + cells=[], + ) + ) + required_properties: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(38, 13, "Required Properties"), + layout="column", + cells=[], + ) + ) + pattern: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(39, 13, "Pattern"), + layout="column", + cells=[], + ) + ) + @dataclass -class Pricing(): - price_amount: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(2, 4, "Price Amount"), - layout="column", - cells=[], - )) - price_currency: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(2, 5, "Price Currency"), - layout="column", - cells=[], - )) - price_unit: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(2, 6, "Price Unit"), - layout="column", - cells=[], - )) +class Pricing: + price_amount: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(2, 4, "Price Amount"), + layout="column", + cells=[], + ) + ) + price_currency: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(2, 5, "Price Currency"), + layout="column", + cells=[], + ) + ) + price_unit: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(2, 6, "Price Unit"), + layout="column", + cells=[], + ) + ) + @dataclass -class Fundamentals(): - kind: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 4, "Kind"), - layout="row", - cells=[], - )) - - api_version: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 5, "apiVersion"), - layout="row", - cells=[], - )) - id: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 7, "ID"), - layout="row", - cells=[], - )) - name: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 8, "Name"), - layout="row", - cells=[], - )) - version: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 9, "Version"), - layout="row", - cells=[], - )) - status: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 10, "Status"), - layout="row", - cells=[], - )) - owner: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 12, "Owner"), - layout="row", - cells=[], - )) - domain: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 14, "Domain"), - layout="row", - cells=[], - )) - data_product: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 15, "Data Product"), - layout="row", - cells=[], - )) - tenant: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 16, "Tenant"), - layout="row", - cells=[], - )) - description_purpose: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(2, 19, "Purpose"), - layout="row", - cells=[], - )) - description_limitation: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(2, 20, "Limitations"), - layout="row", - cells=[], - )) - description_usage: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(2, 21, "Usage"), - layout="row", - cells=[], - )) - tags: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(2, 23, "Tags"), - layout="row", - cells=[], - )) +class Fundamentals: + kind: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 4, "Kind"), + layout="row", + cells=[], + ) + ) + + api_version: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 5, "apiVersion"), + layout="row", + cells=[], + ) + ) + id: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 7, "ID"), + layout="row", + cells=[], + ) + ) + name: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 8, "Name"), + layout="row", + cells=[], + ) + ) + version: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 9, "Version"), + layout="row", + cells=[], + ) + ) + status: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 10, "Status"), + layout="row", + cells=[], + ) + ) + owner: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 12, "Owner"), + layout="row", + cells=[], + ) + ) + domain: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 14, "Domain"), + layout="row", + cells=[], + ) + ) + data_product: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 15, "Data Product"), + layout="row", + cells=[], + ) + ) + tenant: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 16, "Tenant"), + layout="row", + cells=[], + ) + ) + description_purpose: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(2, 19, "Purpose"), + layout="row", + cells=[], + ) + ) + description_limitation: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(2, 20, "Limitations"), + layout="row", + cells=[], + ) + ) + description_usage: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(2, 21, "Usage"), + layout="row", + cells=[], + ) + ) + tags: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(2, 23, "Tags"), + layout="row", + cells=[], + ) + ) + @dataclass -class Support(): - channel: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(1, 4, "Channel"), - layout="column", - cells=[], - )) - channel_url: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(2, 4, "Channel URL"), - layout="column", - cells=[], - )) - description: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue( 3, 4, "Description"), - layout="column", - cells=[], - )) - tool: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(4, 4, "Tool"), - layout="column", - cells=[], - )) - scope: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(5, 4, "Scope"), - layout="column", - cells=[], - )) - invitation_url: ContractElements = field(default_factory=lambda: ContractElements( - header_cell=CellValue(6, 4, "Invitation URL"), - layout="column", - cells=[], - )) +class Support: + channel: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(1, 4, "Channel"), + layout="column", + cells=[], + ) + ) + channel_url: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(2, 4, "Channel URL"), + layout="column", + cells=[], + ) + ) + description: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(3, 4, "Description"), + layout="column", + cells=[], + ) + ) + tool: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(4, 4, "Tool"), + layout="column", + cells=[], + ) + ) + scope: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(5, 4, "Scope"), + layout="column", + cells=[], + ) + ) + invitation_url: ContractElements = field( + default_factory=lambda: ContractElements( + header_cell=CellValue(6, 4, "Invitation URL"), + layout="column", + cells=[], + ) + ) class ExcelExporter(Exporter): @@ -405,9 +555,7 @@ def to_excel(data_contract_spec: DataContractSpecification): info = getattr(data_contract_spec, "info", None) contact = getattr(info, "contact", None) if info else None _create_support_worksheet(wb, wb["Support"], contact) - _create_fundamentals_worksheet( - wb, wb["Fundamentals"], data_contract_spec.terms - ) + _create_fundamentals_worksheet(wb, wb["Fundamentals"], data_contract_spec.terms) wb.save("excel_export.xlsx") return wb @@ -426,6 +574,7 @@ def _create_schema_worksheet(wb, ws_template_schema, model_name: str, model): if model.fields: _populate_schema_detailed_info(ws_schema, model.fields) + def _create_support_worksheet(wb, ws_template_support, contact: Optional[Contact]): """Create and populate a support worksheet for a given model.""" # Create new worksheet from template @@ -435,6 +584,7 @@ def _create_support_worksheet(wb, ws_template_support, contact: Optional[Contact # Populate support information _populate_support_info(ws_support, contact) + def _populate_schema_basic_info(ws_schema, model_name: str, model): """Populate basic schema information in the worksheet.""" schema_basic_info = SchemaBasicInfo() @@ -447,19 +597,22 @@ def _populate_schema_basic_info(ws_schema, model_name: str, model): (schema_basic_info.business_name, _safe_getattr(model, "business_name")), (schema_basic_info.physical_name, _safe_getattr(model, "physical_name")), (schema_basic_info.data_granularity, _safe_getattr(model, "data_granularity")), - (schema_basic_info.tags, ", ".join(getattr(model, "tags", []) or [])) + (schema_basic_info.tags, ", ".join(getattr(model, "tags", []) or [])), ] # Populate cells for field_info, value in basic_info_mappings: - field_info.cells.append(CellValue( - field_info.header_cell.column_position, - field_info.header_cell.row_position + 1, - value - )) + field_info.cells.append( + CellValue( + field_info.header_cell.column_position, + field_info.header_cell.row_position + 1, + value, + ) + ) write_to_sheet(schema_basic_info, ws_schema) + def _populate_schema_detailed_info(ws_schema, model_fields): """Populate detailed field information in the worksheet.""" schema_detailed_info = SchemaFullInfo() @@ -479,62 +632,124 @@ def _populate_schema_field_data(schema_detailed_info, field, counter: int): (schema_detailed_info.type, _safe_getattr(field, "type")), (schema_detailed_info.logical_type, _safe_getattr(field, "logicalType")), (schema_detailed_info.physical_type, _safe_getattr(field, "physicalType")), - (schema_detailed_info.examples, _format_list_value(getattr(field, "examples", []))), + ( + schema_detailed_info.examples, + _format_list_value(getattr(field, "examples", [])), + ), (schema_detailed_info.description, _safe_getattr(field, "description")), (schema_detailed_info.required, _safe_getattr(field, "required")), (schema_detailed_info.unique, _safe_getattr(field, "unique")), (schema_detailed_info.classification, _safe_getattr(field, "classification")), (schema_detailed_info.tags, _format_list_value(getattr(field, "tags", []))), - (schema_detailed_info.quality_description, _safe_getattr(field, "qualityDescription")), + ( + schema_detailed_info.quality_description, + _safe_getattr(field, "qualityDescription"), + ), (schema_detailed_info.quality_type, _safe_getattr(field, "qualityType")), - (schema_detailed_info.authoritative_definition_url, _safe_getattr(field, "authoritativeDefinitionUrl")), - (schema_detailed_info.authoritative_definition_type, _safe_getattr(field, "authoritativeDefinitionType")), + ( + schema_detailed_info.authoritative_definition_url, + _safe_getattr(field, "authoritativeDefinitionUrl"), + ), + ( + schema_detailed_info.authoritative_definition_type, + _safe_getattr(field, "authoritativeDefinitionType"), + ), (schema_detailed_info.physical_name, _safe_getattr(field, "physicalName")), - (schema_detailed_info.primary_key, _format_list_value(getattr(field, "primary", []))), - (schema_detailed_info.primary_key_position, _safe_getattr(field, "primaryKeyPosition")), + ( + schema_detailed_info.primary_key, + _format_list_value(getattr(field, "primary", [])), + ), + ( + schema_detailed_info.primary_key_position, + _safe_getattr(field, "primaryKeyPosition"), + ), (schema_detailed_info.partitioned, _safe_getattr(field, "partitioned")), - (schema_detailed_info.partition_key_position, _safe_getattr(field, "partitionKeyPosition")), - (schema_detailed_info.encrypted_name, _safe_str_getattr(field, "encryptedName")), - (schema_detailed_info.transform_sources, _format_list_value(getattr(field, "transformSources", []))), + ( + schema_detailed_info.partition_key_position, + _safe_getattr(field, "partitionKeyPosition"), + ), + ( + schema_detailed_info.encrypted_name, + _safe_str_getattr(field, "encryptedName"), + ), + ( + schema_detailed_info.transform_sources, + _format_list_value(getattr(field, "transformSources", [])), + ), (schema_detailed_info.transform_logic, _safe_getattr(field, "transformLogic")), - (schema_detailed_info.transform_description, _safe_getattr(field, "transformDescription")), - (schema_detailed_info.critical_data_element_status, _safe_str_getattr(field, "criticalDataElementStatus")), + ( + schema_detailed_info.transform_description, + _safe_getattr(field, "transformDescription"), + ), + ( + schema_detailed_info.critical_data_element_status, + _safe_str_getattr(field, "criticalDataElementStatus"), + ), (schema_detailed_info.maximum_items, _safe_str_getattr(field, "maximumItems")), (schema_detailed_info.minimum_items, _safe_str_getattr(field, "minimumItems")), (schema_detailed_info.unique_items, _safe_str_getattr(field, "uniqueItems")), (schema_detailed_info.format, _safe_getattr(field, "format")), - (schema_detailed_info.minimum_length, _safe_str_getattr(field, "minimumLength")), - (schema_detailed_info.maximum_length, _safe_str_getattr(field, "maximumlength")), - (schema_detailed_info.exclusive_minimum, _safe_str_getattr(field, "exclusiveMinimum")), + ( + schema_detailed_info.minimum_length, + _safe_str_getattr(field, "minimumLength"), + ), + ( + schema_detailed_info.maximum_length, + _safe_str_getattr(field, "maximumlength"), + ), + ( + schema_detailed_info.exclusive_minimum, + _safe_str_getattr(field, "exclusiveMinimum"), + ), (schema_detailed_info.minimum, _safe_str_getattr(field, "minimum")), - (schema_detailed_info.exclusive_maximum, _safe_str_getattr(field, "exclusiveMaximum")), + ( + schema_detailed_info.exclusive_maximum, + _safe_str_getattr(field, "exclusiveMaximum"), + ), (schema_detailed_info.maximum, _safe_str_getattr(field, "maximum")), (schema_detailed_info.multiple_of, _safe_str_getattr(field, "multiple_of")), - (schema_detailed_info.minimum_properties, _safe_str_getattr(field, "minimumProperties")), - (schema_detailed_info.maximum_properties, _safe_str_getattr(field, "maximumProperties")), - (schema_detailed_info.required_properties, "".join(getattr(field, "requiredProperties", []) or [])), - (schema_detailed_info.pattern, _safe_getattr(field, "pattern")) + ( + schema_detailed_info.minimum_properties, + _safe_str_getattr(field, "minimumProperties"), + ), + ( + schema_detailed_info.maximum_properties, + _safe_str_getattr(field, "maximumProperties"), + ), + ( + schema_detailed_info.required_properties, + "".join(getattr(field, "requiredProperties", []) or []), + ), + (schema_detailed_info.pattern, _safe_getattr(field, "pattern")), ] # Populate all field data for field_info, value in field_mappings: - field_info.cells.append(CellValue( - field_info.header_cell.column_position + counter, - field_info.header_cell.row_position, - value - )) + field_info.cells.append( + CellValue( + field_info.header_cell.column_position + counter, + field_info.header_cell.row_position, + value, + ) + ) + def _create_fundamentals_worksheet(wb, ws_fundamentals_schema, terms, make_copy=False): """Create and populate a fundamentals worksheet for a given model.""" # Create new worksheet from template - ws_fundamentals = wb.copy_worksheet(ws_fundamentals_schema) if make_copy else ws_fundamentals_schema + ws_fundamentals = ( + wb.copy_worksheet(ws_fundamentals_schema) + if make_copy + else ws_fundamentals_schema + ) ws_fundamentals = ws_fundamentals_schema ws_fundamentals.title = f"Fundamentals" # Populate fundamentals information _populate_fundamentals_info(ws_fundamentals, terms, 1) + def _populate_fundamentals_info(ws_fundamentals, terms, counter: int): """Populate fundamentals information in the worksheet.""" fundamentals_info = Fundamentals() @@ -552,16 +767,18 @@ def _populate_fundamentals_info(ws_fundamentals, terms, counter: int): (fundamentals_info.description_purpose, getattr(terms, "purpose", "")), (fundamentals_info.description_limitation, getattr(terms, "limitations", "")), (fundamentals_info.description_usage, getattr(terms, "usage", "")), - (fundamentals_info.tags, ", ".join(getattr(terms, "tags", []) or [])) + (fundamentals_info.tags, ", ".join(getattr(terms, "tags", []) or [])), ] # Populate all field data for field_info, value in fundamentals_mappings: - field_info.cells.append(CellValue( - field_info.header_cell.column_position - 1, - field_info.header_cell.row_position + counter, - value - )) + field_info.cells.append( + CellValue( + field_info.header_cell.column_position - 1, + field_info.header_cell.row_position + counter, + value, + ) + ) write_to_sheet(fundamentals_info, ws_fundamentals) @@ -577,22 +794,18 @@ def _populate_support_info(ws_schema, info): write_to_sheet(support_info, ws_schema) -def _populate_support_field_info( - support_field_info, - info_field, - counter: int -) -> None: + +def _populate_support_field_info(support_field_info, info_field, counter: int) -> None: """ Populate the support sheet from exactly one Contact object (or None). """ - mappings = [ - (support_field_info.channel, _safe_getattr(info_field, "name")), - (support_field_info.channel_url, _safe_getattr(info_field, "url")), - (support_field_info.description, _safe_getattr(info_field, "description")), - (support_field_info.tool, _safe_getattr(info_field, "tool")), - (support_field_info.scope, _safe_getattr(info_field, "scope")), + (support_field_info.channel, _safe_getattr(info_field, "name")), + (support_field_info.channel_url, _safe_getattr(info_field, "url")), + (support_field_info.description, _safe_getattr(info_field, "description")), + (support_field_info.tool, _safe_getattr(info_field, "tool")), + (support_field_info.scope, _safe_getattr(info_field, "scope")), (support_field_info.invitation_url, _safe_getattr(info_field, "invitationUrl")), ] @@ -601,12 +814,11 @@ def _populate_support_field_info( CellValue( elem.header_cell.column_position + counter, elem.header_cell.row_position, - val + val, ) ) - def _format_list_value(value_list) -> str: """Format a list value as a comma-separated string.""" if not value_list: @@ -627,6 +839,7 @@ def _safe_str_getattr(obj, attr: str, default=""): return default return str(value) + def to_camel_case(text: str) -> str: words = text.split() if not words: @@ -650,6 +863,8 @@ def write_to_sheet(sheet_mapped_obj, worksheet: Worksheet): for contract_element_cell in getattr(sheet_mapped_obj, field.name).cells: row_position = contract_element_cell.row_position column_position = contract_element_cell.column_position - print(f"Writing to cell at ({row_position}, {column_position}): {contract_element_cell.value}") + print( + f"Writing to cell at ({row_position}, {column_position}): {contract_element_cell.value}" + ) cell = worksheet.cell(row=row_position, column=column_position) cell.value = contract_element_cell.value