From 53e11840878c4092e9d645d6422f0a2d30555890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDJ?= <“dj.howard@networktocode.com> Date: Mon, 6 Jan 2025 11:28:33 -0500 Subject: [PATCH 01/15] Added the ability to generate custom_labels with custom ranges. --- changes/140.added | 1 + changes/8.added | 1 + docs/admin/install.md | 126 +++- docs/admin/uninstall.md | 3 - docs/images/add-floor-plan-form.png | Bin 231077 -> 55093 bytes docs/images/add-tile-axis-default.png | Bin 0 -> 75639 bytes docs/images/add-tile-axis-numalpha.png | Bin 0 -> 72206 bytes docs/images/add-tile-axis-roman.png | Bin 0 -> 68334 bytes docs/user/app_getting_started.md | 175 ++++- docs/user/app_overview.md | 2 + nautobot_floor_plan/api/serializers.py | 10 + nautobot_floor_plan/choices.py | 26 +- nautobot_floor_plan/custom_validators.py | 335 +++++++++ nautobot_floor_plan/forms.py | 355 +++++++-- nautobot_floor_plan/label_converters.py | 705 ++++++++++++++++++ nautobot_floor_plan/label_generator.py | 237 ++++++ .../0009_add_custom_label_support.py | 69 ++ nautobot_floor_plan/models.py | 143 +++- nautobot_floor_plan/svg.py | 275 ++++--- nautobot_floor_plan/tables.py | 26 +- .../nautobot_floor_plan/floorplan_create.html | 75 ++ .../floorplan_retrieve.html | 12 +- .../templatetags/seed_helpers.py | 52 +- nautobot_floor_plan/tests/test_converters.py | 361 +++++++++ nautobot_floor_plan/tests/test_forms.py | 455 +++++++++++ .../tests/test_label_generator.py | 327 ++++++++ nautobot_floor_plan/tests/test_tables.py | 52 ++ .../tests/test_template_tags.py | 112 +++ nautobot_floor_plan/utils.py | 50 +- 29 files changed, 3703 insertions(+), 282 deletions(-) create mode 100644 changes/140.added create mode 100644 changes/8.added create mode 100644 docs/images/add-tile-axis-default.png create mode 100644 docs/images/add-tile-axis-numalpha.png create mode 100644 docs/images/add-tile-axis-roman.png create mode 100644 nautobot_floor_plan/custom_validators.py create mode 100644 nautobot_floor_plan/label_converters.py create mode 100644 nautobot_floor_plan/label_generator.py create mode 100644 nautobot_floor_plan/migrations/0009_add_custom_label_support.py create mode 100644 nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_create.html create mode 100644 nautobot_floor_plan/tests/test_converters.py create mode 100644 nautobot_floor_plan/tests/test_label_generator.py create mode 100644 nautobot_floor_plan/tests/test_tables.py create mode 100644 nautobot_floor_plan/tests/test_template_tags.py diff --git a/changes/140.added b/changes/140.added new file mode 100644 index 0000000..cdf070c --- /dev/null +++ b/changes/140.added @@ -0,0 +1 @@ +Added boolean option to allow tiles to be moved or not once placed. \ No newline at end of file diff --git a/changes/8.added b/changes/8.added new file mode 100644 index 0000000..bc90206 --- /dev/null +++ b/changes/8.added @@ -0,0 +1 @@ +Added support for defining custom label ranges. \ No newline at end of file diff --git a/docs/admin/install.md b/docs/admin/install.md index 8d59bef..0574b73 100644 --- a/docs/admin/install.md +++ b/docs/admin/install.md @@ -1,21 +1,24 @@ # Installing the App in Nautobot -Here you will find detailed instructions on how to **install** and **configure** the App within your Nautobot environment. +This section provides detailed instructions on how to **install** and **configure** the app in your Nautobot environment. ## Prerequisites -- The app is compatible with Nautobot 2.0.0 and higher. -- Databases supported: PostgreSQL, MySQL +- Compatible with Nautobot **2.0.0 and higher**. +- Supported databases: **PostgreSQL** and **MySQL**. !!! note - Please check the [dedicated page](compatibility_matrix.md) for a full compatibility matrix and the deprecation policy. + For a full compatibility matrix and details about the deprecation policy, refer to the [Compatibility Matrix](compatibility_matrix.md). ## Install Guide !!! note - Apps can be installed from the [Python Package Index](https://pypi.org/) or locally. See the [Nautobot documentation](https://docs.nautobot.com/projects/core/en/stable/user-guide/administration/installation/app-install/) for more details. The pip package name for this app is [`nautobot-floor-plan`](https://pypi.org/project/nautobot-floor-plan/). + Apps can be installed from the [Python Package Index (PyPI)](https://pypi.org/) or locally. For more details, see the official [Nautobot App Installation Guide](https://docs.nautobot.com/projects/core/en/stable/user-guide/administration/installation/app-install/). + The pip package name for this app is [`nautobot-floor-plan`](https://pypi.org/project/nautobot-floor-plan/). -The app is available as a Python package via PyPI and can be installed with `pip`: +### Step 1: Install the App + +Install the app via PyPI using `pip`: ```shell pip install nautobot-floor-plan @@ -27,6 +30,8 @@ To ensure Nautobot Floor Plan is automatically re-installed during future upgrad echo nautobot-floor-plan >> local_requirements.txt ``` +### Step 2: Configure the App + Once installed, the app needs to be enabled in your Nautobot configuration. The following block of code below shows the additional configuration required to be added to your `nautobot_config.py` file: - Append `"nautobot_floor_plan"` to the `PLUGINS` list. @@ -62,30 +67,103 @@ Then restart the Nautobot services which may include: ```shell sudo systemctl restart nautobot nautobot-worker nautobot-scheduler ``` +# Nautobot Floor Plan App Configuration and Customization -If the App has been installed successfully, the Nautobot web UI should now show a new "Location Floor Plans" menu item under the "Organization" menu. +## Verifying Installation -## App Configuration +Once the app is successfully installed, the Nautobot web UI will display a new "Location Floor Plans" menu item under the **Organization** menu. -The app behavior can be controlled with the following list of settings: +## App Configuration Details -| Key | Example | Default | Description | -|--------------------|-----------|----------|------------------------------------------------------------------------------------------------------------------------------------------------| -| default_x_axis_labels | "letters" | "numbers" | Label style for the floor plan grid. Can use `numbers` or `letters` in order. This setting will set the default selected value in the create form. | -| default_y_axis_labels | "numbers" | "numbers" | Label style for the floor plan grid. Can use `numbers` or `letters` in order. This setting will set the default selected value in the create form. | -| default_statuses| "name": "Active", "color": "4caf50"| See Note Below | A list of name and color key value pairs for the FloorPlanTile model| +The app behavior can be customized with the following configuration settings: + +| Key | Example | Default | Description | +|------------------------|-------------------------------------------|-------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| `default_x_axis_labels` | `"letters"` | `"numbers"` | Defines the label style for the X-axis of the floor plan grid. Options are `numbers` or `letters`. This sets the default value in the create form. | +| `default_y_axis_labels` | `"numbers"` | `"numbers"` | Defines the label style for the Y-axis of the floor plan grid. Options are `numbers` or `letters`. This sets the default value in the create form. | +| `default_statuses` | `{"name": "Active", "color": "4caf50"}` | See note below | A list of name and color key-value pairs for the **FloorPlanTile** model. | !!! note - Defaults for statuses are as follows: + Default statuses are configured as follows: ```python - "default_statuses": { - "FloorPlanTile": [ - {"name": "Active", "color": "4caf50"}, - {"name": "Reserved", "color": "00bcd4"}, - {"name": "Decommissioning", "color": "ffc107"}, - {"name": "Unavailable", "color": "111111"}, - {"name": "Planned", "color": "00bcd4"}, - ], - }, + "default_statuses": { + "FloorPlanTile": [ + {"name": "Active", "color": "4caf50"}, + {"name": "Reserved", "color": "00bcd4"}, + {"name": "Decommissioning", "color": "ffc107"}, + {"name": "Unavailable", "color": "111111"}, + {"name": "Planned", "color": "00bcd4"}, + ], + } ``` + +## Custom Labels + +The app supports custom label types, defined in `choices.py`: + +```python +class CustomAxisLabelsChoices(ChoiceSet): + """Choices for custom axis label types.""" + + ROMAN = "roman" + GREEK = "greek" + BINARY = "binary" + HEX = "hex" + NUMALPHA = "numalpha" + LETTERS = "letters" + ALPHANUMERIC = "alphanumeric" + NUMBERS = "numbers" + + CHOICES = ( + (ROMAN, "Roman (e.g., I, II, III)"), + (GREEK, "Greek (e.g., α, β, γ)"), + (BINARY, "Binary (e.g., 1, 10, 11)"), + (HEX, "Hexadecimal (e.g., 1, A, F)"), + (NUMALPHA, "numalpha (e.g., 02A)"), + (LETTERS, "Letters (e.g., A, B, C)"), + (ALPHANUMERIC, "Alphanumeric (e.g., A01, B02)"), + (NUMBERS, "Numbers (e.g., 1, 2, 3)"), + ) +``` + +### Adding New Custom Labels + +To define new custom label types: + +1. Add the new choice to the `CustomAxisLabelsChoices` class in `choices.py`. +2. Implement a corresponding converter class in `label_converters.py`. + +#### Label Converter Base Class + +All label converters inherit from the base `LabelConverter` class: + +```python +class LabelConverter: + """Base class for label conversion.""" + + def __init__(self): + """Initialize converter.""" + self.current_label = None + + def to_numeric(self, label: str) -> int: + """Convert label to numeric value.""" + raise NotImplementedError + + def from_numeric(self, number: int) -> str: + """Convert numeric value to label.""" + raise NotImplementedError +``` + +The to_numeric and from_numeric methods handle: + +- Converting database integer values to display labels on the Floor Plan grid. +- Converting labels back to the corresponding integer values for database storage. + +### Label Factory + +LabelConverterFactory located in label_converters.py is used to lookup the correct converter that will be used based off of the CustomAxisLabelsChoices class from choices.py to the proper converter class in label_converters.py. + +### Validation Logic + +Custom label validation is handled in custom_validators.py, ensuring that the labels meet the required format and rules before being applied to the Floor Plan. diff --git a/docs/admin/uninstall.md b/docs/admin/uninstall.md index 98296fc..1e46b1f 100644 --- a/docs/admin/uninstall.md +++ b/docs/admin/uninstall.md @@ -10,9 +10,6 @@ Prior to removing the app from the `nautobot_config.py`, run the following comma nautobot-server migrate nautobot_floor_plan zero ``` -!!! warning "Developer Note - Remove Me!" - Any other cleanup operations to ensure the database is clean after the app is removed. Is there anything else that needs cleaning up, such as CFs, relationships, etc. if they're no longer desired? - ## Remove App configuration Remove the configuration you added in `nautobot_config.py` from `PLUGINS` & `PLUGINS_CONFIG`. diff --git a/docs/images/add-floor-plan-form.png b/docs/images/add-floor-plan-form.png index 51a8ebd768e692dad3abbbd44aafa9acfd0447aa..1df9ff7ddfb996a221e2cdcf5ace68b548e368bb 100644 GIT binary patch literal 55093 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 literal 231077 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

)jUYsn``QPz_q5K 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� zOK7)gUbvVW!%4r|>PJ8F(qS9f1|(f}{pf#e8KjzWE8nz|oR{z?Wh8R}|1|6O&u02T zK1`O=%vxmUk);%<*(=Z}EBP_|+~UA3vRH#IMC&{6HE2KRI12>n zPG5btz}&kI9I}kh!n)c^gr6eH=9tSgGjd*m4xt7m^0kN?(!&HmqODf==85dC z+{>rv{q7%mN@Js{|INy=+;enK!X7M`B}AjZf4S@s^DJL#b5+=I=-vSmJMuZ-?DO<~ zJs+3Zyp?Iiv_oZ2BsdzwDY829m2#DF;44!yWe@^9F%tj z>UgTX8m638d7V$Y@dh~QEZwcaz1e7mcyxWPUJmg%w3QPloH{dzqh}&DAqJ`q23I>m zJC2=0cKbvXu=?mFgZD&Ql$J@@pzaN6bXlT?wP=xf|CbEVeNj~Q>hWQqNIC0>z3Otf zqMt6k9(1(kY&lnHimfHAeX%3+aUaY<=JAzWa`mte-awgbYm(YaGZvPu>5^wmp~1p4 zZih(|?RJ~Tg&&4Fwv+3WKb#8(-LM{|5#^kHYp6(?J@2ROdt|725_xdxclV4fdA4$@ z&p}X2+(6?d>n=c|EipPznD419^l%;QmacNvKWNa+m_wqKv4l&BkHRUqHx^P| z3RN?!UDrWIOBPIeBt1WFKz(=D^8wrHJhD?!sLJ`Sh9^w2Zq*!dnDb$NXP>5CXg9^E zx>2b!UaJ(fxj4HFwf?AHXphBsLg^|Z4rTyNBAQ}_GLkp(T0cx=Svfc^tqxWP4bQRl zSlyuJXgTD!Ojl2_Koi*!S^HKXTlJKPjdf`9`^m3396Tfx(m0qmj_a~-0bWi+4Qtsh zUGP(0Hz~=65d9V~(q6fUc)l!z9vsUtI$_90qRbrosaBGg*>YwoStx`I3-?uc^^1#c zqQbP;JH)Gx_u8(Vy=nAr4W=vb2Xuf}y|q@2){GDu%1>s0ilp^oVODa{tV!wF!q`mV zXSW1xanWPLol1$#vEO3|Q^2D07161o{C1s!9wpK4W?^T@nq&45T@3$xA33GnuRGp- zJG#+ptX^U}6IHMkOg?e$8!pVgHv7nnFM^_fYJ@y1y$GmYHu^!*Qy}Yjxc_uu-`(fB zpEs%fx8QTi$QwrH%tqU{KOw9Rn|m`%8vA0H$&arA#>>iTEp0EMmZ#z|j^kSuUZg3O zFY{3pdV3%~y$G{2?D~(o%k2xiB%j zkzRS_!o0xGV`vQ`mt4>HG5N_b4Lxa%$0or{+96dzrQhN8gGo|Us;w8x&nac^9no!^ zUYkcPrcG4FKdyt>oT_W_T8hZ9n@_j5vT?tW7Itsp)8P7DpJMx?{^f)#NCz)ug8Nen z#h{iD-Rf!9O}!HRAgx!S3rPk_-Ba7iB3}*@H~tfKQCdRa_k=ZF1EpL~sbp6{&8p_p zeUd@J3b$bHYB<@Rd1k0d7*ym~)<&xNDk2-j-McskFI^8JZa&MN^W&j(k1oqIl-kq8 z-0|Q=x$E$cVpUG(M-k`CU`Tq?u~jd@6ZO|dAsOwtP2KW_)Xb6SYDU!*)7i_bo+>Cy6k^SSix_E#$urk1?l4yt*4}!rH(IIB-)0` zD;Fze4fZ>9%ZD$63fMl*OL;lZqx#i1)|A#;0z}fAZ(ApKmoG6UNQfsM^DoB+SDhFd zo{~)zzPobQ4=goI`_xmu%pws_iORV#po zu{4wsW<<@dj^NL=BKd-%M3aNw&rke1H*qtSZmC@|S;v<{XXKAZcA~yuRV_1QC5XR3 z0~A)wOGxD6h)H+U**U;ms3$7E+5i>p%D@va$hoPe?0n?ZQ2*X| z>>-iCANlF7fIr({~3>lp%)31tzzo&GoK! zekI|3P+Cg|R-`p93?5U}WKGhgBMUjVPsfxno7z32vaxU1bzTe(5yaidX}df2E#9y_ z!_W|h>q1>hPZ#+uqe%>e!{eeCT47J#GzTI+UD5u5Y? z);g>rMz{OuatS_rQSn~;oiS{NDm;Sjt^D1RM%Ryj0MhNS|AFX`pV>RqGPu|;lg3wf zsSE#bD>(@h&g&{oxjPe1Zoo!ytDW5~vP1596t0|mZOVQ7u0MW7e_LoY<-J>eMStU( zsHpa}vhzQ`!L1uGl_Y2$v^xJEHN{_Z<$LIf&b>Xf^E%uByGF;XA}zA(mH!3N8zF!P zbbdf$1xE6_eDDoXxb$K6hwM8~_`kx_&fS3Ev1d?vlw7;I|L z$IKRiV#yppApix^WWh7%jWyu#D^g?jhZX!ji*N*y{DD8gAohLKH_p}&q zC|UlwU0}esx)r)ae++cgX=IdIJ8@jlI>B$hi zHQE?$*bpIM2(SXoG}u^4&l+^*n6q7ct+fl{0uCF|bo_`n_UqZ*%STO0JxB~ejjnbp zIlHZV%-97NTW3}96Us(7PvwS&$tVY7&cB(#srMy{E$cf2LU3XfF*Pc*TXBuME=5sD zD|O$4li9d}H<=Dh{q4aA1Az%xX*}io(TEZjQPNqX)}uI>{3x2IKi}g$&yW3nBB8XH zf#(@81zkU!6f^Nn_BX#E8kh6q_NfQ;IEvM5LdpgLoX{X#ouh0X!-tD(!VAYVH! z-S$4uQT2Xl+;^OM*H5-LO;mB!yP;Pe-wM_nCa-4mync+UBeBcOo1IVhS4{imtQI^) zPw!Io>B4R+;UD)-Q3~-)%+dVqf3NqSyXL>|Z`Y&k|JC&(nu-?+J}M~RqMg)(P=N^v zHEn(Sh^sMdY9c#-JV~cm*oT_$Lw@2?$O4?{L8+CZ6Ar~<6B1HDy$r~L2rjeuwKZ&5 zhX0P(HN5*9rr*}CXGHD!E5QAoOdYfbJY9HksjUCb=@R`B1S^_Q1yAa?Hj$1%WH0lq zbFOg|a&5r8Q|8*Mvsc5GOPLyhv)P$EnWsJq@$(wFj-$D!=qU8FFX> z;?-s=u*ZpkF>y4KoRH~qNwl#6gYekI)FS?T2~pbZlXY>TZ4@*h?!1mnfojZK*T z`}gJ3PJ;8%m8MuZxv-TQgGQwCR4{RwZuJHXM+>oYo6D^*_pu14iVXLI3@-zqNQ>pB zi}}LMYh8#!+yo84!Ok8OeE=k;BMtu1YQ^KlME{;>?1Az`_?+vS~RU=BB{Cq%K*bw8NJa-Pg1f82+XF3_y-z6uq1dBASQ)a=aowAV09Cy zNGYk2@}4XmPSf@}x5=urB8?2Gv`;1Mr3Pr;g7S3wVC}LtSK~@f?n#!z;$9>JsChUy z=SJ#}h9Yt<;GkkrY)}*Y{PV`T?jKtV0Jw+-89yd8XFS@UJ_826n>N+?KkZ2>*i=ZZH}hI$sTII5n?%SW=3me7y%XZ9M;AZim77 zpMW1}wHgmDlg7nf>T{tJIFQGm(k7x^IQMq?I(Su9zkT*#&HbqCNP{4j#9wM<_#W7T zRxxUVGD`J&-fAkcLK#I$)B5HCVSe?dE=KUE^Yd@Oj=p6c`ldW)JWzcI-WL&!JQU@M z+?}s;){12W>(VD2Jvczd>qZR@11qEmwuDT1UcHeuD5l~(Byn9!UXjd0egIhoU0c1q zlYIUiO+J1lhRW4veB$hOMfK5@#17Otx8X*lmi4bRyeE733bb%sHJ0;h_VH?B*` z0qq;wg&p-<^RXh)NCe9eC3lR^@Vm&^&7>1~05@ zgVwg8rNdm87W&dvQ)`?RMeU$xsn&McYojaczlvP9P{Yv`4&h(+t*|5T%gz`~*TJA+)Av5Z{e;0No8&joT@N zS_(h>!r?sYg(<~64SX`<#T-VXpAlKMv<@0JlI-R>4-Q7T7L3f@!c1`BU~=hhBljgX ziD;Z(Z{GuMAMl(z$21#B4jMcL%s9a)D~JfR0kr8@rQ<}f6^v(wTxo&lLA$SQL{?9P zqy;HsVY=s(2?kI@tK4hFMNjd*w-ud;vt!rP7T}-i8CCTj2OkxXO#3o2L}4ug5vIUN za51Xv$~eVwsB`}#?=g1X(_-s;OBXz*KLN3dA8)nHKG}XkrYEu<;T6GbxvD2~nTAT( z(XK1y)uYi+0LhOUWC|2hnIDzz^ghCtz#)EY@Bi1Umm&A~dZudVi(UpA-y+`(KFL&v%GAUmTbQfUd)jWTK|{(cKw ztFA#Yd<}>Kw%tYAn923K%{qf5Wtq55BR?Z&v`Ad^FbOu!?Y zAGaaYec60ZDL%QTf5ch4HrAAS*jFJDcw2CsdtFwft;WHe^h)NBj9BI5J`|W8F>a%BavZoOs zz+PpeXaEbtIBjQ|6H`bqo;prN*$#VE(+iD10;jLkaBs+M&C6i|>x#&0i=F^hS5sg5 zaZVaN?yv$=@o>|)uRqzF@57lKfc&PA2mMg$+o|86E& z)K4>A(Nhjq^+o6F*AulD5~>afn_Jc)1P%7Iby&HXj%JXBQN}b$jFi4Rg0*ssh?sll zjGiiDl%IW<7YL)O)Wqp4jA6~+%~Xo1(qz|9Blw^AVPv-1V{@-NuvuX`YmIQ%|o zr%{k0dkf&Kxd*My-PPZj&uXjq4f^MF=aEoKgsT$u=yI9kaSW2_cj{R^NWPI&pe<;2 zS5#Z*bK#ypdIjyV923~Ls$aSP2dEe5`j{6PSlAV#H4T3SJwsWc-EzSzKL24FE z%%^F}&?|fAW*}KVE{O33T6o2r`?F#r2N(y|mte3c>qo=u;0S8fiJH~#ef=|Ya(fNs z9Mq$|F=>$qo2msc$Q6C}D036f`b&k=66vY8I~|YQJSpxqK3{9*d_ja`OKIvF2D30n zAwxG;QGSTJIk`FPWlrv0*vk_S9!blWoLE&5>T$B(s!Hv*Ji@!5G`ZP{!*}ipZ@~!~ zz>=1Md=?F059jDOJVW;M>7$R4lHTKEC!*fzuF!dhxaS?n;Jt5ZnBK|{EdHel7y<-i zUhcFV3g*ZjHw04-e2~Nx?Pz43Nqt1>2PNZMWHBL#<&q2#0jvkc%FI}Us0Zeh6o-yS zx_FVjyN)*k;PRSCQ-q#oBDhqxRtpfm0v}8Q!YB-%Zp>U1%3LS^=8H@6ynWp6ehIEj&DCD$Hm<+)|_@|m@rah7ul*Y z5KjNRl&q}N*NI@Onz<)%o0gNhp|M()z->lpI5d1RDI!e55X-zk`wH2;5G_~t6kCYW z@{$Eyo|b+Z=6IxuXB~X)QqQs^94>u$cS%UHz1-~fn{ouLxb`YYYCxraQj5mFJXa-q zYBLB?@16MnP7Yg;sHE@muG|OaE>Yh#rD%cZk#rwF(?XeS`nf0)YO{ z;(=0+DO66-U6j=Q;!z{1QRtu0vI#A&w5gz?`RMtzo-JWBGBF2lS)W@;_c&S5A2{b> zt61kE?gCDlGl5Rev*F|xCE979IF@;@Y4!yNErI4$z1_e=dCV|?s&iyODxvW_qI z{E-Wvz7f7-$nb()9f@bd`QhTjBEl)JTvt6s8}~;N<7Y=${8W9zd2l4uqg591HNo|k=dt4I?WjiUlhU+uwmcjtU-GsuJuDQytyc%)g-6uMdk%+9g*W#(>Z z_xu8D6lH_&#CELuXG_N|>wx&Orh693i2yq^AM<4G>r4Lx?PW4IdA!dOUc~V&Z@LCa zGA9WuB1Jea@kz2sd6B$hdh_6tGp!4piz+}7kFc_9kcA?YG%`1`EN(eCm0#Wc87H~5 zcM5y9#XYj>Vo0|Yap&tErl6RW>ylP$89Midz4}SH{err;z0go4=BpRk-rMqBx}+Gq zRSB=$0k4^~V>lSX^km)Qs?O?;y7*Ujay%>`hVo)!%SX@|r!E29ACH%8zwIy45=ro7lS<|KAD1n~h zh@M%Bp42||(xtO3mr4nz?@f-aA+U)R;0}iMlzV0rHdB^(=%**r+uNokr@o79vh-Xz z*0U8nB=$?Mb6yc9IX5}SccdO5p~VhKj82WoduI|+Sdy1hS2yT>8w3R-d9`Gw6H0|M z$(nZyv}Y&?jHN_rBeNLeJZ}j|Czp>*Mc|oR^Yu-II$%x?A-{roG`?Qj0JK7dn{9!I zMHh)+%Y6WpIz|_)qr-;FuraDY9Ws3Hb?<&Mwol0_g=0#F>&vrc5vC%qK2H*2^{no5 zRuvY!eDB5g!i(es=O=zibt%^ANHxZaemnCE5}XV3zS4$rmYl<3fnxYb*i*vJ z{&Zx#$M>|9)1F_FS|wXmL^88{WYNM)l&8vB>X_S@^3J!{KZ#@6m2VLXC!-R`@m^iK*-E8PRc@pNA3zFa zi!lg9GcAi?r_=jp;$7sE1)F;SyR^Ww3S(il6<$M3fCZncv9jnU817!& z_(32N*A^J}g4oFn*R6m)x%1v!!=C5@!YB6p^4>L6F5qO`?|q z0;Vg4Sj~@G_*$I%g{w}I>qi3&Xq>hV;;a_Nymq*&P&myT!@h#Ow{n+YV6grU^%64E z@;ow)h+PFWjG20+HrAD^>vx%4w18VOiu{_Hj06{y3tbDSt;meZ*XI%K&NGOHRsd$q z)`$9C2T2ANaM$Wq6|DF{iS!U&0}?BYx_nrOOT-MF0yvn?^&`WSf%Fm0`8ct#GW~^3 zSv*=gTnifN??cj=Ybm#>#PckHeAcPuAARtj{c|B;;VmiFtnN%!uHhj((mWU>o|qPp zmM9?&8FSC_(dhTBDOw>?$>ei9yp;Y@ z%XGJIW?%`iIeX37A|?T^XT9fJ!6%VTPm-;&g37K#c}P2r)RGRljRneQq~#Ni=+?~y zPv@j7)ArIu`+HifWoDfrNHW7zYcw8!P*$LRVGq`aiZ=$C-UK#maxw_{u0b0xmYGJ| zo77iNiY~9C%JNe=Pg)NmtQi7s02Ag##+IOn>#<~nKOoSwL|i0i?wFoCN5~S zrWEnA(ofeKWadK`Bu|LNNZhNTe~7-Gbo1Y|VtZzoSDgrM{&@npwGfK?Q&0dOnTDsVcx=sC0m#Lz<<0N>SK0mWl*p_4!Uk9k?sO0$&kQ;FkqwsUak*q5 zyYaxrYK#~V!c4y^O|T4=`Su4&U9n{nXV(eKF{hU{ZZ(n@7M8pr#TxVol>s(h{fCzbkVq+++drG1rI>5IX>yb*=` z9zVWny(uhVOQcf$?J#oT6&2e{qq<#^ske=FY}Q)A$$B0eR9x`gWH3#@DW2Rvd(E;@ zNpurByP21*y>rY@q=+TAq!if#G&0b_co8+*KP@^zi;cpTh&Zo705bf zQ$_Xf{<|9`jA|&E$#z;SPK*zr4HX6c)|_;pc@PGgtY~7E-1eu%l}=BR0ZxT{!Nw&} z!;}KkvPV3l*Dl~ zn5krHj#SqxwQ$sq;AW*yEy|5-act!Lv;myts`9tz^`&V~i8wCLtmmZ{gXz0mG$iLj zsS48CJyt9cx<_F zh_cL~5YEmeTgI4M%+gKevxsNjH}flaw+l$1wjouXJ10USJ{n^0iDIDk^%s=fqJ8iY zCxkkW`bah);`d1YxulyiK_PT}@Gav!TejpLEUKXS3VfWDf?oNqJYy{NT?EdY!^=62 zFb80vQCy{Q)0<#a_h$Be0Y)cmk_>dvVGJbZkYtmh>s!xnLi1zP*ceudG`4b&kq9T# zuNZ&)X;8k7lK_L4tCg99K^6d2i4s>A!C`|fOfIbp=#`d+vkW)96lMll@N4&1$cb#s zYc2}=<^xA__(fY8AGuR}(V2IGayDtQ$>kPTN12mp!ve>Y0XFsELRCI_STuq`(LiGz zGl!5;Iw5u>t-_K+ugps0$fbGLDA|G9>{1j#w;;*fI)2UgW`;curl6;;{;C1a3OKq2 zq=4;m=U|-u*S9Mp9S!Kcj~I7)9J%e3vAkKj6sJ56X9ncAeX4^E6SIG!8Hd)2$usLd zUN#na@yG6Q9wa>yzjTTI6W|kGkH;YDNgv`rY5;j825m|TL1%u z>PaMMAQWl{+64gsBxt_o_ia)Wr8Pym=uOav{BxMykE8~{wE5r2B_F9DoZ<2%DH((g zz?&@amPL38(sy?!#?hDtHD)LQ?wIsSV>J|tad(r5`1i{3F%qfYfOCXexKK6qlXlxR~k;Z|ZhhiVBc5~bo)RQ4?E1a58Q z3uZgcGo@H2=f+ldlpdl?({9k!UWSnk>m=ai+SpC)JeCgRTRdC9+8VCTkDhtBZt*~; z=xU_>yiMVaytdYJb%~m|#hR~+E)Lr}o$2-~hYw}rEIWoju$_6Z5J-4|t5LbS2~3_x zk-KD(^5lqv3J!)Z%CFw!`pP-$v2PiG${{_~-+y7H9UOFeu74ZZ{@DbfZVBm^8-xrmF%)>e zPwlK?Owhx4D{R4;{H6}5VO6zwgA3L5dUs5`@A=7xcNxOo48yKUh-w;z5H9GFt^?t$ zwRf_6?*Qj(e#viSjNkOO^8@`w~2lC_mZ@6bITpCr@{2bi63OwQJ;RgUgifJtv;trg9#srC;c06DQTZ~$V zqqIe}i`3qAPTSXW0IJsUg0#SDx00xKimH5K@$8155qg#14GLkOY#^Q3o`9pNdWsI6 z>o+r&Wdmb1Jwo&md!o<8@0Tz^1Yv@RT6^auZ%EKfnn`^mi45@Kb1+(9ll&ohPK{j% zq*7IevH5Av0Rg^^jSK30GhVr`Q6EA^*{5Gh2UVTY!K#G{^NhX=AA$;#R+IBm^~48I z(t%VG3Sp z5S%Wss*qTw+0N;CL6Rv*!#zDn+uo2inYLGhlb`QWO%9I)y+-%x&~kf{cH8FEvB`)4 zdv7AYP33HgNjhFyah*hs9CAx-1T4k4TQBgxMS;QPEdu^lu{1nYFON@}8F)$fkdc^O zz4PE#r86VT>qz?>Bkm}a|6Rws!Y_m`;w@C4qcGd6trs}Z*FU!e#vdnB$u~SU#S@nb z@0D@C0eK*P@Hm|_k5m^6{$h}SZ?Guf@_OHf-C2U|QP|CzX|1mIS-vw{i{gJy1GAsS zHgYvjWhr^p8YHxqC?_2-1NMdWcCb&Vw;)%p3469|s*>%p8tWp>$tIp5DV$igIksV1 zx;Ch=KHIho`{oshrl=UdrmMzra33E0Sn%2NuW$GFr@gEV^TPoV+&{K6R?#hT4}~Gl zc3#|CisKZgJoFST+$+1@Qst`|92aYb9Nzy?IAK}2A6?j5V~Df(A2c{O0$5T)BLyTS zCC~J88?_9)nBx49ck!;lV6I+8|b`U$7JYmL~ayuY~L$b2GmWpI7JK@kk{Z*YMp`moY zuR_kTeF9XxN~LC(tWlh3nU=(CE(U+-1$suj@EvEGn`WhE($~ep|2<*F8w1Gac%|w; zbo)d#@U}Vr@p4WqbgZTY9xv7lb4R1t-rD$Q5sEYGc;E2b6AC@1l_&mL)SY7gDhAxd z&HyYlAgKB3|NJTnRop@O0Z5h}*uxxD_`R&CSqM9EGwXJYmL^S`tCRHO-T3hrOz!Vv z?jXoKu7nq6$nFR+L9y}iBZ(b?Cj!Am^$gt>QVggCRQiuMuAw|yKb}yTUO}_yIcGge zH`L7GzLv+k@$uIS-$xfNDv_ctb~r9UBaP2W-Q`}^6|0SjxkFY)a^09s!?K7P=zuHoz=?4&_?H~TZ>iPQ>?)Jl1XXt&c)zbXc9QYj; z>c6-5-?xYR-?jJe7C$;N{<}5)yEXp1HU1Hz{wEUs-?cTkq;4TO(M^c!r;~vZk_>o7 zlke}}@d;#;@3!#?iSJ#xg+SH=70=N)2I1Ka0iC@fcUiy)3oW73kJ@Q=+QsT_Nbf=j zz%PbvAM_2o@~o4Ef`6ld4GM~qK9qq7Bz0OY^o^t+ZC8L3&j$chGv5D8*|D9SIPx<& z$ZCLCsREyk`O@umJ(j5})I7$jn>W=;j{fF;^FJPy6MWt$r?~DdCMR+1YXsxXnCn*o zwOt!okTw>SY87@exNBj-CNKKx{Sg{?PBdE0|1MnFZWwUCKeq*a4+R;b+$%Rmn^zow; z5jIIHBjck0iAg(_tuvQq`_dZv+x{mt`#VQNKiD(fa37cjy3H3N7Y1e*1Vo3v-<+5( z*9t%?Tl4oU-U2z;e*hm;Zh`MbVE#TdTt^f*O=+R2v)&?rbfec^f7ZRPq673Of9acS z=S0o8F!~H77sCW-a%_sXEr7AxMKemJ%aE$86^6VjAoI_5ZHrq5)PC(;27WB^=r?&iE_RWe2671YXz+BWh|;Fi%q3+t#L4P zns!fjcr{}O&T8dxv1#U$6CPxY{yHI*WT}YXOG&wF| z0bIDPmztZ85TNjN@2jr4P%u3F`o09nC@0^@l-s%X3Ac!h)#cfKB!g{v zkv6jYasMInc8~v9B!A`Q8|vYNm66}<*VR7UxvCDGuKW7&@G6QouZ;X84p8vpnm_%~ znQJ+>5A0nQ(QeMouj_*Ot{~T+7T@o1cY;J^=yg)YFgN2$f3J7BydnTZ3 zfgx5(=LUKcS*FO}w;HT-x@vfv^EvggAyR5sfuGY}^Ou?F_Um>lVSNv)n)*e#Xaa>q z5%4len;yu9@BqPy?LP@l&~l|&Au6E|qP6t%qvlgET#%$U*_{T1a~g^9u2kr;V<{wP zo6M%5xh5k5r%Kb+$sHgy(qevO0N|kQ;|w}pxyHVYV?s(9!n+>tdsBeTBLw=xuzJve z2@1!ohvV)Kse#OGyrIs|7bbcc*NdD(_OS5st=C+J3hW_AZTGSycN0hZ{LgFr#~M3# z3qRu9D$q-?R&S8-G@3NL=C{6ovtCNHTTxbE=Y>&j%Xg{+vM*HbE->VB3swOeP1zQ> zJD*MTmh1jfW-N1h5wK6@k@O-WU4b+=&w?@DfXraV4#y*$#0@P~3%(0?YbpjU0#wYz z8+K>iQGCah_;Vrn)m*5^=|yh>Rx$)m)4AzuI~pqO*rz=h2Wgh7i}JGqT!dgA+Eq~*P@(B+Y}X}yRr z3>Vz2ad#K1#le*!@c`=Xi7>>2(@D1+>MNE4$!Uw+i5)!CJ@N2mf~zp>dRUNeJHc&n z_Afx_zxI#l)-eya@8d1WNBx(2u0ZilQy>d0dCsc!rg~Juq((R4FlJ4BHDEy zh|L`wP3d?ICD~flU`qN4A+6 zf>(Dw5&;g#A~X(jOjs1-ZUG<7s>H1GZA4OMhT%&jM#BBL{QiD*qi=B}`qlGiU-MbU z(109rNeN_J_n^mfV5mtb&3@rN0{u?H)Y78YZh095lQNJLP)nrLVOX>plK4Y-1HDXt z7L8sfssJ#5?})1-FBZr;HUVO@Y|#N4+4hSSOfH*-JUvat_)8ixt0g{FFwFRXb^mM{ZIvy%6~Ad(GQ__Tnf#ywco=R8E#{Lew=39gVFar$S>>-NgOwSoSGobkq~oZ zvspzalU*zC`>7yJg_E%>K-r!ExlkUb)tD8q*k}VP^L4Spgtq3vyr~rcV#hx0ygWE# z5Q9IkdI-so^4QJ%5R~(A6+BFEfso$y4_FER{)=cMF5bY^muY*@Dk=B~%nhw$>8W-_ z^NrUKD5csmoGHw)5oBI{Z?(Zsy8D}M8op$b%R&Iso|MZ^i89eNum^ix{ha;$y?jW0 zyG{YLt63W}c+3dW_fQQ0BR_>P#zq+8EX!q2V|ZBJT~PEVuYFV*;Hp`Y^Mr}w{GBVI zdcnKEz3o<+48OfC7nDuhzG3GNBPZzCCfbZsP$mxx? zLWiaBBU*0AJ#@skp#WpK23+nW_yAYwE@%lD_Y`$0xg>tdhh#xHR+c7FB~|-V>$hST zmz&w6_s1>?cRD$-v@U~oa|ckilfecf3sN`LKhNvG;I9Eg6V2wlFG8(OCp+e`rI18- z<-(`!OIUAy>8d{6UD)+~wvzVcE?gdjJ1CoWc>n z`>|?T$Jr>WZUCSsm%Se5s#Z74a$e_2BHxEkZfPB7<~gi6oFS{pJ;h%RFq!@@f=gO2 zis7rpOm#$ZKOWuh)m$gC<+uij``2a{w9>y^P`Np{2;bt72_y}7fx}|iRW7x67DkmH z-~nsEd*!(CG!rRq0@dnF@Tjxaz%U3k8UuYhMkC2{O)=jhjK}2ls01F}o7FjL;HRc& zjK|1?tV*m1D-EvAH_7F@eCql>E^NOzVF)Z3FUUyQdYqk0KuviP*!EdqdU%ddI8*jS z{`FYdw_`k~=$CXKZ_U@|f;twMNaO~%=sYfdu`KoV9R8;5gWkvF?O;*eZy)mY0QY@R zz1~pu+HLj1pOKyfIR<~?akTTe_A{SU{$u>}7^u%RE_Pbh(-Swve=A!=n!Q*x0wQV( z_m-j~T3U%Bz;~YtW(u{75CT13c|Q@SRV(tD)j&8rp1>w^c5ZRrSWp3B;m>|#OMQ;(o$ES?zdGEzI$sH;Ml+P6gUVU=8b0}8XgR!n1wB8R z;I9KvT5}*la1Nv>y^$a}=9Qr&#~*Q3D#~fE^S-oRBWk#`xYXm)v${A*b+L^9$t#f9 zX}W5v6@xcGN%jLB5J>2BTAN?O;Fg934>HI6CtlIM!({{_mv)wQD#LtPF;76sQvTs+#S}lN%*~E zllS`L%J)~$*^iva2l!MMr?n8d<^#6_-Q3E{ph0Sk&bDerC#@SdPbK4C?ol)svYWXj z0BT_y5jkNA>&lO_%?v^@F$e>mWizQxUa&^&0s$ESFKcIWY>S<~i&lRF6Bp%VW2iH2 zfZxAX+j#)zIR^u?rU*J{P41Y3rG3tZl2VE%7R&0v3 zIA@T4Y==}b$Up?Ye(Z&M;233xpn6lzFp81N@khFBrBWX!bT=>eY<3?jV69n_;W)62 z!5;zDDo?0}YErZ4oR>@Zt;a}fj2yN;JtRx8(5hFJ;h>B2)Dj|Gj+t#cmM~rbyFfc; zCJb-jG4BB3ujlyo?hxf6B=$G>d~<-7Sd_jW?^~ID&bURFD@)|(UXu^J(IO+1#hogm za<9265vSzGx#ztp2^H|07#3x7aZq~glYW8 z#L?)-K%LJq+!zOPB+xhnFj^ccl-E$v;FD)k3j%ao2AIzheuq&g@d2oJC$R-k&xgFK|L9ye$I5&0fF^4 zBu=(#3H)kZ)=xViEkT~)hrSd!gHlhj<#1iE4EB0ro_fEN6b~D)+o~DJ^H)@HFc-O$ zv-@68!>Xxq6&@>zJi87Dos3()_FfNTN&-hn|1f!6D)3NYME_Pnc z;^eM*9DK`{_=FV~Rz}SyAxJ;R?G5L`?uA813kUxk1343y$b%oER01|h9m-uvPs>La z2`C^X5&}Ymsj}8{Dc|Rl*-f!|=T*w)VV+2QR=I4hnxohlwAA;#dd#GYKS1fAq0}#| z*&>`UuNi6j!O?0XUChJ^0m2c-1O+lHq+rv4%(wwOPdTGqnl^e&*Nf0QCZ;q?%@D^R*~L& z#^NwM94BrFuUQsoAanyFw?AbCIF=8Zs}M@$!QnB_0>h@55=VxkpqX~g=fG44K%$=; z7#kI@LsD0J(*$w?o&50jRKN9a);<)R462>)E)zIFEYVfYh2zZH74oaRw3=h8Qd!s7 zb4&Lgq#({@5U}X5n*(S;z7Ql#WQzx%e(N3gvVAj?2l~*SK0>JioQs?71nBGHtxVxlQXvO-23EV*23~4R_tWFBI2S1YbkHJHz zEsQmH1viZ`XeEcUOy1*7H2vJ{WcOhb0!seEXcN5t+;QqGFf{0H%4M4HV5_d(t#ozeFqgQ_i{4ucaCj+zwOFML4f zenah}Nk!`vf7m4&*>yfalb`QA9w|zEV3KH_)sbaFl^b&Ei2vH#Z)~ej85s43YwEp+ zW3kuyWq^ov*Z$8=A;M012jDGjfOO9|+0%^;n_1!J!F5`P2@>Oo@M77w{3VWJNB58V z39sJE{_~5JiX6`VNk%FhOw<+op?wui{T1@R$==a* z(Z%xXgO;;>WhqB`rq_V$9(-vO?5|iUYzrY`^FU@@eDzXTFK5k5r)Oea#nS+fEx{;? zr8xLOTjn{#=$}hHoK8~Jfvn^UgYNTh&TL5KLJnyR4WFrxV;^+1mYRO^>^OJ|sB)?G zDTIH)EeemzbP3KU@`=c)>hb18@){#u_%Pu{xd#6pngToZLll z?lTTG+3>F0f|_ zA&2q9yt(yxOGeyAKg?Jai0HO?oQ>8w;3m@!n1&=sb}+J+MMIx5nq1g)xF#CPqd?^T zo6vD5>JJ=@q%aRVB@W*CtG6Ipr@Y2&tS(G_I98<%3ia}4w?U>53R%BfT4Fd!n;y0k z-#IB%(C5iW(aPVuR{r{{YR?`5BCAAh$tB31#&IX$(SpC=LczyMEDTipN1xsE_qBe4 zrXIbVl2wxHdO~8#c_r&aFZ0J!hbXzuy}fojo2AL=T9lVH-BhBdR^SYO=%*o=1H4Y? zx2|;-w53teYEEqL;FYPa%my{f@77Gn=;UT}ah`K)^`5+wE!kO>$D5!VY0#>b-!hJm&lk5a)z$Ij zFdeONwfGnuRq-8ZOuswIWYAGI&y`D#N6ZXC$h7d-*!`Mm)#h(`ZXl?X>#x#8IqU#P zU*(wV$7_d-p1Z9=((j+zG3O|-k#?)h^B8-;!Z>L#0$1}`3|z?vg@evMR6UL;beYA< zDJ3S}*OIxt3dR=0F$<{>e)DZ6jVoWADzRxe4bUr1-qV;2Yv(p7h60%0FIDR~WtsJK zYw5tAdMHDBsmH2G29fG-sb%adym-!Gal$c?OS|Bq8C}j$#}AhSvcfBOhL7iJ*F$(` zXZ?D44Pw(+wD5Eo`LTg`st>VF*I%xOsEX*++;5w?y`W*M_%JCElK?ab&SL;MD4JY+(U?zA4HP4YPZPS5b{U8QG<_Cm@xm2wkW92Uj~ zS*jyVmOvUgFI+_P5N)^Yu^*I7g6-7@HL^_+D6T^5X=>Kt=|qP{AsvUw%-*t+jEN@) zkL!Mz^DU{`k{Qw8Z!O{iplP)DKc;so@>K0vX2%Bhk+l%=5g)G7?Lw1`to>mV)gJ)Srwj1}LX&&`vI z>*ONCFA0z?MqVHOR9B6_H6V0nfTT%n*G*^_92MSzqCPZJEpcX2wL_;(NEul+3!N10#Dr}I0BMg=r9u}SuCIuHJCMSp+;pvr2(W9I^Y zGKh+Xo{{q$7vHtU!ol-Y2I~GjCqDk23nDcM?2#GboZsa(;m}<44|09_@zhS^MYI8$ za^%SzQc}P973U?O&2cl7wDsA}O`SPF>>qo*-1oQfcpt>$=Kg`ZJ10CnNOEDgj=lQb zTgqjEhjgfaBk;3rNIwkOm*v!R%g?|21&Z*Dac9r&yc0L$BM>ZOVk--OX(jF4a6GzU z)AG=r>-nF6W8*kBJm>mv^1pBoNN&9-f~abVW-Os z7gTWxit(33LqGT6o6_vQk1RAq`Q{)_p_(@(JOS)r4e?LV%ds*MT>iNh+!XQ1*fsBg z0c2*EZBN(zmLx;)jg=idH}UA#+yD9Y{d;i*Y$o0}C#rOC6tC;T|7U|YWYmH$VMS9_ zWyxPl;+PvKK6e1LF3D!Hy#Qy=nj!aeSthz~X zF#OznWIOLN>g){EN~knThWuC=wDrH7kW+g>^SgdW4e8hAeqfDdLuuLojW~m3^-SqC zA6R;C1NJcdTuGuV+vl~8%SN-0SU1GY|NXIV!D9n^$wJQ`2EnbUtGt*GA4uQ~!Cz}% z5iiTQO&1gZZSoUB7T~wWT2L&C{bnZMhmozq*?B5@ zB{xu(>wtKl1bVhv5D*n4LRn6({ci6bKOH_c8|J)P*^;7V1eo|VXgVFMq=6GWFgq~k6KTc%BRWan=!$HT<&1ct@`x2x!mzw4)2_|~sI<3PSh4<;P%VX2V)a$V%= zJoqKJVH1?Evssi9qU@O$cb4w2E2-iS1NZdh=PO#N-L5ZHeH(%5J3^?E@|n`P28~*&(U+>d++`8yU+U{4{X+6YpyxR z9CM6coH1#;3smb2I6%-DG>?S4xphcQ{fd*vuAw$0-lg87c{T}Fx(d&N;$ln7wwsWi z^w$TFO4eA(H0)D(9`Pm20_%H8EBf#$belJ4^Tv(x6M7fyYnEn|6D5^B4Zj7CKd)=B z4=TK#hpg1SxUlBxLx)*{2={DW!q~Jq>rjvPwq%)vaBCHI zG>rS1(Q+!JBq(B#qp*fz?nka>SB2Vb4-+JGBJKZ@ipGGMQYB|%3_;WiJ~KqgGAH| zLtk_4C1-BWDXGr^uc5lMTGrRJG}Kbw*I$(GT3Wxt(xZwY_r$?7OLFC;IqQquaJJq|L|-TcaQ|oC8y)y zX0ZNq`u}k+?`7e$VRX{lg|Oc~d^Z)gaXN8z(_hp2|8N_(WB(#pmL-q*KYZlZbEK(2 z2Ia%dlfCUK`zL=)k%vZkEV2A=ceUNK-8unzQyFED+O{F@pO@UifkGA5dvN?u0}Ds) z6LgSH^?Fq%{l6HnF&apW42o&~=eGb88M4CZ(t-cKPh0mBdzYYSW)uzUwbphP+IB$B z8%UIXed^fCxzhu^0AA|}x4-H-ajfw)wae*ajeetBP56ovFl)a!XsUB>j_n7kC8$l9 z01OL>vZJ+8UWgYQUsi{JPd0=%-omA~NY@zYCbuq(w|9CfVAWfJ$#l=CEn^s)o3dLR zBMpi)M?h1{6C}tqvLH#)U1Fr29H3-8*8sIm9VE@ui*U~RP^5A*|6J%+Yk=ht5+$bN zE#-dB&;H2wK*809rc!9$EI50&A{u*lXkc5`Ma1&dNe_&_WpbL5z`$0+(eDbvc!|*E zw1I90^}?l6ZxtI*Y;Hq#<_3>npvx0xG^5i@jIx@7x0z2NxwccoR(o z%k0}*BSj6G$4FmVHCeM@463nL?h0mYk?~y1hqe6JRZ^Yh=K!|ynnTgH9XfS?aUc73@{`Udo@1Svj1)>B2 zx~%;iDxt|J~f06+!B+#>W0_fW+LxBR2_@Wfb)A>Q2nef5<)4MiOnGUVk%1-QF0 zb|g1Y>tNu6lRe_9CR-Isxt+XNDB;a-fiajYpGC} zC7K-$e+6u5s)`^E`H$h?oP)Xk<~&YLKCW-r472_*0RiLkMO=6zTk`ckVKM-XY&eTo za#??dx>Ir}+LvT`heMcS+j*6*P`9ouPMU$TnbzYy6}0*sEjR1ufg)Vbhhb<`%=vgj znSK;z09L@b<>ZWw&s{NwUTR2XEyC{y9-RcZi02Blpj&_jXa*RRr^A{FN=d=xIQDzc zl`{h&(U&HjxJE{p0a<6vzrA;gU4inyjBCVdcPiNSHbM7$)v5hh8cMMau@(-OQOnTR zh9aF~xbARhtq%#b?=q3I1I~7mDf^~a*pSSi%0ch*8pW8s0c=Ogv;O_8{aG->O~qX& zn11Y+?)$jShoggnOV|a_rC4l(PUf?=vXzE-`OchP+yoqBLJ~emsd8O)H%UA5T17(h z8E9{^$SvTXVaE{^%)?7lk4(_lwa4(DI|mFxbxHB0&?iIu5hju0V_Ex}m9BWZEA3qLxagZ59 z&$E3kBbs-y-q$-LKI$qj(I=}7nUmUs!Tsxxc08YB!YN#q2k4bW6OH6EUDLQ3yBq+E z2g5%jT74JGri#LjA`x)3I1*|@pBTQHsI_$ah8Il8iSoo9R__cN&AZ+b)9t32(+Y>u z&#u%Z%~LfOC|eP)+T4p|g_ob~*M>8#?JVFsun6j^CI4i%jHn)QapCaA5C|Z-w|rd@ z)q}?5wqp?q@02t1A5zqqDY_bA6fuEwneS%sY%FrYuNnW7HhiNbAhaypxjB&6?-1YI zQ{k*UR%oQt85zi-f`cMqBE(g`$y@li%0cj`s)YEn-#B(nfXA-8&{-pgE|LBAVTJ%B z1hhTau2T`f%Ja~`uaiMw64aopM&GW?>( zWUX#)&|}1nGToBUyDR?+%kzd7o8Y-at?F{#rOriQcqcY42bW0udL=4>LgFDHc7M5! z|9HqO19;z6CXP_}-r1PUn?L0t6U@)?-LK7Ls>n4SV^6GITQX@!kn2$f-Kr+WXo>qf zC6pI?bc|F9qQcRDsUHWg9DnukL13rqfrUf4x@~>Wp1bjSjfKwmsotFWc!yEpNQ+41 z?nPvA4|V*6KKd4i83!;>RJ3Or4Sj5)*f6EJZj_q^CPC-5T?NThBJ2kbgaFL3#z=Di zjqXtxw%k!tS8>H#Ys*6sc{1~iyIn6M-8`2{DCR$M_#(M+{6X>&k)-!)P`;#Cm(`E+ z0`h+`vW-Etfjs<%w$_u{?kMQ4w1%m==lI2@esQk1J)_z@vl7+`Ro>z$+5}4kC$MT- z3|q;v90EV-bb>%W4j3SddWXFqA}+fMlR$fKEb1}R^DE*LOQcM0I9)e+cvbL3zL@2? z#%|ZMEX`764lzB*nph0m#j68tfPc>u7M3C5U)ka@C6-1IYum#ic|*Se4#-X+9MVm8 zJ!DQg0*YX8)-9PQ;J3RXic$Gx9Ei(ifuph30@B}*0Y>-H{s8+U0oZK9J{?RA1}kxlG=UlK;ANNeA{dxe>o zg|a*7d_RJyKdWSSm|>szVuw|aqUj2BgVKj0T*bO)raS;GmV-K(f1=5H33tbYdUy>? zf^)t5&FvU-&EOQ&dA1SPEUC8C)i)kB8LOGl0Loxjpk#6gziMadk_CcQCJ$vf^& z!eox;RBv+FAgqPZ)xWM}7_Awzt2&fWZb@R$AlWck1~rdGIu*>_VSz%1dCGi=~%##4xwd=8mX z(Kj$owbXvG5OGS^TWhQYt##|bi6?w}DY9q-J-O5~eF(>qZZW!%ks`g9xIckTu`CS- z3L=Lvqxy=;363KO6fP$iMD}w{8Z&X6YKm_#WOs>u3oq`>B4M-+(4uu(7-{61+D-TH zIB--4EImPIULjW@$5Ca$-u396MfoR-LMq&DVaaks z_zikFBNT5T9U?Z;YWY1Cy3s*r<~rNbbbauq$7TeJyLIxb?Rv138GYl-W?>0^Yu%ip zhkS*w3*bQC4wRXmnEAXK0ZB3Xqz1DgnEaHQD>r!e7w%JcJv~?Ay?!t5qF)pfFH3Xf zz7a(UnXDC2uAFAR`8>soI2X#1HP)wrBa`9`0h0g}T6S2hnUrJ|+9EF|g|m&9z^hHz ztNXrV0fs2-XCvY-J!c#jjOkmJbRpWNlk2Rl0$_2U!hWuIhxqlchjUJwtGsho5RE^X z7D-1@5v8GQw;>5Kq2GO;K#2#nhd%ESk#qP$iBwBpZ8+ zR>Y=ELGRhBo&Ae)Py?|5@w$et(xl28^tvdlm8MmdfN7$wMl9#|`LH>OcL|PQ z^L7sq^5)rZZr>^(r)hXL-6V83({B2Xt%_&B$Tju8Pxu&%lu}-iI5m5;PxuvblKykp z^B>LSmDg~WyANYL$Y=AOCOZ%Zcm->UU7t#ryqy!z=?J^E>5T*e`;2aB31rKpGE*f; z_qgX-+GA69m8})zdYLp|%vmoD+)pXcd{PVI+qQ40oB)dA@8INYo6#l6{9prw#8RNq z(#GAiSVnpITQ>Pd6@molKww_oUm7kt!hy`!h`zH2n#N9m-J&qoW|XaJt0_UI@175) z1itToN{}i(0k@?KL@snX(};IZ$SE}eZx)Mk6H2o~Cg((sy1Q_#;HjBN#ME=K367#Z zDkfmbVVZBA)NGq$JK0rya`%eq=;Q;jQtn!i2Z zMu^(_{V4dL9@Ag3MPUQvv?EmS3Vus?q@epQI3c2x7H8VSya5;=e-Ek?wW%gP!Ys

B>UWON^Y{l00EdR+eHI|%(&n8O&oQpK;}viXQ(?nxt5i3f4_m6cl( zNE=^$_V0io47R}9M3PO+`VW5c6bMdN-m*a~^gVe3_>!1c?2>G7By`Q;&gI$!qD2cvv zqMQ0?NwwrqgAdo^Inp=I;67`kxKsA0A$}wI80F?zP_ZROq>`( z?q7y6mzR(_#a){k4x`m93jW}yO{FKN*5ZQkAE@Q{iA|oqZ2v@*)uVGs7OXNW(K5*c z37V9)c*cpZ%fMDjN05`%69<_!loD!?K72U3=XLMy3V0ViMvnxOc$yj;9r6R8WG6Ju z7bwa%P6ASZVYa3xMNP-k=nLLM)hFeC`g?Ss;TK1W5Pg9tEs@zR*-Qy z*?j+@TN26PWcR*?4%^%y&g6`Dmg>)@A2st3zjQbP0E5@22ru_9kVVfwyOt*NCJ(2u zSmdd~nuU{UUc3rg3$p1hj}&QSR4cf`B&_AX_1{t%F|-xwkA862oSiMY$WRJ&VLem@6on0q^?sb4_>bG4 z;!eX1tKg6Ct6O$1rHwjxL8I?DKJbeL4dUov6hqc&zCT7M{*bPxVb8Sp^IgVk^OE=m zd&pZ$BKLLMrejT;o#!)4?9rkcaPt2~m2h2&7)!b1KJAU;kdf1N#h08>CHE@o8PWH> zkX$4FI)<+jx_r#GL3i_Mb2b38KVjFy7Z(-w?U@wMuHAq+k*$|vAkLgBC?|(hEH9<# zkVYTUqdPW&w`jO=`C>r_%x|4FnMV$+H|P=!S0SO^-847SSlNJHMfw4O!;Y~*w1@Ks zDQzC{?JeXnu>_3uMMh4E3zSQ4`H>SV^Z2puq9Qm;pE!&0!%U(w=wLfrK+syFH;!12 zq1QgnpYqbQV~6%*#)Y9zx@ASDd}X)4 z=Xj~0qNma7-AsLri(ciaN;x*5`Joze#-zip5@*_ZpYrkZT`*I>lCfX*XBx+{&S>=n zoMi|=%28nc)^nyCicvH93RL#H#a(M8NLo$v#s~GHT#ol8c^jbRl5JLoV?%IQ|HhKV zHzQ*!^P}Z${3=XcY)UBXZGjHOoMaZ>vB~2d$6O&|a5qh2-|g&2I+FxDb`rVI0!T~S zfkRTqi|f$>Z|nz59R-u*2g#gr&qsr_8vL{h7A>n zs!>Iy)$B0=7D`uf>o+|?`??%Pxdj{Ci&)oos%9Dv==HgnwxkrpzGoY?pG(JC4yjm; zOlZhdU)QL`T+@&#s_!ZFQiFz2Xa0urVS?Olr3j=&S-}6jY*+UjUOAaIRaM({qi6C` zi+Izr%Fk`(k7mLZH@DD9g3V3*g$go+#8ga`*~k{na)vSKC{h2q7`V(*%Rd?pp?q@W z{#O-=`0nILIbsX4{sx8l)e>^voMC-d{hSa}Vr#H}%V|HenheR6eq(wMwpd5;^TP|h z<|w9xo5Z-WXN+n>PRuUn4w#{J)&L=wqd{wIC_PibBF|M?K>0w+Woqcj{DHznm13nA&rB2sM z?(7z@Bx5mG!^??jID{|Ky)$_lQWNxS$Q3ojZ0|~T02{h+o@>fRc@|4 zFacn?`#c3Y#8tIe0jJ4YLQBu&5wcD}`?zbZ*(K|y2$kcNgA17%7eMepuGMFFN$hUZ z%Cmg|-EizH4*BT7DzUg%sLLj2Mzi?`{vE0c$)9p$bb^hHtpt1roIz)^yi=^>i2Ioa za^jvIW~fK%B2^sWhY!hWd=4A-bTRR}f`5c6)SCH+RrB4{yQMs*pUTkokbQHOqeV(~ z9dCBQST|Q5ad<2#!>jx~j~O!@4CE2R75uwN^ZxF)D)>}}e?r0LPibn9|D?qu#4IlD!>!CBbX<&(ykB%O~X8ReVNshHAS<#frBPfton8_k<7rer|^y< zi6T|<=O+C(syXLXniDKO4`5UC1wO#RhBuy~L(D$%_5D!VD?@t+3Zkib;;s$_CysFaw+GoD4wcynQLBlcxB~Yld)dFbsk4(k z2g7LB98-@zR!_{yK9g8<8Djv~2_=2?>u`+2CjxQ2_+EmF;(%cy(uWBCNFtZPVZES% zF=F;iP9Fgq*@s3Mu@8eZlEb7EXyOz!}&sYu#PhY7=g7C;bF5uMG? z!TCO9v-oD)3*m)9Uip{TH>_41<7%`b)^!giJs#X^;`(3E7-|85mvx^W@cS9mDh|4v z>%QSU1Eqp}vt7teMmCG$9QOQlp(l!&G8th_rF7qCvP9}kd65X4eqDM z_O}at_K?I@PSRn|_`>gM``FnXVM#@4=6#K-LHw~!LYbu%(9%O6^OTP1-xUU)mPT{e z(@LExjHSE=H=ZtO)VfGE!r=@gYfe;yp3Tb!p6c|Pc5g7>7Aoh25E|DKOc>Q(wjidj|RAYMN^2DH$Osu}L*MY!=rUTS@xs;Vv0xqp38E*G?S^Qyyz zw}bEgx+npWwqzwT5Ah^5J>xDW0 zsQ_&5nLwIG;Ou}o&LpGdRDp&T0*9H1cxEm~)PJmp!+g)L3?$`u0CGFfKT7bah-%K? zIn(byy~k3sD`P`{gB^G4(w|2aR(==a+x(xSM6VP5;tgF0R(s=&@Zr`J9xRUa*&Wd8x;9<+iCA1 z(MJe!5{ttK^8=7yc^h^!Z*s(($>s36TUDoi{wqy^n};}Z4>C{u0Tx3tI43?tBg^q0ua`S$21&J)Rvf;z46rw)#WbR zK9MK&6l<;+@Ft%QF%u6UbPe=qQ||M);Cx65J%zRRIZ_9(xtGOkUf_B@A>jLWcOCBl zz*^$X=xbOmbiu7SSDFAWs>O}(Bft|{JYaEVn?#Z2CJO*^+DHaQEIT)%Oq*Tt)zee)&JD82XUgUKP_*>_M+y?%v_!EaRLL9b`yJ=blnAE{4N zqMe)Yi8cV^t-hh}Wa-%-%!3UG1xi@>>C3<97w1WrOdDw*A`}wfuTnkeD^x?DpFaOr zI@dNcDutZL=~%9ZrDrct_t31%2>)%+Cn^t3IHNK3P3YL>zkQ%n$uxWk+)pLhAHqD(LwFdx&nZd(o>Cd1olsB zEpKl=@D(N01|L{SGBlU@ah8Ly%|7d-iSk2o3$Kj*x5(UoERX9mL{0*^>$ckH%tGzb zo$|+WAGR3RzV+k^=JduKXW=DN^!s&=;n=l=ZG`W=2k;o1o}7g8UFGtdBj02VEUug zkmLKXt+QAdodou{i$YABBmVAaYBvszIpk*r{Rkyc*FyA_R42XMM3O=o zezm%8?p4V#e*;R0O}=dM>Gx!s3mkyEa#M(A+c6-$8|Ri#(O8ABN==}Cu2kTFHiBiX zItj#>Kd$`hw4UE6j~-y8tvd&53LH4Sx92@&xlP{FD79P%_!uzKK;P%xe9XUzb5JS# z3Or*|;Lrx)DVd1-`L~&`f4O&1*K8;yPL~f=h3Ktxd$)s%niA2!Saa_;NFH|)-Cdnl zAljaPM?oM?k?X*uXatoJRkJS}leNHjvLSGKTk0IR5|zJJG>!cbRD^V>O#&y#{cTPE zrtaL^wY0$k%DK^pT=PNuOPziw3HLuFXTrbtZeHL0&EsIw%)S z18Y{H`SAn1*A7xYH6TY5{$N209fg4XyPRfavhhzZGa0}-R8R1_re6fC&sGo?8V8am zfUxo0)nW*X5TyJn`fV#%y@*EVTuFmY+`0o|Jeg3$Rs-1(547}Me}wc65UP}?M=s;M zERfb702;$YDIW@N!9w_v`FY=hN%yK)2w~|)ejY@y;Dgl>lP75y5WPb_u2B5^s9s;W zzim5bLpW%fVZ3E8&UkZSQyx>Z?aVX8v14$_1q-T8)f#%kj+YSoS!PmbP z1pn#(BR^e{h3O{5n}xKs>kdzW+TTDtp|av4q8~8Xg0#!RY`g4>Ej_Ckg>7~ZK7WnG zP4xE~)@q&vNmuCQ%$$%K`U15?eMpY28YhvSUnYq1gn3c=MSD*pZpN>gB|(=CQGkgd zbLzw+QbgsRBs&rT-JCH)9(IbYfyZe3XTyjB+5N z@nZ%(x#D7l8!l}Iv8^yS$HdmW?_SUHyi(NqajeQ=AlilK4f-|rT(J#})5^aUoCbh^y z1!8hE4?k*Fu)xrhIyv_F3L1m*^K3e?%flU(o=;(`uS~CwSf69V0~Y_K-s`XNhE{7) z6Yb9R>j*~$jE#?VTV(ihwy;URx*g%Vp34oW_{l-B%t;`}=!iPZr2rDF98PP`^+Zp5 zQp5XRh5OC~vQuqmq6?;3-O3jfB22Ie>g0g@S`@u)w#_Dt;24nMO7S5EvrAU__lYq9 z){rOId_15>L|_PM-#AdVUM>$!giy5akq++wcDpbgq{XY*kd&7>JqYB@To) z;dGMO+p8u()&*AQ1EI16XLz!XykjvizJqr%&o)IDyiU^0{e5WE^rW$YNP z8d1RVpr^}73jYMO8<1YJ434I~38OTlpM4d@B;%>O&8CMkgk3Q{H&U5mu`o$h%! zVnlq@!-Rh?7mISxI9a%J2*^f%?!%1k=Tb^M>D#jo6v5>SI62P-fan+IC9BX5^th>O z#4rQ-!rpIhcJ>mdYq{Tx-mG9e1X=7J$$x*fj#+-z= zjSXwdfV41y6V`6Ow|s@pFK0PoL+=3PkF@EcY}|}`Pf~D64?@mZi?T;^V6WMR9q9nU zII^MAPA`lDAPkwh#9tfu>S3pYqZE6yLH#mGKD+U$g#9Uk+>fTN5MMfUm#2G=B;V+) z#i%(5pnaLKV!Z4u&0-LH1r$HvV}htZ2Xc?erbROO)t8y4C;?( zZB7v^gG3>{LcA+LsFyWKYb4m@!pCsh&2u1pc-LW9akeC(W#@gI=3?U%!rTfE+O?Xx zBrW^iwOKXGco>)D?{wpEZWQfglXa?Qe%F>vPk3=@YVd%05xlmbfN@+%FZ@go|YpS{{)X-%HD)_NJHkHV(bmUc#a`5!P^ z0g+!T?EL_6uYaBp3uqU|qm;Vzv9|a{~TfS^$y&77B5KF1`(HL6mc3)3T*);uJY4S()OVL zBj-7m5Gk7_^ZHcT0w}t~<%xpbpAE21`qk($=L#a-)Jbjz^&V_id)YN2E7FmF+3pr+ z{W-4^8`o9Hv58*}Jl^?3hXpcv;#g)7Nj}MFbY3SDbG|zpuyq(L?(=c!SKn;v_fI2A zw&Fw)9MJTPB`r7IF7O2+V2;)u12%AyNGDP_unL=Do{uR2-A3whN9PdkF2&#Nv>wIW-4eK{1Kd z0!%^&VP7~y_FQ~N(KNQM%*osh(VHSD;E!y2ca>VX06Pr$n|3CbC2biTz!V&D!xgUa z4le$p3#4?Ts-q3@)L+<6J=I4sF-5HT3U;0Jb(ZA{g=1CEYRjR`W7fapT?HK+l8o)2 zb&wE}-VJrbokI4W`=d(NnV9-ibu=-!4%$Y}wFBj}V--N^#)$TNJ&aj8Bls8>+Z+@`Y`!T60W?0c(4kyOBD~7S8iMGq+wt87 zSzMd%Z@eA~eiBS_)8Zur@uL&n=eV!GPyTBIlU!&y>VIy8yL3l9*Bn!d z^{<)}5|yBx5RSRqoRLro)MR;#MqbuE4M#Z6j)60xdHo1Zz3*`luU1zTAj%s}ay-m5 zjKHW`!*&2FTW36LsM%z#@uN;@kDFgEBcKPUZ=2#N7|-QQRG=AgLjW*rhg9!2FwFUU zStr^Nx}q?+Mt3BBbpJtNI*7N(R^aNc-4 z*>n&#BQvB}dFX;B@BSrkbdd!R7*B~-gE-=sabYOh)|2n-8Etqq3_4cxd9$}jVMUz( zmbzWlIp88BLAT~k=F);N>2CK5l#;eRq;+>R^9j2UP0LY))hVysof@2wHwjX+*()&E z{KPGf`O(u@zFKGa6U2rza};yZ$SobKMS#%9$VE)pC?3n_>}`Y`;pxjE(?0eM&WcNU z54he(F&yqbjP}7!)RxK+xQeh5FM!;lRo-_`0^)8l^F7RLB8=FK#mXZ)EQ>_iVmZrc z3+wBSe2Y+qVd6pYyY2e+aKZfVPy?9F?V4kDKr9+Br4)aX>ueV~cK5uJqV%YP0&!A| zvtp-9(=EN+WxM7CPBg&47XY`Z3XsIv2h9jsUjt~*rq7AV=~{q%dFa82i}*&oqe6uX zfZ6aD`NS2`SQbqQ`;EOJ_V4Z#>I@Ry>+Ab9 zk#qTOYL)bRz8oi-_kSn*-uM!SyQFM8@RZf&aCS_eGpv2nRZHSEvSDDxee(;tA~;L- zx$$BF?rQRlsE4B~8s(3gt(g>;jaJPIu1C%`KraJ1oS9|A+V#GTKD|*dC*BIpCuxlw zB|gCQBHe_%6cd5MG0cb8#Fg0FVaX}q$9RRQC%il`-|3z zf$#>Q_EnYu&j&{zoN!q+N|Z%+PdMfYcYYfG>KM*ujpmM(EokigxH=MAA2IPT3vmKM zDU*vJMri;~ZWTc6XAPF7dNiC1)`okD`qzd{^~ni-nku>dVa}2j3Ys^St-_~&{x#(_ z7^sBoYBSiE*fc6C0J9j!fz+-2 z&(wV3J}|kBJcx=S5vg$jTsdj6E6;MPnenbeM*yT4~h)o5<{?^OEkD58E)5V?wQxa%V&?$-f< zrPf1LQ0b{{OB>V#(pN^;7QYk7364!3!VKrqg!D1vhQ7RhZUUAAqK*@H_iT>NHv@N2 z7rf`%(+W3G4@PIi{bIB~@9K|NLQ2(gjrg#hCb(_kAWu%GP=v0QY5W7X{OC~5Bd8zm zFL>`OFpO4(LQ)$XN9w`Jq5i%5j*$3|d|O_SrKSe~<6VIODg_bdI^u*D3`X-($yZQa zH)UULIt^Emo&ZCeAAWnVuNy!POE`0nit)mqQ|9N?aOa_VjGFW z)B%U7X@-1nKz68t=jLQMO^8UUIDiLUx==-|Tm%n`+0NRnhw%GtchU-Gr>SCNiW#U4 z$8gBUWUPV=KR25q>(3Wl^W;6yNncJt9b>F!|2+g4U!}0^<6d`%N}p~i=JG7)+%)rB zf3FGDdhC`z@Q!oyd4g$GQf^DA=G$2yZ>tTU-Sdad=;|!Ce8JyOx_=i1Db~eU=uE~U zHeFCY${Zjg>Nn9=1e751PjG+GIIV-4O+7HS(u-D~FpFzm>Dv8H=g*1f*$d&-Q5z){YiiL7;_P;Kg_#V3d=|cB0k8jRv+6pgKU-$_)x(Le9#XCL za~Te@kPsis-*k{(yT-D9p2n(5@=75jMc=P>B~SQ${LM1$=l3Budb^(Z?a&h9Uhdfk znc1gv(k2c`190RdM__Lx+PJyCG9+$8`_lkfgb>eejYBFbHLZvEP@N6o+{P!ck&rLc zVO7m+_3)sE&0zs5xW1M!-@mM(5DxTrnepLwFE$L0{Zy3CrJo=*$U3aRt%Q zA5~%rd^UK%W?>kg)IP-~Rmt`WTe8`9WbDv^Pcg6fF#rOB!N#MZE3wpzbl z)BP+>U{CKlrG9WTaR2)be!VGU8ma)Zj1>}{ol8vU<-`$ zJht^?|N2s@?{~nIioRPt=wDvw|GD}h*dz~epV)ea{k`L$=*eOCTpGmj{}12W!Vb+r zeeJEi-TnzmI2G9S%LJRF|A+5=e+kUuE|E+9^Pm5DfFD7t3=#pJ!d#xM4MzX@?=z4D z2&$?a{%2kPJ+Qz1;Lbxw6<|AEg*N!-Keznelp7%0S6j00f0zQ+sZdk*F~dr2PQ5L! z1-Inx3y6la4g5cw=@=WUwtg4JLhh^=9=?M@Va#-2dF-1DUZ$xJNh`AV7f@6GTr|F{IY~i;dferu43Jzy+_iDL2DhPK9wwi^(j&Ba)f@Eo6~I95xp(vJt`W- z$KpRA!tT%7JS)yOwgPSUK*obn55Kt-M^Ox^$prG;MH` z59V4Tjo(ly`2GqKw7l7J<+l(L+RM$5em+8@m1ko@_YA3ew&JV!I&f}Ieh|_XgRbdb^N~!WRL{Qy>mNU?M4>Dy=0%PorKx%-F@y@({+$5f zeouf7(mpEMT@@xQc<2tBgC9r~rtxPuh;`dVq1z(ZDWF-RC6(X{(arU9A791J8 z!~6Nl2FF^{(`Dty^&z=pOc?oy!1{Od z_5OL&#u|ispCyBHCV2%w!NQ;|`)2oTD2rB|yOF7S0o7%A<5%R6+4W)d6ra;q&|wS_ zWjqV{u`zqtcTs?-Y_(odi)7$1#Y+Au>WJdpVdxQ-%S)FEfvHiTR>mJm_1>IOY+f20 zQPiT{7f~@VD!YIY+%dfMnZ)`PO02=*%Vj33r<3i1g_ir!y)E)5`c?M{Rpgkefayt*I7I0i6**dD~5Z{TL2N>nOdJ7Qz;s?xx z5XivAM>ii~G2@8+yctvP5drWe0t7F^tJqG1RDrSGJm@j-%fH+@{YOP!Abv}4zx${8 zFBE`d!L#e#fz$Ug=8#j*fWj}2-6!wiM3LTOX#?6A#yJe77{RFT+l*%xO6-e+bfrC< zQ}lki|3=e;`|t1fI000%4Cq@y9XWA~S7dJh*OtqbC1rlsha%eY)jm)?lk;}v>VgoX z>J2CT-!C>(6!77>+aR;qrJ8LHbrkMSOf&oK`9H(Kv$c-AazoSs_|(;eOAfJkhAHdC zg`&l#XZd(MoJi9;RXeA;zMA~XkZ%z#Yh6K_1;*>sV5e%+M6AEHl`Uz8Bn#opD=&nv z|8>L&{WWyM5hmraY^h^EpAB^yxzu46f2RII`lssKUvL8{FUr^8)^ zp^GvC{|pbCi+g+@RY10sQo)ZKj(ra{33af=;X9IB8QU~m3&uxy$K$dKI&&i2@()cW z7;PQE`XJ-_Sj8X#$rqMNCEHX32NE>(w94vFZ2%)P_fRmO6^!h8XBZTNy)G8HO+?b>ZP| zjwGY`5^UZ?a5xCq-poWC_RfJPrPQP#S{tMRhNF3%4Q>fogz-A{kXJTk;$`xZ(>uo} zKdun>huJIh=6v&*i(+15FDvCiYMMN~(c(vf}d|j1WV? zSEnOwa5to9Vd$n?22jAz9i0^f(3##j&}p5`ZXHFUoX}8ceG}`4O4*igA&3Ujz#DBB z{W&L>X&3|q_$mPID!Q{)6;WN5H))$VYPbpPrLR&&odkD7 z;V|=(UCuk#pl>5v&R`|23dm#c8;8H1?R#>rY^B_^teb zVzPr`yiB$ISF5_0%9^cu-;~ZpJ|-rxr`D%1c#IMRZ_}VGXm$sQjM$UvfdklZYqg7w z%@=^Qq<2T(BxX#3Iph}d?(v_C{KqYxlZJzrwxG1tE~*w0!rDjJJdu!Z@?^-N0Htp#BTT}`K_MQd_VyW&Aqbv;IWULpE~G~OjS*CSifB0I!1qu!|#Dx8;cR!a#3=b*pZWZb4bmV!>pzzw?-mZu?;( z5Z$&j=mdyi9l-PEndSp+>>OAJjr`rP;Wy>Xoj{*CR!lJVs z*2c+n0rdWrK}R}VCLOy&ME|<6d|jeYZk6)xgHg6H>zj>P`8|8gDzZ#KfM%IBy4eAn z-k25rTrG~XrV30L5-kBCrQ~dW*J@|~^vSCtQ+todf4IOSJdva0PvY6@mmG_SkO$A`H?NtSD z?ib)#d<(q@4mmMkcg1eCAL>KFXG~Q6NnRx|=^y*|3Pu);E+NE@$-1J|%AyxZn8hmk zqNOq#c||3tuth%t(E}=W(hl>|J;U5)_EOq1pB*U5DQ5uH7(3ULU6^UCc6!zhG2Rn> zXvvG2V>UY+hd8`Rg@ClhtGVY9tMBH-=y;HD{46N{sG2QEy2Jz(jOpsOi%+>zzVmlo z?Q6vq63!r5Tj?jn=}Q-_P`KRey4E~b%DkRpiEdn+Cn~RfzD~?*C(+o)rF_Y3{kwKV zki(7{rwx5P;H%q@yi)^X9Eaw-uExF|uhpDY0gq428%yQ4lINT>@)yuy<0;(X-Ij9h zrn@WpdR}ZSZmetBq)z`;1^(f6M;?rGv-qT)B=Rm3HB4zx(h+N*vRCtoh)b*S~J(-X(HrgcAaY6o^# zAP+RNjTHh&8@Z%b2er_RimfB0Ref)Q?M}wq`7ZNKJ6eHpXO=Uk&#IH=7MZm*4n@=f zYbhwr@8L`PD_YG9lN;-k95cR4w)LOgG*DeZ;jrY4=LsjBhJ@?EOIm)As(8r^bn+AF z?^u)q)H*DDZA_0|c|KP?iQXae{$bLUwMkd4ksii^{YOqF?Dl!9vG?vp-i13OFL%H z@-Xo)Ra_Q(ru?+PWu-pitH*5GOM$Krq<_8KDD7xQXO(7MnoV5yLal2&ay)&vA^_*r zGAZWVE+j3He-ab0vGYS5>0W+%DKmoQXUC-KAa8v=&QwGRXDE&7nmWtrS%!kQ zKG8WzIfbwdAH`$)-f*R|E-msGS) zIERUs%*P2%RC$Tby`hn}YT$&k$=I};M3Qq7+ZIQzZyQ82k$G)JWzDBXM)woga|?~a zi@xtt3Eid}q;U|eLBlDu)Pwomlo z*+S^*+?=a;VlJ}o6(4@{KulTc-W27)CFbP)I1vZEkM{}qcCP@;Ds0c9X6~ehZKvW0 zfhNrOZznwF_WKDr+#eJ*^_iEfc~u?FbYzDD#ZzXJrEetSuSD&rL?w0hFWp&&%_M9- zt*Ut*Sx8mY=;LiTNO6BN_l#}_ASDZi>Z@?`5&6im(o3~zQCz6@E5w}(G^*-^m z?(qFKt4J&Bk}{-mY%}$`$+c0dudAKz(LE?%8l61#0bI~l#Bb#~*UnpWiQTIMe0^1tGqI!Qz81s%dy{GG%%o9F zD@f8_UdE%+>$0D|tiLSCss;rIOT8!A)(nUD9_!03#R)_Dkxzj2kb>VT!GCTAlyIZQ zucZ3g^T$ZSOrp_+FdLP@SxJPVcrAONEV{UlZSv?!YA}HWiYJbQyT^BiOj@Cl9vOP} zS<4NX9DKf0`p~$Qhf7hOx!(d$T5jy?w1&${e9xT+pT>84%E>hyZPrJY@WBywIfEtA@dxI$zQyu&(HFziwvkj)-}a{A(xWl|r@ zNDSb}zdbZV9WcXj9D9nqL%n#p$*3%e*wHI6$QgoqRQ`p#d0|f|zHR`?K@D22+@Bf; z32OzAJal>{Y-3>RhNE?(#Ft}W0Q->iIhgQ-VMcbvaFGOF@=3Yc+}pl1kdpyKVb{{&s zs^m6uwJl@gS8bp=Q7;1d6d_wR8&Dy~dL`gV+@fBca4c5D!tCC~Jc!c~&RzBe>KKTzUeUt1e3UN;-ik6)-a6D`F; zW}1|hhP{U&pK%iAz&w&WugWT#r`GjG@2-~0$R8Dk#kt0^lhoyam+kZ!lnTMj>?%S| z&-LtDXvA%%L*r!5+n3nrZTn{*;3vx>_RxxD(IYkOb&>eFGr0pi5R?Ea%EnwM30f8 zikUOyansg~K)PycP?4RP#~k`Ogr^J8UZX8dNgb_*F?&R?1#H__JN=eyKv=di<1NrE zE@7H8qg1og2txdN)(0eZm{In>#pL2ybL%smzm#}MJiE3%Z6*i~(e4cA?AZl|RrPs; z+MEGwm@SGpnu43(6Dm(XJyfl0s*{@Ls(XsenLjiD!*z1wqmuhyB*I3b$8uufh!5IO za;R|5KJtxTip8w0OX`U_SRfty0r6G_MkPqh8P_fEdx~Rp@snzgv?NmWR@z%`+Irw6 z8BXIDj_{GTeTH;&r2$Ef$I^SP8jzH_VQSbp(haxQdmU5DUaTw6YI81sI3c1kIfUxI z0VaSbP82a3#c}?;B+@a?UIrYfx1ErX#d{F3iE3od5(@M1lO<9Vmqi91G0r}Ks2zgu z%_cksE7GSoYoodhpAaP%@=PJcyPTqysvtygGSuW7(IQ(qBDM4}gR?jwEDCB(O{K}+ ze2ugt93g84xxLJfh3TUWbd8SH)a&M@E*4?G2&W18SYeOXkDkJq$}81U*ZIdk^(@R_ z!@6{hW^n!$4G?Ff_%I;Z^9k(_l`l`tN-cPyJshkJ(5IYv5KF5VEDIiheRpal3U8(G zh(JEG$eZ8e!;-Pay>WH5h*668M$bl@U!!I;7kFz89fbMpvGD=|DGk*q_}+)vK|(Iy zZx$9DA!@haG$rVUmyg6vn1$n`Vx8=T8F#t}mz4JBv!+=dm~Oc=uw z?{}vo#iS`HMukNb{wi09`NK>6V2I4@Wowe!0S>Hsr9133C#{$;GUvCP9fn1npyQu) zV{K5VSY!jzzPP@oveyIsmUbhIz=Oh$C}$uL3ei1CoCl6p<=tkaUzb zkGn;^2)jLn+vQOd#A3}7b@3CJ8+(0ifLb^n5Rv(!m1UoS1j@vzDFv;nCSNs*I-~Ij z={=mjXkQqT-wJ&sIE>Vj2UWSPIs-Jw!!zWNn0PEpk#F0W_b;r4Dg&=vSI6Ez; z%TRT0vJU2AMAd~hZ}HMh>igh2peuTKZ)}S#>O7IfKx1y`U7LCv_=7Y+3stS17n6zx zdb25bn6%|nr=KWV>}{CW@SEM!kq#Y^Dm<%x7i4j0hhQX?9^Qj>lFd$I&KeMlgiPny zgzOu(H@ui7dF(uNF^B~>v2MD?V&{rJxF9)Kg?xI#G5F7s{(O ztr52gW0~Ff^f~@ot2c83@0UNJ=QGTM7l)Si+i@Aym1xlzXm%$@s-d zw@H`Tn>VoKob8519hE(GeBblFm3e{p7^6kBL#)3LgR%rsq&7*TW7guWU^&{^+8%1b zupRu}nLbfwkoCKuREh>06!|WJo`Y3erNL3P>=%_0)UAdSa|Xj-Z(F>0Ac|aDTN)*k zis0{+fT+l;e~q>RK_dDot6qj(fbL zMThDs2ue9u-A6y)^&;y{<=N?+FF^mTNVxtgLt6_Z3z`TEZ>(13kal64eo)Q5YvVf2 zzwB3>N3)y<+0WZqqBFi~@4BhT3t0+Cv>baf$rqV+Y zULn+smGdWU%;){%f%ETWs7a52OdSueQkcW|*EJE%yO;cRO{k&G8lAyFcRTbJnR70q zFIxzeF2Y{Rg6*FmVAlLHTxkV*X*DV5wQtkSFq?9fPK1weBq;jTA1{K=$m90CS1+tW z6*SJj=WL(?!#fXjuh7wiYko-#T&=-L+(5Buo&yFrX-FS!C5^HT##6Il-AO5#D#r}c zW&!1sh|C6OKY7e&nX;%;{$egCnepL?QuqZzK~> z?C{6(7cLY)y?A^oS&(t*Kh-+@g?hun+eIDJ0l@%$P41Y95xNsg?PE|epmnHp-bATt zn&pf#?$Di7B$F~KgYsel!p-p%F7g!WWkd9o_~+MZj@ys0%M{}~iTtPC9w8WkaK2S& zhPbtPlZD~g?dr}PW925&VLSOS9}vcz(QKaj#BTdYIA$cy=4rL;D;vrAl$~Kguwtx` zQk=FvI~Q8Rey}Z9enZc{IBSnoW*A7J@c2#22kvEv*OEq!8gl!FM;An0ajxktLxF3{ zb@~<{c1f-T`Q>+$(j4QNX9_bIiGPHwIl{ZpaH8BZKP#j1td90-uo?@OJAivN=_d*k zUBk*URi`6%c{#jctnJpOpXm#cl3bhel{$`UHxx;D=+`~$Bz@sm3C{IT$cX1T?i5Um zVlHx=eNOEZhhIQ&fq+@akOJDF#k?pOsAa4P;Ui4s?+!A!f}bq6*ueYyyBk5dw2@A1 zOxgB)52k&ueK*)_Yhq_~9oi0++p9fJcLE$`BVh6}36XiSt>^d}2$cvnkdVf3O}+!% zyBSHW18)=8?%L;q}q2h?+*o&hQ2oMgZ18d zYSO6a`{B1ZoDDc%!PbHeWtsnLYmx2ayWl>}Kmx3Hmany5~ zh{8lCwDJ0WT=xO*G7_e;#jP#G+d-F_h!2?hN zLE~mhF`TpdxT{g&+$72A`XI1sj!R7Kq8~f0W#B#^9wAP?=G1BgfLT*0c1?i<5TvG> z?GfnC;4rOxS$v97qC9TGDLer?RrH$6>Q|j)lN6Y}r518;W?ReN@V`=>lor1nj+Z=U zf{R>oiJ|=V4oXKr8`@%<8d4zr{NbYKV2;2kq;Tq6pUrC!ez>|r1kmum`01{LFpx+n z7}omsIbO*S1e1@eZDKJ0{pr_JcEe@Z=X6qjom6_ID#2Qkx@^@i{ybuVX~He|s9W6M zW3BEX_@d;FVS}G982+X%3+~@klxp*PBe~#*ABn|B{`&$pzs3X$Ka4B7^?mKU;D6aW zDK7nT?WCn(aJk?e5%b69+PT1TjFVKwezh7DqO!1d#~c;JHrFnJ^7}kH3pCtcLX?h2 zX70LAw*I1t2_R223d$z#gU%=3A8g)f}QezuaWH96QODVDQn1G(3?Q^zy<(EsQGp%;Ve1ps<2$ zOA|Q`pHEL=J|L)51G*9!&U(+1@V}n~sc*Jnj4vbUd5iAadB9QB++c{ zgqsvVaqO7`*^8UDp-Rz`(39RC`|BmFdq>U?DuqCdSo?ucb`fw!rb|u#LY?gMg25Lz zB1q8og1>4Rpk~j05B+~Z4rOVjk9x@9B_uZ~4QAYI?zV=caAd`)TM* zUj&k(c{VrxSE(346R4

*W0j(h7WL!+^?Z1R8F8Go(QsCaRm!<}^Ps0 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%0DNNo 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 R_pXC~XHO}~;ZGXf{C~IzG?@SZ diff --git a/docs/images/add-tile-axis-default.png b/docs/images/add-tile-axis-default.png new file mode 100644 index 0000000000000000000000000000000000000000..eb30e319b67dae26ab73f83c29cbe0a5ec1ae413 GIT binary patch literal 75639 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ּo=n~;I@@Mxo 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 a586`4qos3UZgE85OG{l}?ZpK|=)V9B?AN^j literal 0 HcmV?d00001 diff --git a/docs/user/app_getting_started.md b/docs/user/app_getting_started.md index 7ddb8cd..a09bc71 100644 --- a/docs/user/app_getting_started.md +++ b/docs/user/app_getting_started.md @@ -1,55 +1,188 @@ # Getting Started with the App -This document provides a step-by-step tutorial on how to get the App going and how to use it. +This document provides a step-by-step tutorial on how to get the app up and running, as well as instructions on how to use it effectively. ## Install the App -To install the App, please follow the instructions detailed in the [Installation Guide](../admin/install.md). +To install the app, please follow the instructions detailed in the [Installation Guide](../admin/install.md). -## First steps with the App +## First Steps with the App -As a first step you will want to define which Status(es) can be applied to individual tiles in a floor plan. This can be done by navigating to "Organization > Statuses" in the Nautobot UI, and creating or updating the desired Status records to include `nautobot_floor_plan | floor plan tile` as one of the Status's "Content Types". +### Defining Statuses for Floor Plan Tiles -The app installs with the the following statuses by default. `"Active", "Reserved", "Decommissioning", "Unavailable", "Planned"` +The first step is to define which Status(es) can be applied to individual tiles in a floor plan. Navigate to **"Organization > Statuses"** in the Nautobot UI and create or update the desired Status records to include `nautobot_floor_plan | floor plan tile` as one of the Status's *Content Types*. + +The app installs with the following statuses by default: +`"Active", "Reserved", "Decommissioning", "Unavailable", "Planned"` ![Status definition](../images/status-definition.png) -## What are the next steps? +## Next Steps + +### Adding a Floor Plan to a Location -For any [Location](https://docs.nautobot.com/projects/core/en/stable/core-functionality/sites-and-racks/#locations) defined within your Nautobot instance, you can navigate to the "detail" view for that Location and a new "Add Floor Plan" button will be present. +For any [Location](https://docs.nautobot.com/projects/core/en/stable/core-functionality/sites-and-racks/#locations) defined in your Nautobot instance, navigate to the **"detail"** view for that Location. A new **"Add Floor Plan"** button will be present. ![Add Floor Plan button](../images/add-floor-plan-button.png) -Clicking this button will bring you to a standard Nautobot create/edit form, in this case for defining parameters of the Floor Plan for this Location. +Clicking this button will open a standard Nautobot create/edit form. This form allows you to define the parameters of the floor plan for the selected Location. + +#### Floor Plan Parameters + +- **X Size** and **Y Size**: + Define the number of tiles in the floor plan. + +- **Tile Width** and **Tile Depth**: + Define the relative proportions of each tile when rendered in the Nautobot UI. + - You can use the default settings for a square grid. + - Alternatively, customize these parameters for a rectangular grid. + +- **Movable Tiles**: + Determine if you want tiles to be movable once placed. + - This feature is a optional setting to assist with Custom Label creation + - Default: `"True"` ![Add Floor Plan form](../images/add-floor-plan-form.png) -The "X size" and "Y size" parameters define the number of Tiles in the Floor Plan, and the "Tile width" and "Tile depth" parameters define the relative proportions of each Tile when rendered in the Nautobot UI. You can leave the tile parameters as defaults for a square grid, or set them as desired for a off-square rectangular grid. +#### Axis Labeling and Configuration + +Default settings allow you to configure labels, seeds, and steps for each axis of the floor plan. + +- **X Axis Settings** and **Y Axis Settings**: + These parameters are divided into panels with tabs for *default* or *custom* labels. + +- **X Axis Labels** and **Y Axis Labels**: + Represent grid labels as either `"Numbers"` or `"Letters"`. + - Default: `"Numbers"` + +- **X Axis Seed** and **Y Axis Seed**: + Define the starting point for grid labels. + - Default: `"1"` + +- **X Axis Step** and **Y Axis Step**: + Set a positive or negative integer step value to skip numbers or letters in grid labeling. + - Default: `"1"` + +![Add Floor Plan form part 2](../images/add-tile-axis-default.png) + +The **Custom Labels** tab provides options to configure a custom label range using the following parameters: `start`, `end`, `step`, `increment_letter`, and `label_type`. + +![Add Floor Plan form part 3](../images/add-tile-axis-numalpha.png) +![Add Floor Plan form part 4](../images/add-tile-axis-roman.png) + +## Parameters + +- **`start`** + Similar to the default seed parameters, `start` specifies the starting point for the custom label range. + +- **`end`** + Specifies the last label in the custom range. -The "X Axis Labels" and "Y Axis Labels" parameters can be used to represent "Numbers" or "Letters" for grid labeling. The default setting is "Numbers". +- **`step`** + This works like the default *X Axis Step* and *Y Axis Step* parameters, allowing you to set a positive or negative integer to control label spacing within the grid. + The default value is `1`. -The "X Axis Seed" and "Y Axis Seed" parameters allow you to define the starting location for a grid label. The default setting is "1". +- **`increment_letter`** *(optional)* + Applicable only for *numalpha* and *alphanumeric* label types, this parameter controls whether letter patterns increment. + - *Default*: `true` + - When set to `true`: + - The letter portions increment, but the numeric portions do not creating patterns like: + - For numalpha: `02AA, 02AB, 02AC` + - For alphanumeric: `A01, B01, C01` + - When set to `false`: + - For numalpha: + - The entire letter portion increments with every step creating patterns like: + - `02AA, 02BB, 02CC` + - For alphanumeric: + - The letter prefix does not increment, but the numeric portion does creating patterns like: + - `A01, A02, A03` -The "X Axis Step" and "Y Axis Step" parameters allow you to choose a positive or negative integer step value that are used to skip numbers or letters for grid labeling. The default setting is "1". + Both *numalpha* and *alphanumeric* label types support leading or non-leading zero formats. -After clicking "Create", you will be presented with a new floor plan render: +- **`label_type`** + Specifies the type of label. Supported types include: + - `numalpha` + - `alphanumeric` + - `roman` + - `greek` + - `hex` + - `binary` + - `letters` + - `numbers` + +!!! note + The total range of configured labels must not exceed the configured *X Size* or *Y Size* of the floor plan for their respective axis. + +## Configuration Examples + +### Single Range Example + +With an X Size of 10: + +```json +[{"start": "02A", "end": "02J", "step": 1, "increment_letter": true, "label_type": "numalpha"}] +``` + +```json +[{"start": "I", "end": "X", "step": 1, "label_type": "roman"}] +``` + +### Multiple Range Example + +With an X Size of 10: + +```json +[{"start": "02A", "end": "02E", "step": 1, "increment_letter": true, "label_type": "numalpha"},{"start": "02AA", "end": "02EE", "step": 1, "increment_letter": false, "label_type": "numalpha"}] +``` + +```json +[{"start": "1", "end": "5", "step": 1, "label_type": "binary"},{"start": "11", "end": "15", "step": 1, "label_type": "binary"}] +``` + +## Creating and Managing the Floor Plan + +After clicking **Create**, you will be presented with a newly rendered floor plan: ![Empty floor plan](../images/floor-plan-empty.png) -(This view will be accessible again in the future by navigating to the Location's "detail" view again and clicking the "Floor Plan" tab.) +!!! note + This view will be accessible again in the future by navigating to the Location's **detail** view and clicking the **Floor Plan** tab. + +### Adding Tiles to the Floor Plan -You can click the "+" icon in the corner of any rectangle in the grid to define information about this Tile in the Floor Plan. (If you've defined a large floor plan, or have a small display, you may find it useful to use your mouse wheel to zoom in first. You can also click and drag when zoomed in to pan around the grid.) This will bring you to a simple create/edit form for describing the Tile. +To add information to a tile, click the **"+"** icon in the corner of any rectangle in the grid. +- If you've defined a large floor plan or have a small display, you can use your mouse wheel to zoom in for a better view. +- While zoomed in, click and drag to pan around the grid. -You can assign a Status to each tile, and optionally assign a Rack or RackGroup as well as specifying the orientation of the Rack relative to the Floor Plan. You can also specify the size of a Tile if you want it to cover multiple "spaces" in the Floor Plan - this can be useful to document larger-than-usual Racks, or to mark entire sections of the Floor Plan as "Reserved" or "Unavailable". +Clicking a tile's **"+"** icon will open a simple create/edit form for describing the tile. -You can place racks within the Status or RackGroup tiles that are covering multiple spaces. When placing a Rack onto a RackGroup tile, the rack must be added to the appropriate RackGroup. RackGroup and Status tiles that cover multiple "spaces" can be increased or reduced in size as long as they don't overlap with other Status or RackGroup tiles. +![Add Tile form part 1](../images/add-tile-form.png) -When a Rack is assigned to a tile, the display of the tile will additionally include any Tenant and TenantGroup information for the rack. +### Tile Options -![Add Tile form](../images/add-tile-form.png) +For each tile, you can: +- **Assign a Status**: Choose from the predefined Statuses (e.g., "Active", "Reserved"). +- **Assign a Rack or RackGroup**: Specify the rack or rack group associated with the tile. +- **Specify Rack Orientation**: Define the orientation of the rack relative to the floor plan. +- **Adjust Tile Size**: Expand a tile to cover multiple spaces. + - Useful for documenting larger-than-usual racks or marking sections of the floor plan as "Reserved" or "Unavailable." -By repeating this process as many times as desired, you can populate the Floor Plan in detail to indicate the Status of each Tile as well as the position, Status, and space usage of your Racks: +### Working with RackGroup and Status Tiles + +When tiles cover multiple spaces: +- You can place racks within these tiles. +- For RackGroup tiles, racks must be added to the appropriate RackGroup. +- Tile size can be increased or decreased, as long as they do not overlap with other tiles. + +### Additional Tile Information + +When a rack is assigned to a tile, the display of the tile will also include: +- **Tenant Information**: The tenant and tenant group associated with the rack. ![Populated floor plan](../images/floor-plan-populated.png) -Once tiles have been added to a Floor Plan, the Floor Plan can no longer be resized. This is to prevent the resizing of a Floor Plan that could leave a Tile outside the bounds of the new dimensions. All the tiles would need to be removed or the Floor Plan would need to be deleted and recreated to change the dimensions. +### Resizing the Floor Plan + +Once tiles have been added, the floor plan can no longer be resized. +- This restriction prevents resizing that could place tiles outside the new dimensions. +- To change the floor plan's dimensions, you must: Remove all tiles, or Delete and recreate the floor plan. \ No newline at end of file diff --git a/docs/user/app_overview.md b/docs/user/app_overview.md index fe50ede..8b38026 100644 --- a/docs/user/app_overview.md +++ b/docs/user/app_overview.md @@ -36,7 +36,9 @@ Included is a non-exhaustive list of capabilities beyond a standard MVC (model v - Provides the ability to place racks in a group that spans multiple tiles. - Provides custom layout size in any rectangular shape using X & Y axis. - Provides the ability to resize the Floor Plan until Tiles have been placed. Once a Tile has been placed the Floor Plan cannot be resized until the Tiles have been removed. +- Provide the ability to make Tile objects movable or immovable. - Provides the ability to choose Numbers or Letters for grid labels. +- Provides the ability to define custom labels for grid labels. - Provides the ability for a user to define a specific number or letter as a starting point for grid labels. - Provides the ability for a user to define a positive or negative integer to allow for the skipping of letters or numbers for grid labels. - Provides the ability to save the generated SVG from a click of a "Save SVG" link. diff --git a/nautobot_floor_plan/api/serializers.py b/nautobot_floor_plan/api/serializers.py index e4800a5..b272c71 100644 --- a/nautobot_floor_plan/api/serializers.py +++ b/nautobot_floor_plan/api/serializers.py @@ -15,6 +15,16 @@ class Meta: fields = "__all__" +class FloorPlanCustomAxisLabelSerializer(NautobotModelSerializer, TaggedModelSerializerMixin): + """FloorPlanCustomAxisLabel Serializer.""" + + class Meta: + """Meta attributes.""" + + model = models.FloorPlanCustomAxisLabel + fields = "__all__" + + class FloorPlanTileSerializer(NautobotModelSerializer, TaggedModelSerializerMixin): """FloorPlanTile Serializer.""" diff --git a/nautobot_floor_plan/choices.py b/nautobot_floor_plan/choices.py index 9cc4fb5..8a3fc92 100644 --- a/nautobot_floor_plan/choices.py +++ b/nautobot_floor_plan/choices.py @@ -19,8 +19,32 @@ class RackOrientationChoices(ChoiceSet): ) +class CustomAxisLabelsChoices(ChoiceSet): + """Choices for custom axis label types.""" + + ROMAN = "roman" + GREEK = "greek" + BINARY = "binary" + HEX = "hex" + NUMALPHA = "numalpha" + LETTERS = "letters" + ALPHANUMERIC = "alphanumeric" + NUMBERS = "numbers" + + CHOICES = ( + (ROMAN, "Roman (e.g., I, II, III)"), + (GREEK, "Greek (e.g., α, β, γ)"), + (BINARY, "Binary (e.g., 1, 10, 11)"), + (HEX, "Hexadecimal (e.g., 1, A, F)"), + (NUMALPHA, "numalpha (e.g., 02A)"), + (LETTERS, "Letters (e.g., A, B, C)"), + (ALPHANUMERIC, "Alphanumeric (e.g., A01, B02)"), + (NUMBERS, "Numbers (e.g. 1, 2, 3)"), + ) + + class AxisLabelsChoices(ChoiceSet): - """Choices for grid numbering style.""" + """Choices for axis labels.""" NUMBERS = "numbers" LETTERS = "letters" diff --git a/nautobot_floor_plan/custom_validators.py b/nautobot_floor_plan/custom_validators.py new file mode 100644 index 0000000..a7d06f6 --- /dev/null +++ b/nautobot_floor_plan/custom_validators.py @@ -0,0 +1,335 @@ +"""Validators for nautobot_floor_plan.""" + +from dataclasses import dataclass + +from django import forms +from django.core.exceptions import ValidationError +from django.core.validators import BaseValidator + +from nautobot_floor_plan import choices, utils +from nautobot_floor_plan.label_converters import LabelConverterFactory + + +class RangeValidator: + """Helper class to validate custom ranges.""" + + def __init__(self, max_size): + """Initialize validator with max size.""" + self.max_size = max_size + self.current_range = None + + def validate_required_keys(self, label_range): + """Validate that all required keys are present in the range.""" + required_keys = {"start", "end", "label_type"} + if not all(k in label_range for k in required_keys): + raise forms.ValidationError(f"Range is missing required keys {required_keys}.") + + def validate_label_type(self, label_type): + """Validate the label type is valid.""" + if label_type not in dict(choices.CustomAxisLabelsChoices.CHOICES): + raise forms.ValidationError( + f"Invalid label type '{label_type}' ." + f"Valid types are: {', '.join(dict(choices.CustomAxisLabelsChoices.CHOICES).keys())}" + ) + + @dataclass + class RangeData: + """ + Represents data required for range calculations. + + Attributes: + start (str): The starting label of the range. + end (str): The ending label of the range. + start_num (int): The numeric equivalent of the starting label. + end_num (int): The numeric equivalent of the ending label. + step (int): The step interval for generating range labels. + label_type (str): The type of labels (e.g., 'alphanumeric', 'numbers'). + """ + + start: str + end: str + start_num: int + end_num: int + step: int + label_type: str + + def validate_numeric_range(self, start, end, current_range=None): + """Validate numeric ranges (hex, binary) considering step size.""" + self.current_range = current_range + try: + start_num = int(start) + end_num = int(end) + step = self.get_step_from_range() + + range_data = self.RangeData( + start=start, end=end, start_num=start_num, end_num=end_num, step=step, label_type="" + ) + + effective_size = self._calculate_numeric_range_size( + range_data.start_num, range_data.end_num, range_data.step + ) + + if effective_size > self.max_size: + raise ValidationError( + f"Range from {start} to {end} has effective size {effective_size}, " + f"exceeding maximum size of {self.max_size}" + ) + except ValueError as e: + raise ValidationError(f"Invalid numeric values - {str(e)}") from e + + def get_step_from_range(self): + """Get step value from the range.""" + return self.current_range.get("step", 1) if self.current_range else 1 + + def validate_numalpha_prefix(self, start, end, _): + """Validate that numalpha prefixes match.""" + start_prefix, _ = utils.extract_prefix_and_letter(start) + end_prefix, _ = utils.extract_prefix_and_letter(end) + + if start_prefix != end_prefix: + raise ValidationError( + f"Range: '{start_prefix}' != '{end_prefix}'. Use separate ranges for different prefixes" + ) + + def validate_increment_letter_for_numbers(self, increment_letter): + """Validate increment_letter for numbers.""" + if increment_letter: + raise ValidationError("increment_letter must be False when using numeric labels") + + def validate_custom_range(self, start, end, label_type, current_range=None): + """Validate custom label ranges considering step size and prefix matching.""" + self.current_range = current_range + try: + converter = LabelConverterFactory.get_converter(label_type) + + # Set number-only mode for number labels + if label_type == choices.CustomAxisLabelsChoices.NUMBERS: + converter.set_number_only_mode(True) + + # Get numeric values and create range data + range_data = self.RangeData( + start=start, + end=end, + start_num=converter.to_numeric(start), + end_num=converter.to_numeric(end), + step=self.get_step_from_range(), + label_type=label_type, + ) + + # Check numalpha prefix matching + if label_type == choices.CustomAxisLabelsChoices.NUMALPHA: + self.validate_numalpha_prefix(start, end, current_range) + + # Check alphanumeric labels for valid letters + if label_type == choices.CustomAxisLabelsChoices.ALPHANUMERIC: + if not (self._contains_letter(start) and self._contains_letter(end)): + raise ValidationError( + f"Invalid alphanumeric range: '{start}' to '{end}' must include alphabetic characters. " + f"Use label_type '{choices.CustomAxisLabelsChoices.NUMBERS}' if no letters are needed." + ) + + effective_size = self._calculate_effective_size(range_data) + + if effective_size > self.max_size: + raise ValidationError( + f"Range from {start} to {end} has effective size {effective_size}, " + f"exceeding maximum size of {self.max_size}" + ) + except ValueError as e: + raise ValidationError(f"Invalid values for {label_type} - {str(e)}") from e + + def _contains_letter(self, label): + """Check if a label contains at least one alphabetic character.""" + return any(char.isalpha() for char in label) + + def _calculate_effective_size(self, range_data: RangeData): + """Calculate the effective size of the range based on label type and configuration.""" + if range_data.label_type in [choices.CustomAxisLabelsChoices.LETTERS, choices.CustomAxisLabelsChoices.NUMALPHA]: + return self._calculate_letter_range_size(range_data.start, range_data.end) + return self._calculate_numeric_range_size(range_data.start_num, range_data.end_num, range_data.step) + + def _calculate_letter_range_size(self, start, end): + """Calculate the size of letter-based ranges.""" + _, start_letters = utils.extract_prefix_and_letter(start) + _, end_letters = utils.extract_prefix_and_letter(end) + + # Check if this is a letters-only range + if self.current_range and self.current_range.get("label_type") == choices.CustomAxisLabelsChoices.LETTERS: + if not start.isalpha() or not end.isalpha(): + raise ValidationError(f"Invalid values for letters: '{start}, {end}'") + + if self.current_range and self.current_range.get("increment_letter"): + # For increment_letter=True, use full grid_letter_to_number conversion + start_pos = utils.grid_letter_to_number(start_letters) + end_pos = utils.grid_letter_to_number(end_letters) + else: + # For increment_letter=False, only look at first character + start_pos = utils.grid_letter_to_number(start_letters[0]) + end_pos = utils.grid_letter_to_number(end_letters[0]) + + step = self.get_step_from_range() + range_size = end_pos - start_pos + 1 + + if step and step < 0: + return range_size if start_pos >= end_pos else 0 + return range_size if start_pos <= end_pos else 0 + + def _calculate_numeric_range_size(self, start_num, end_num, step): + """Calculate the size of numeric ranges.""" + range_data = self.RangeData( + start=str(start_num), + end=str(end_num), + start_num=start_num, + end_num=end_num, + step=step, + label_type="", + ) + + if range_data.step and range_data.step < 0: + if range_data.start_num < range_data.end_num: + raise ValidationError( + f"With negative step {range_data.step}, start value must be greater than end value" + ) + return len(range(range_data.start_num, range_data.end_num - 1, range_data.step)) + + if range_data.start_num > range_data.end_num: + raise ValidationError(f"With positive step {range_data.step}, start value must be less than end value") + return len(range(range_data.start_num, range_data.end_num + 1, abs(range_data.step) if range_data.step else 1)) + + def validate_increment_letter(self, label_range, label_type): + """Validate increment_letter if present for letter type.""" + if label_type == choices.CustomAxisLabelsChoices.LETTERS: + increment_letter = label_range.get("increment_letter") + if increment_letter is not None and not isinstance(increment_letter, bool): + raise forms.ValidationError("increment_letter at must be a boolean value.") + + def check_range_overlap(self, range1, range2): + """Check if two ranges overlap.""" + # Only check overlap for ranges of the same label type + if range1["label_type"] != range2["label_type"]: + return False + + label_type = range1["label_type"] + converter = LabelConverterFactory.get_converter(label_type) + + def alphanumeric_overlap(range1, range2): + """Check overlap for alphanumeric ranges.""" + # Extract prefix and numbers using the utility function + prefix1, num1 = utils.extract_prefix_and_number(range1["start"]) + _, num1_end = utils.extract_prefix_and_number(range1["end"]) + prefix2, num2 = utils.extract_prefix_and_number(range2["start"]) + _, num2_end = utils.extract_prefix_and_number(range2["end"]) + + # Different prefixes can't overlap + if prefix1 != prefix2: + return False + + # Convert to integers for comparison + num1_start = int(num1) + num1_end = int(num1_end) + num2_start = int(num2) + num2_end = int(num2_end) + + # Check numeric overlap + return not (num1_end < num2_start or num2_end < num1_start) + + def numalpha_overlap(range1, range2): + """Check overlap for numalpha ranges.""" + # Extract prefix (numbers) and letters + prefix1, letter1_start = utils.extract_prefix_and_letter(range1["start"]) + _, letter1_end = utils.extract_prefix_and_letter(range1["end"]) + prefix2, letter2_start = utils.extract_prefix_and_letter(range2["start"]) + _, letter2_end = utils.extract_prefix_and_letter(range2["end"]) + + # Different numeric prefixes can't overlap + if prefix1 != prefix2: + return False + + # For numalpha ranges, we need to consider the direction (step) + step1 = range1.get("step", 1) + step2 = range2.get("step", 1) + + # Convert letters to numeric values using existing utility function + start1 = utils.grid_letter_to_number(letter1_start) + end1 = utils.grid_letter_to_number(letter1_end) + start2 = utils.grid_letter_to_number(letter2_start) + end2 = utils.grid_letter_to_number(letter2_end) + + # Adjust ranges based on step direction + if step1 < 0: + start1, end1 = end1, start1 + if step2 < 0: + start2, end2 = end2, start2 + + # Check for overlap + return not (end1 < start2 or end2 < start1) + + if label_type == choices.CustomAxisLabelsChoices.ALPHANUMERIC: + return alphanumeric_overlap(range1, range2) + + if label_type == choices.CustomAxisLabelsChoices.NUMALPHA: + return numalpha_overlap(range1, range2) + + if label_type == choices.CustomAxisLabelsChoices.NUMBERS: + converter.set_number_only_mode(True) + + def create_range_data(range_info): + """Helper to create a RangeData object.""" + # Validate step value first + step = range_info.get("step", 1) + if step == 0: + raise ValidationError("Step value must be a non-zero integer.") + + return self.RangeData( + start=range_info["start"], + end=range_info["end"], + start_num=converter.to_numeric(range_info["start"]), + end_num=converter.to_numeric(range_info["end"]), + step=step, + label_type=label_type, + ) + + try: + range1_data = create_range_data(range1) + range2_data = create_range_data(range2) + + def generate_labels(range_data): + """Generate label set for a range.""" + return { + converter.from_numeric(i) + for i in range(range_data.start_num, range_data.end_num + 1, range_data.step) + } + + labels1 = generate_labels(range1_data) + labels2 = generate_labels(range2_data) + + # Check for any common labels + return bool(labels1.intersection(labels2)) + except ValueError as e: + raise ValidationError(f"Invalid values for {label_type} - {str(e)}") from e + + def validate_multiple_ranges(self, ranges): + """Validate that multiple ranges don't overlap.""" + if not ranges or len(ranges) <= 1: + return + + # Check each pair of ranges for overlap + for i, range1 in enumerate(ranges): + for range2 in ranges[i + 1 :]: + if self.check_range_overlap(range1, range2): + raise ValidationError("Ranges overlap") + + +class ValidateNotZero(BaseValidator): + """Ensure that the field's value is not zero.""" + + message = "Must be a positive or negative Integer not equal to zero." + code = "zero_not_allowed" + + def __call__(self, value): + """Ensure that the field's value is not zero.""" + if value == 0: + raise ValidationError( + self.message, + code=self.code, + ) diff --git a/nautobot_floor_plan/forms.py b/nautobot_floor_plan/forms.py index 89dc0e6..df8e5a1 100644 --- a/nautobot_floor_plan/forms.py +++ b/nautobot_floor_plan/forms.py @@ -19,47 +19,99 @@ from nautobot.dcim.models import Location, Rack, RackGroup from nautobot_floor_plan import choices, models, utils +from nautobot_floor_plan.custom_validators import RangeValidator +from nautobot_floor_plan.label_converters import LabelToPositionConverter, PositionToLabelConverter class FloorPlanForm(NautobotModelForm): - """FloorPlan creation/edit form.""" + """FloorPlan creation/edit form with support for custom axis label ranges.""" location = DynamicModelChoiceField(queryset=Location.objects.all()) + # X Axis Fields x_origin_seed = forms.CharField( label="X Axis Seed", help_text="The first value to begin X Axis at.", required=True, ) - y_origin_seed = forms.CharField( - label="Y Axis Seed", - help_text="The first value to begin Y Axis at.", - required=True, - ) x_axis_step = forms.IntegerField( label="X Axis Step", help_text="A positive or negative integer, excluding zero", required=True, ) + x_custom_ranges = forms.JSONField( + label="Custom Ranges for X Axis", + required=False, + help_text=( + "Enter custom label ranges in JSON format.
" + "Distance between start and end cannot exceed the size of the floor plan.
" + "Examples:
" + '[{"start": "02A", "end": "02Z", "step": 1, "increment_letter": true, "label_type": "numalpha"},
' + '[{"start": "A", "end": "Z", "step": 1, "increment_letter": true, "label_type": "letters"},
' + '{"start": "A01", "end": "A15", "step": 1, "label_type": "alphanumeric"},
' + '{"start": "01", "end": "15", "step": 1, "label_type": "numbers"},
' + '{"start": "I", "end": "X", "step": 1, "label_type": "roman"},
' + '{"start": "α", "end": "ω", "step": 1, "label_type": "greek"},
' + '{"start": "1", "end": "15", "step": 1, "label_type": "hex"},
' + '{"start": "1", "end": "15", "step": 1, "label_type": "binary"}]' + ), + ) + + # Y Axis Fields + y_origin_seed = forms.CharField( + label="Y Axis Seed", + help_text="The first value to begin Y Axis at.", + required=True, + ) y_axis_step = forms.IntegerField( label="Y Axis Step", help_text="A positive or negative integer, excluding zero", required=True, ) + y_custom_ranges = forms.JSONField( + label="Custom Ranges for Y Axis", + required=False, + help_text=( + "Enter custom label ranges in JSON format.
" + "Distance between start and end cannot exceed the size of the floor plan.
" + "Examples:
" + '[{"start": "02A", "end": "02Z", "step": 1, "increment_letter": true, "label_type": "numalpha"},
' + '[{"start": "A", "end": "Z", "step": 1, "increment_letter": true, "label_type": "letters"},
' + '{"start": "A01", "end": "A15", "step": 1, "label_type": "alphanumeric"},
' + '{"start": "01", "end": "15", "step": 1, "label_type": "numbers"},
' + '{"start": "I", "end": "X", "step": 1, "label_type": "roman"},
' + '{"start": "α", "end": "ω", "step": 1, "label_type": "greek"},
' + '{"start": "1", "end": "15", "step": 1, "label_type": "hex"},
' + '{"start": "1", "end": "15", "step": 1, "label_type": "binary"}]' + ), + ) + is_tile_movable = forms.BooleanField( + required=False, + label="Movable Tiles", + help_text="If true tiles can be edited and moved once placed on the Floorplan.", + ) - field_order = [ - "location", - "x_size", - "y_size", - "tile_width", - "tile_depth", - "x_axis_labels", - "x_origin_seed", - "x_axis_step", - "y_axis_labels", - "y_origin_seed", - "y_axis_step", - ] + fieldsets = ( + ("Floor Plan", ("location", "x_size", "y_size", "tile_width", "tile_depth", "is_tile_movable")), + ( + "X Axis Settings", + { + "tabs": ( + ("Default Labels", ("x_axis_labels", "x_origin_seed", "x_axis_step")), + ("Custom Labels", ("x_custom_ranges",)), + ), + }, + ), + ( + "Y Axis Settings", + { + "tabs": ( + ("Default Labels", ("y_axis_labels", "y_origin_seed", "y_axis_step")), + ("Custom Labels", ("y_custom_ranges",)), + ), + }, + ), + ) class Meta: """Meta attributes.""" @@ -68,9 +120,10 @@ class Meta: fields = "__all__" def __init__(self, *args, **kwargs): - """Overwrite the constructor to set initial values for select widget.""" + """Overwrite the constructor to set initial values and handle custom ranges.""" super().__init__(*args, **kwargs) + # Set initial values for select widget if not self.instance.created: self.initial["x_axis_labels"] = get_app_settings_or_config("nautobot_floor_plan", "default_x_axis_labels") self.initial["y_axis_labels"] = get_app_settings_or_config("nautobot_floor_plan", "default_y_axis_labels") @@ -87,34 +140,160 @@ def __init__(self, *args, **kwargs): if self.y_letters and str(self.initial["y_origin_seed"]).isdigit(): self.initial["y_origin_seed"] = utils.grid_number_to_letter(self.instance.y_origin_seed) + # Load existing custom ranges + if self.instance.pk: + x_ranges = list( + self.instance.custom_labels.filter(axis="X") + .values("start_label", "end_label", "step", "increment_letter", "label_type", "order") + .order_by("order") + ) + y_ranges = list( + self.instance.custom_labels.filter(axis="Y") + .values("start_label", "end_label", "step", "increment_letter", "label_type", "order") + .order_by("order") + ) + + # Set the properties based on whether custom ranges exist + self.has_x_custom_labels = bool(x_ranges) + self.has_y_custom_labels = bool(y_ranges) + + if x_ranges: + self.initial["x_custom_ranges"] = [ + { + "start": r["start_label"], + "end": r["end_label"], + "step": r["step"], + "increment_letter": r["increment_letter"], + "label_type": r["label_type"], + } + for r in x_ranges + ] + if y_ranges: + self.initial["y_custom_ranges"] = [ + { + "start": r["start_label"], + "end": r["end_label"], + "step": r["step"], + "increment_letter": r["increment_letter"], + "label_type": r["label_type"], + } + for r in y_ranges + ] + def _clean_origin_seed(self, field_name, axis): - """Common clean method for origin_seed fields.""" + """Clean method for origin seed fields.""" value = self.cleaned_data.get(field_name) if not value: - return 1 - - self.x_letters = self.cleaned_data.get("x_axis_labels") == choices.AxisLabelsChoices.LETTERS - self.y_letters = self.cleaned_data.get("y_axis_labels") == choices.AxisLabelsChoices.LETTERS - - if self.x_letters and field_name == "x_origin_seed" or self.y_letters and field_name == "y_origin_seed": - if not str(value).isupper(): - self.add_error(field_name, f"{axis} origin start should use capital letters.") - return 0 + return value + + # Determine if using letters based on axis labels + using_letters = ( + self.cleaned_data.get("x_axis_labels") == choices.AxisLabelsChoices.LETTERS + if axis == "X" + else self.cleaned_data.get("y_axis_labels") == choices.AxisLabelsChoices.LETTERS + ) + + # Validate format based on axis label type + if using_letters: + if not value.isalpha(): + raise forms.ValidationError(f"{axis} origin seed should be letters when using letter labels.") + if not value.isupper(): + raise forms.ValidationError(f"{axis} origin seed should be uppercase letters.") + # Convert letter to corresponding number return utils.grid_letter_to_number(value) - - if not str(value).replace("-", "").isnumeric(): - self.add_error(field_name, f"{axis} origin start should use numbers.") - return 0 - return int(value) + try: + return int(value) + except ValueError as e: + raise forms.ValidationError(f"{axis} origin seed should be a number when using numeric labels.") from e def clean_x_origin_seed(self): - """Validate input and convert y_origin to an integer.""" + """Validate the X origin seed.""" return self._clean_origin_seed("x_origin_seed", "X") def clean_y_origin_seed(self): - """Validate input and convert y_origin to an integer.""" + """Validate the Y origin seed.""" return self._clean_origin_seed("y_origin_seed", "Y") + def save(self, commit=True): + """Save the FloorPlan instance along with custom ranges.""" + instance = super().save(commit=False) + x_ranges = self.cleaned_data.get("x_custom_ranges", []) + y_ranges = self.cleaned_data.get("y_custom_ranges", []) + + if commit: + instance.save() + self.save_m2m() + + # Clear existing custom ranges + models.FloorPlanCustomAxisLabel.objects.filter(floor_plan=instance).delete() + + # Save X axis custom ranges + if x_ranges: + self.create_custom_axis_labels(x_ranges, instance, axis="X") + # Save Y axis custom ranges + if y_ranges: + self.create_custom_axis_labels(y_ranges, instance, axis="Y") + + return instance + + def create_custom_axis_labels(self, ranges, instance, axis): + """Helper function to create custom axis labels.""" + labels = [] + for idx, custom_range in enumerate(ranges): + labels.append( + models.FloorPlanCustomAxisLabel( + floor_plan=instance, + axis=axis, + start_label=custom_range["start"], + end_label=custom_range["end"], + step=custom_range.get("step", 1), + label_type=custom_range["label_type"], + increment_letter=custom_range.get("increment_letter", True), + order=idx, # Assign order based on index + ) + ) + models.FloorPlanCustomAxisLabel.objects.bulk_create(labels) + + def _validate_custom_ranges(self, field_name): + """Validate custom label ranges.""" + custom_ranges = self.cleaned_data.get(field_name, []) + if not custom_ranges: + return [] + + is_x_axis = field_name == "x_custom_ranges" + max_size = self.cleaned_data.get("x_size" if is_x_axis else "y_size") + validator = RangeValidator(max_size) + + # First validate each individual range + for label_range in custom_ranges: + validator.validate_required_keys(label_range) + + start = label_range["start"] + end = label_range["end"] + label_type = label_range["label_type"] + + validator.validate_label_type(label_type) + if label_type == choices.CustomAxisLabelsChoices.NUMBERS and label_range.get("increment_letter"): + validator.validate_increment_letter_for_numbers(label_range.get("increment_letter")) + if label_type in [choices.CustomAxisLabelsChoices.HEX, choices.CustomAxisLabelsChoices.BINARY]: + validator.validate_numeric_range(start, end, current_range=label_range) + else: + validator.validate_custom_range(start, end, label_type, current_range=label_range) + validator.validate_increment_letter(label_range, label_type) + + # Then validate that ranges don't overlap + validator.validate_multiple_ranges(custom_ranges) + + return custom_ranges + + def clean_x_custom_ranges(self): + """Validate the X axis custom ranges.""" + return self._validate_custom_ranges("x_custom_ranges") + + def clean_y_custom_ranges(self): + """Validate the Y axis custom ranges.""" + return self._validate_custom_ranges("y_custom_ranges") + class FloorPlanBulkEditForm(TagsBulkEditFormMixin, NautobotBulkEditForm): # pylint: disable=too-many-ancestors """FloorPlan bulk edit form.""" @@ -184,8 +363,53 @@ class Meta: fields = "__all__" exclude = ["allocation_type", "on_group_tile"] # pylint: disable=modelform-uses-exclude + def _convert_label_to_position(self, value, axis, fp_obj): + """Wrapper for the LabelToPositionConverter.""" + try: + converter = LabelToPositionConverter(value, axis, fp_obj) + absolute_position, _ = converter.convert() + return absolute_position, None # Return None for the error when successful + except ValueError as e: + return None, forms.ValidationError(str(e)) + + def _clean_custom_origin(self, field_name, axis): + """Clean method for custom label origins.""" + fp_obj = self.fields["floor_plan"].queryset.get(id=self.data.get("floor_plan")) + value = self.cleaned_data.get(field_name) + + try: + position, error = self._convert_label_to_position(value, axis, fp_obj) + if error: + raise error + + # Validate against floor plan size + max_size = fp_obj.x_size if axis == "X" else fp_obj.y_size + if position > max_size: + raise forms.ValidationError( + f"Position {value} (absolute: {position}) exceeds floor plan {axis} size of {max_size}" + ) + + return position + + except ValueError as e: + raise forms.ValidationError(f"Invalid {axis}-axis value: {str(e)}") + + def clean_x_origin(self): + """Clean method for x_origin field.""" + fp_obj = self.fields["floor_plan"].queryset.get(id=self.data.get("floor_plan")) + if fp_obj.custom_labels.filter(axis="X").exists(): + return self._clean_custom_origin("x_origin", "X") + return self._clean_origin("x_origin", "X") + + def clean_y_origin(self): + """Clean method for y_origin field.""" + fp_obj = self.fields["floor_plan"].queryset.get(id=self.data.get("floor_plan")) + if fp_obj.custom_labels.filter(axis="Y").exists(): + return self._clean_custom_origin("y_origin", "Y") + return self._clean_origin("y_origin", "Y") + def __init__(self, *args, **kwargs): - """Overwrite the constructor to define grid numbering style.""" + """Initialize the form and handle custom label conversions.""" super().__init__(*args, **kwargs) self.x_letters = False self.y_letters = False @@ -195,26 +419,33 @@ def __init__(self, *args, **kwargs): self.x_letters = fp_obj.x_axis_labels == choices.AxisLabelsChoices.LETTERS self.y_letters = fp_obj.y_axis_labels == choices.AxisLabelsChoices.LETTERS - if self.instance.x_origin or self.instance.y_origin: - self.initial["x_origin"] = utils.axis_init_label_conversion( - fp_obj.x_origin_seed, - utils.grid_number_to_letter(self.instance.x_origin) if self.x_letters else self.initial.get("x_origin"), - fp_obj.x_axis_step, - self.x_letters, - ) - self.initial["y_origin"] = utils.axis_init_label_conversion( - fp_obj.y_origin_seed, - utils.grid_number_to_letter(self.instance.y_origin) if self.y_letters else self.initial.get("y_origin"), - fp_obj.y_axis_step, - self.y_letters, - ) - elif self.initial.get("x_origin") and self.initial.get("y_origin"): - self.initial["x_origin"] = utils.axis_init_label_conversion( - fp_obj.x_origin_seed, self.initial.get("x_origin"), fp_obj.x_axis_step, self.x_letters - ) - self.initial["y_origin"] = utils.axis_init_label_conversion( - fp_obj.y_origin_seed, self.initial.get("y_origin"), fp_obj.y_axis_step, self.y_letters - ) + if self.instance.x_origin or self.instance.y_origin: + if fp_obj.custom_labels.filter(axis="X").exists(): + converter = PositionToLabelConverter(self.instance.x_origin, "X", fp_obj) + if label := converter.convert(): + self.initial["x_origin"] = label + else: + self.initial["x_origin"] = utils.axis_init_label_conversion( + fp_obj.x_origin_seed, + utils.grid_number_to_letter(self.instance.x_origin) + if self.x_letters + else self.initial.get("x_origin"), + fp_obj.x_axis_step, + self.x_letters, + ) + if fp_obj.custom_labels.filter(axis="Y").exists(): + converter = PositionToLabelConverter(self.instance.y_origin, "Y", fp_obj) + if label := converter.convert(): + self.initial["y_origin"] = label + else: + self.initial["y_origin"] = utils.axis_init_label_conversion( + fp_obj.y_origin_seed, + utils.grid_number_to_letter(self.instance.y_origin) + if self.y_letters + else self.initial.get("y_origin"), + fp_obj.y_axis_step, + self.y_letters, + ) def letter_validator(self, field, value, axis): """Validate that origin uses combination of letters.""" @@ -257,11 +488,3 @@ def _clean_origin(self, field_name, axis): # Convert and return the label position using the specified conversion function cleaned_value = utils.axis_clean_label_conversion(origin_seed, value, step, use_letters) return int(cleaned_value) if not using_letters else cleaned_value - - def clean_x_origin(self): - """Validate input and convert x_origin to an integer.""" - return self._clean_origin("x_origin", "X") - - def clean_y_origin(self): - """Validate input and convert y_origin to an integer.""" - return self._clean_origin("y_origin", "Y") diff --git a/nautobot_floor_plan/label_converters.py b/nautobot_floor_plan/label_converters.py new file mode 100644 index 0000000..28ac8b8 --- /dev/null +++ b/nautobot_floor_plan/label_converters.py @@ -0,0 +1,705 @@ +"""Label conversion utilities.""" + +import logging +import re +from typing import Dict, Type + +from nautobot_floor_plan.choices import CustomAxisLabelsChoices +from nautobot_floor_plan.utils import ( + extract_prefix_and_letter, + extract_prefix_and_number, + grid_letter_to_number, + grid_number_to_letter, +) + +logger = logging.getLogger(__name__) + + +class BaseLabelConverter: + """Base class for converting position to labels and back.""" + + def __init__(self, axis, fp_obj): + """Initializing base Label variables.""" + self.axis = axis + self.fp_obj = fp_obj + self.current_position = 1 + + def _get_custom_ranges(self): + """Retrieve and order custom ranges for the axis.""" + return self.fp_obj.custom_labels.filter(axis=self.axis).order_by("id") + + def _get_label_converter(self, label_type): + """Retrieve the proper converter for label type.""" + return LabelConverterFactory.get_converter(label_type) + + def _calculate_range_size(self, custom_range): + """Calculate the range size for the given custom range.""" + converter = self._get_label_converter(custom_range.label_type) + if custom_range.label_type == CustomAxisLabelsChoices.ALPHANUMERIC: + converter.set_increment_prefix(custom_range.increment_letter) + start_value = converter.to_numeric(custom_range.start_label) + end_value = converter.to_numeric(custom_range.end_label) + return abs(end_value - start_value) + 1 + + def _is_descending_range(self, start_value, end_value): + """Check if the range is descending.""" + return start_value > end_value + + def _check_label_in_range(self, label_value, start_value, end_value): + """Check if a label value falls within a numeric or letter range.""" + return min(start_value, end_value) <= label_value <= max(start_value, end_value) + + def _is_within_range(self, value, start, end): + """Check if a value falls within a numeric range.""" + min_value, max_value = min(start, end), max(start, end) + return min_value <= value <= max_value + + def _adjust_position(self, range_size): + """Increment the current position by the range size.""" + self.current_position += range_size + + def _calculate_relative_position(self, value, start_value, end_value): + """Calculate relative position based on ascending/descending range.""" + is_descending = self._is_descending_range(start_value, end_value) + if is_descending: + return start_value - value + 1 + return value - start_value + 1 + + def _is_letter_based_type(self, label_type): + """Check if the label type is letter-based.""" + return label_type in [CustomAxisLabelsChoices.NUMALPHA, CustomAxisLabelsChoices.LETTERS] + + def _convert_numeric_values(self, custom_range, value): + """Convert value and range bounds to numeric values.""" + converter = self._get_label_converter(custom_range.label_type) + converter.set_increment_prefix(custom_range.increment_letter) + + numeric_value = converter.to_numeric(value) + start_value = converter.to_numeric(custom_range.start_label) + end_value = converter.to_numeric(custom_range.end_label) + + return converter, numeric_value, start_value, end_value + + def _extract_prefix_and_letters(self, label, label_type): + """Extract prefix and letters based on label type.""" + if label_type == CustomAxisLabelsChoices.NUMALPHA: + return extract_prefix_and_letter(label) + return "", label + + def _calculate_position_from_values(self, numeric_value, start_value, end_value): + """Calculate position from numeric values, handling ascending/descending ranges.""" + relative_position = self._calculate_relative_position(numeric_value, start_value, end_value) + return self.current_position + relative_position - 1 + + +class PositionToLabelConverter(BaseLabelConverter): + """Class to modify the position to proper custom label in forms.""" + + def __init__(self, position, axis, fp_obj): + """Initialize Position to Label Converter variables.""" + super().__init__(axis, fp_obj) + self.position = position + + def convert(self): + """Main method to convert a position to its display label.""" + for custom_range in self._get_custom_ranges(): + range_size = self._calculate_range_size(custom_range) + + if self._position_in_range(range_size): + return self._calculate_label(custom_range) + + self._adjust_position(range_size) + + return None + + def _position_in_range(self, range_size): + """Check if the position falls within the current range.""" + return self.current_position <= self.position < self.current_position + range_size + + def _calculate_relative_numeric_value(self, start_value, end_value, relative_position): + """Calculate numeric value based on ascending/descending range.""" + is_descending = self._is_descending_range(start_value, end_value) + if is_descending: + numeric_value = start_value - (relative_position - 1) + return max(numeric_value, end_value) + + numeric_value = start_value + (relative_position - 1) + return min(numeric_value, end_value) + + def _calculate_label(self, custom_range): + """Generate the display label for the position.""" + relative_position = self.position - self.current_position + 1 + converter = self._get_label_converter(custom_range.label_type) + converter.set_increment_prefix(custom_range.increment_letter) + + start_value = converter.to_numeric(custom_range.start_label) + end_value = converter.to_numeric(custom_range.end_label) + + if not custom_range.increment_letter: + numeric_value = self._calculate_relative_numeric_value(start_value, end_value, relative_position) + else: + # Use existing incrementing logic for letter-based labels + is_descending = self._is_descending_range(start_value, end_value) + numeric_value = ( + start_value - (relative_position - 1) if is_descending else start_value + (relative_position - 1) + ) + + return converter.from_numeric(numeric_value) + + +class LabelToPositionConverter(BaseLabelConverter): + """Convert a label to its absolute position based on custom ranges.""" + + def __init__(self, label, axis, fp_obj): + """Initialize the label-to-position converter.""" + super().__init__(axis, fp_obj) + self.label = label + + def convert(self): + """Main method to convert a label to its absolute position.""" + for custom_range in self._get_custom_ranges(): + try: + converter = self._get_label_converter(custom_range.label_type) + converter.set_increment_prefix(custom_range.increment_letter) + + if self._label_in_range(custom_range): + absolute_position = self._calculate_position(custom_range, converter) + return absolute_position, self.label + + self._adjust_position(self._calculate_range_size(custom_range)) + + except ValueError as e: + logger.error("Error processing range: %s", e) + continue + + raise ValueError(f"Value {self.label} is not within any defined range") + + def _label_in_range(self, custom_range): + """Check if label is within the given range.""" + if custom_range.label_type in [CustomAxisLabelsChoices.ALPHANUMERIC, CustomAxisLabelsChoices.NUMBERS]: + return self._label_in_alphanumeric_range(custom_range) + if self._is_letter_based_type(custom_range.label_type): + return self._label_in_letter_range(custom_range) + return self._label_in_numeric_range(custom_range) + + def _calculate_position(self, custom_range, converter): + """Calculate absolute position for any label type.""" + if custom_range.label_type in [CustomAxisLabelsChoices.ALPHANUMERIC, CustomAxisLabelsChoices.NUMBERS]: + return self._calculate_alphanumeric_position(custom_range) + + numeric_value = converter.to_numeric(self.label) + start_value = converter.to_numeric(custom_range.start_label) + end_value = converter.to_numeric(custom_range.end_label) + + return self._calculate_position_from_values(numeric_value, start_value, end_value) + + def _label_in_letter_range(self, custom_range): + """Check if the label is within a letter-based range.""" + if custom_range.label_type == CustomAxisLabelsChoices.LETTERS: + _, value, start_value, end_value = self._convert_numeric_values(custom_range, self.label) + return self._check_label_in_range(value, start_value, end_value) + + # Original logic for NUMALPHA + start_prefix, start_letters = self._extract_prefix_and_letters( + custom_range.start_label, custom_range.label_type + ) + value_prefix, value_letters = self._extract_prefix_and_letters(self.label, custom_range.label_type) + + return value_prefix == start_prefix and len(value_letters) == len(start_letters) + + def _label_in_numeric_range(self, custom_range): + """Check if the label is within a numeric range.""" + try: + _, numeric_value, start_value, end_value = self._convert_numeric_values(custom_range, self.label) + return self._check_label_in_range(numeric_value, start_value, end_value) + except ValueError as e: + logger.error("Error converting numeric values: %s", e) + return False + + def _extract_alphanumeric_parts(self, label, custom_range): + """Extract and convert alphanumeric parts from label and range.""" + # Extract parts + parts = { + "label": extract_prefix_and_number(str(label)), + "start": extract_prefix_and_number(custom_range.start_label), + "end": extract_prefix_and_number(custom_range.end_label), + } + + # Convert numeric parts + try: + numbers = { + "label": int(parts["label"][1]), + "start": int(parts["start"][1]), + "end": int(parts["end"][1]), + } + prefixes = { + "label": parts["label"][0], + "start": parts["start"][0], + "end": parts["end"][0], + } + return prefixes, numbers + except ValueError: + return None, None + + def _check_letter_based_range(self, prefixes, numbers, start_num): + """Check if label is within a letter-based range.""" + if numbers["label"] != start_num: + return False + + converter = self._get_label_converter(CustomAxisLabelsChoices.LETTERS) + values = { + "label": converter.to_numeric(prefixes["label"]), + "start": converter.to_numeric(prefixes["start"]), + "end": converter.to_numeric(prefixes["end"]), + } + return self._check_label_in_range(values["label"], values["start"], values["end"]) + + def _label_in_alphanumeric_range(self, custom_range): + """Check if the label is within an alphanumeric range.""" + try: + prefixes, numbers = self._extract_alphanumeric_parts(self.label, custom_range) + if not prefixes or not numbers: + return False + + if custom_range.increment_letter: + return self._check_letter_based_range(prefixes, numbers, numbers["start"]) + + # Incrementing numbers: check letter equality and number range + if prefixes["label"] != prefixes["start"]: + return False + + return self._check_label_in_range(numbers["label"], numbers["start"], numbers["end"]) + + except (ValueError, AttributeError) as e: + logger.error("Error in _label_in_alphanumeric_range: %s", e) + return False + + def _calculate_letter_based_position(self, prefixes): + """Calculate position for letter-based labels.""" + converter = self._get_label_converter(CustomAxisLabelsChoices.LETTERS) + values = { + "label": converter.to_numeric(prefixes["label"]), + "start": converter.to_numeric(prefixes["start"]), + "end": converter.to_numeric(prefixes["end"]), + } + return self._calculate_position_from_values(values["label"], values["start"], values["end"]) + + def _calculate_alphanumeric_position(self, custom_range): + """Calculate position for alphanumeric labels.""" + try: + prefixes, numbers = self._extract_alphanumeric_parts(self.label, custom_range) + if not prefixes or not numbers: + return None + + if custom_range.increment_letter: + return self._calculate_letter_based_position(prefixes) + + # Handle ascending/descending number ranges + return self._calculate_position_from_values(numbers["label"], numbers["start"], numbers["end"]) + + except (ValueError, AttributeError) as e: + logger.error("Error in _calculate_alphanumeric_position: %s", e) + return None + + +class LabelConverter: + """Base class for label conversion.""" + + def __init__(self): + """Initialize converter.""" + self._increment_prefix = False + self.current_label = None + + def to_numeric(self, label: str) -> int: + """Convert label to numeric value.""" + raise NotImplementedError + + def from_numeric(self, number: int) -> str: + """Convert numeric value to label.""" + raise NotImplementedError + + def set_increment_prefix(self, increment_prefix: bool) -> None: + """Set whether to increment the prefix instead of the number.""" + raise NotImplementedError + + +class NumalphaConverter(LabelConverter): + """Numalpha (e.g., 02A, 02AA) conversion.""" + + def __init__(self): + """Initialize the converter.""" + super().__init__() + self._prefix = "" + self._current_label = None + self._start_label = None + self._end_label = None + + def _handle_letter_only_conversion(self, letters): + """Handle conversion for letter-only labels.""" + return grid_letter_to_number(letters) + + def _handle_mixed_conversion(self, letters): + """Handle conversion for mixed alphanumeric labels.""" + if not letters: + return 1 + if self._increment_prefix: + return grid_letter_to_number(letters) + return ord(letters[0]) - ord("A") + 1 + + def to_numeric(self, label: str) -> int: + """Convert alphanumeric label to numeric value.""" + self._current_label = label + if not self._start_label: + self._start_label = label + self._end_label = label + + prefix, letters = extract_prefix_and_letter(label) + + if not letters: + raise ValueError(f"Invalid numalpha label: {label}") + + # Store the prefix for use in from_numeric + self._prefix = prefix + + # For letters type, always use grid_letter_to_number + if self._current_label.isalpha(): + numeric_value = self._handle_letter_only_conversion(letters) + else: + numeric_value = self._handle_mixed_conversion(letters) + + return numeric_value + + def _generate_letter_pattern(self, number: int, pattern_letters: str) -> str: + """Generate the letter pattern based on the numeric value.""" + if not self._increment_prefix: + # Use the pattern from start label + letter_length = len(pattern_letters) + if letter_length: + letter = grid_number_to_letter(number) + return letter * letter_length + return grid_number_to_letter(number) + + def from_numeric(self, number: int, prefix: str = "") -> str: + """Convert numeric value to Numalpha label.""" + if number < 1: + raise ValueError("Number must be positive") + + # Use provided prefix if given, otherwise use stored prefix + use_prefix = prefix if prefix else self._prefix + + # Extract pattern letters from the start label + _, pattern_letters = extract_prefix_and_letter(self._start_label) + + result_letters = self._generate_letter_pattern(number, pattern_letters) + result = f"{use_prefix}{result_letters}" + return result + + def set_increment_prefix(self, increment_prefix: bool) -> None: + """Set whether to increment the prefix instead of the number.""" + self._increment_prefix = increment_prefix + + +class RomanConverter(LabelConverter): + """Roman numeral conversion.""" + + ROMAN_VALUES = [ + ("M", 1000), + ("CM", 900), + ("D", 500), + ("CD", 400), + ("C", 100), + ("XC", 90), + ("L", 50), + ("XL", 40), + ("X", 10), + ("IX", 9), + ("V", 5), + ("IV", 4), + ("I", 1), + ] + + def __init__(self): + """Initialize the converter.""" + super().__init__() + self._current_value = None + + def _convert_next_numeral(self, label: str, index: int) -> tuple[int, int]: + """Convert next Roman numeral and return its value and new index.""" + # Try two character combinations first + if index + 1 < len(label): + double_char = label[index : index + 2] + for roman, value in self.ROMAN_VALUES: + if double_char == roman: + return value, index + 2 + + # Try single character + single_char = label[index] + for roman, value in self.ROMAN_VALUES: + if single_char == roman: + return value, index + 1 + + raise ValueError(f"Invalid Roman numeral character at position {index} in: {label}") + + def to_numeric(self, label: str) -> int: + """Convert Roman numeral to integer.""" + if not label: + raise ValueError("Roman numeral cannot be empty") + + result = 0 + index = 0 + label = label.upper() + + while index < len(label): + value, index = self._convert_next_numeral(label, index) + result += value + + self._current_value = result + return result + + def from_numeric(self, number: int, prefix: str = "") -> str: + """Convert integer to Roman numeral.""" + if not 0 < number < 4000: + raise ValueError("Number must be between 1 and 3999") + + result = [] + remaining = number + + for roman, value in self.ROMAN_VALUES: + while remaining >= value: + result.append(roman) + remaining -= value + + roman_numeral = "".join(result) + return f"{prefix}{roman_numeral}" if prefix else roman_numeral + + def set_increment_prefix(self, increment_prefix: bool) -> None: + """Set whether to increment the prefix instead of the number. + + For Roman numerals, this setting has no effect as Roman numerals + are always incremented as a whole number. + """ + + +class GreekConverter(LabelConverter): + """Greek letter conversion.""" + + GREEK_LETTERS = "αβγδεζηθικλμνξοπρστυφχψω" + GREEK_LETTER_MAP = {letter: i + 1 for i, letter in enumerate(GREEK_LETTERS)} + + def __init__(self): + """Initialize the converter.""" + super().__init__() + self._current_value = None + self._prefix = "" + + def to_numeric(self, label: str) -> int: + """Convert Greek letter to numeric value.""" + if not label: + raise ValueError("Greek letter cannot be empty") + + # Handle prefixed numbers (like α1, β2) + prefix = "" + greek_part = label.lower() + + # Split numeric suffix if exists + for i, char in enumerate(label): + if char.isdigit(): + prefix = label[i:] + greek_part = label[:i].lower() + break + + try: + base_value = self.GREEK_LETTER_MAP.get(greek_part) + if base_value is None: + raise ValueError(f"Invalid Greek letter: {greek_part}") + + self._current_value = base_value + if prefix: + self._prefix = prefix + return int(f"{base_value}{prefix}") + return base_value + + except ValueError as e: + raise ValueError(f"Invalid Greek letter: {label}") from e + + def from_numeric(self, number: int, prefix: str = "") -> str: + """Convert numeric value to Greek letter.""" + if number < 1 or number > len(self.GREEK_LETTERS): + raise ValueError(f"Number must be between 1 and {len(self.GREEK_LETTERS)}") + + greek_letter = self.GREEK_LETTERS[number - 1] + if prefix: + return f"{prefix}{greek_letter}" + if self._prefix: + return f"{greek_letter}{self._prefix}" + return greek_letter + + def set_increment_prefix(self, increment_prefix: bool) -> None: + """Set whether to increment the prefix instead of the number. + + For Greek letters, this setting has no effect as Greek letters + are always incremented as a whole. + """ + + +class BinaryConverter(LabelConverter): + """Binary number conversion.""" + + def __init__(self, min_digits: int = 4): + """Initialize the converter with a minimum digit width.""" + super().__init__() + self.min_digits = min_digits + + def to_numeric(self, label: str) -> int: + """Convert a label to a numeric value.""" + try: + # If the label starts with '0b', interpret as binary + if isinstance(label, str) and label.startswith("0b"): + return int(label, 2) + # Otherwise treat as decimal + return int(label) + except ValueError as e: + raise ValueError(f"Label must be an integer or binary value, received: {label}") from e + + def from_numeric(self, number: int, prefix: str = "") -> str: + """Convert a numeric value to a binary string with a '0b' prefix.""" + if number < 0: + raise ValueError("Binary conversion requires positive numbers") + + binary = bin(number)[2:].zfill(self.min_digits) # Ensure minimum digit width + return f"{prefix}0b{binary}" if prefix else f"0b{binary}" + + def set_increment_prefix(self, increment_prefix: bool) -> None: + """Set whether to increment the prefix instead of the number. + + For binary numbers, this setting has no effect as binary numbers + are always incremented as a whole number. + """ + + +class HexConverter(LabelConverter): + """Hexadecimal number conversion.""" + + def __init__(self, min_digits: int = 4): + """Initialize the converter with a minimum digit width.""" + super().__init__() + self.min_digits = min_digits + + def to_numeric(self, label: str) -> int: + """Convert a label to a numeric value.""" + try: + # If the label starts with '0x', interpret as hex + if isinstance(label, str) and label.startswith("0x"): + return int(label, 16) + # Otherwise treat as decimal + return int(label) + except ValueError as e: + raise ValueError(f"Label must be an integer or hex value, received: {label}") from e + + def from_numeric(self, number: int, prefix: str = "") -> str: + """Convert numeric value to hex string.""" + if number < 0: + raise ValueError("Hex conversion requires positive numbers") + + hex_val = hex(number)[2:].upper().zfill(self.min_digits) + return f"{prefix}0x{hex_val}" if prefix else f"0x{hex_val}" + + def set_increment_prefix(self, increment_prefix: bool) -> None: + """Set whether to increment the prefix instead of the number. + + For hex numbers, this setting has no effect as hex numbers + are always incremented as a whole number. + """ + + +class AlphanumericConverter(LabelConverter): + """Alphanumeric (e.g., A01, A1) and pure number (e.g., 01, 1) conversion.""" + + def __init__(self): + """Initialize the converter.""" + super().__init__() + self._prefix = "" + self._use_leading_zeros = None + self._number = None + self._is_number_only = False + self._increment_prefix = False + + def to_numeric(self, label: str) -> int: + """Convert alphanumeric or numeric label to numeric value.""" + if self._is_number_only: + if not label.isdigit(): + raise ValueError(f"Invalid number format: {label}") + self._use_leading_zeros = len(label) > 1 and label[0] == "0" + self._number = label + return int(label) + + prefix, number = extract_prefix_and_number(label) + if not number.isdigit(): + raise ValueError(f"Invalid alphanumeric label: {label}. Must have a numeric part.") + + self._prefix = prefix + self._use_leading_zeros = len(number) > 1 and number[0] == "0" + self._number = number + + if self._increment_prefix: + return sum((ord(c) - ord("A") + 1) * (26**i) for i, c in enumerate(reversed(prefix))) + return int(number) + + def from_numeric(self, number: int, prefix: str = "") -> str: + """Convert numeric value to alphanumeric or numeric label.""" + if number < 1: + raise ValueError("Number must be positive") + + if self._is_number_only: + return f"{number:02d}" if self._use_leading_zeros else str(number) + + if self._increment_prefix: + prefix = self._generate_prefix(number) + return f"{prefix}{self._number if self._use_leading_zeros else int(self._number)}" + + return f"{self._prefix}{number:02d}" if self._use_leading_zeros else f"{self._prefix}{number}" + + def _generate_prefix(self, number: int) -> str: + """Generate alphabetic prefix for a given numeric value.""" + if number < 1: + raise ValueError("Number must be positive") + return grid_number_to_letter(number) + + def set_increment_prefix(self, increment_prefix: bool) -> None: + """Set whether to increment the prefix instead of the number.""" + self._increment_prefix = increment_prefix + + def set_number_only_mode(self, is_number_only: bool) -> None: + """Set whether the converter should handle pure numbers.""" + self._is_number_only = is_number_only + + def set_prefix(self, prefix: str) -> None: + """Set the prefix for the label converter.""" + if not re.match(r"^[A-Z]+$", prefix): + raise ValueError("Prefix must be a non-empty string of uppercase letters") + self._prefix = prefix + + +class LabelConverterFactory: + """Factory for creating label converters.""" + + _converters: Dict[str, Type[LabelConverter]] = { + CustomAxisLabelsChoices.ROMAN: RomanConverter, + CustomAxisLabelsChoices.GREEK: GreekConverter, + CustomAxisLabelsChoices.BINARY: BinaryConverter, + CustomAxisLabelsChoices.HEX: HexConverter, + CustomAxisLabelsChoices.NUMALPHA: NumalphaConverter, + CustomAxisLabelsChoices.LETTERS: NumalphaConverter, + CustomAxisLabelsChoices.ALPHANUMERIC: AlphanumericConverter, + CustomAxisLabelsChoices.NUMBERS: AlphanumericConverter, + } + + @classmethod + def get_converter(cls, label_type: str) -> LabelConverter: + """Get the appropriate converter for the label type.""" + converter_class = cls._converters.get(label_type) + if not converter_class: + raise ValueError( + f"Unsupported label type: {label_type}. " f"Supported types are: {', '.join(cls._converters.keys())}" + ) + return converter_class() diff --git a/nautobot_floor_plan/label_generator.py b/nautobot_floor_plan/label_generator.py new file mode 100644 index 0000000..87bae48 --- /dev/null +++ b/nautobot_floor_plan/label_generator.py @@ -0,0 +1,237 @@ +"""Label generation functionality for floor plans.""" + +from nautobot_floor_plan.choices import ( + AxisLabelsChoices, + CustomAxisLabelsChoices, +) +from nautobot_floor_plan.label_converters import LabelConverterFactory +from nautobot_floor_plan.utils import ( + extract_prefix_and_letter, + extract_prefix_and_number, + grid_letter_to_number, + grid_number_to_letter, +) + + +class FloorPlanLabelGenerator: + """Handles generation of labels for floor plan axes.""" + + def __init__(self, floor_plan): + """Store instance of floor plan.""" + self.floor_plan = floor_plan + + def generate_labels(self, axis, count): + """Generate labels for the specified axis.""" + # Get custom ranges in the order they were created + custom_ranges = self.floor_plan.custom_labels.filter(axis=axis).order_by("id") + + if not custom_ranges.exists(): + return self._generate_default_labels(axis, count) + + labels = [] + for custom_range in custom_ranges: + range_labels = self._generate_labels_for_range( + custom_range, + custom_range.increment_letter, + ) + labels.extend(range_labels) + + if len(labels) >= count: + return labels[:count] + + # If custom ranges don't provide enough labels, fall back to default labeling + if len(labels) < count: + remaining_count = count - len(labels) + if axis == "X": + start = self.floor_plan.x_origin_seed + (len(labels) * self.floor_plan.x_axis_step) + step = self.floor_plan.x_axis_step + is_letters = self.floor_plan.x_axis_labels == AxisLabelsChoices.LETTERS + else: + start = self.floor_plan.y_origin_seed + (len(labels) * self.floor_plan.y_axis_step) + step = self.floor_plan.y_axis_step + is_letters = self.floor_plan.y_axis_labels == AxisLabelsChoices.LETTERS + + default_labels = self._generate_default_range(start, step, remaining_count, is_letters) + labels.extend(default_labels) + + return labels + + def _generate_default_labels(self, axis, count): + """Generate default labels for an axis.""" + if axis == "X": + start = self.floor_plan.x_origin_seed + step = self.floor_plan.x_axis_step + is_letters = self.floor_plan.x_axis_labels == AxisLabelsChoices.LETTERS + else: + start = self.floor_plan.y_origin_seed + step = self.floor_plan.y_axis_step + is_letters = self.floor_plan.y_axis_labels == AxisLabelsChoices.LETTERS + + return self._generate_default_range(start, step, count, is_letters) + + def _generate_default_range(self, start, step, count, is_letters): + """Generate a sequence of default labels.""" + labels = [] + current = start + + for _ in range(count): + if is_letters: + # Wrap around to 18278 (ZZZ) when going in reverse + if current < 1: + current = 18278 + current + elif current > 18278: + current = current - 18278 + labels.append(grid_number_to_letter(current)) + else: + labels.append(str(current)) + current += step + + return labels + + def _generate_labels_for_range(self, custom_range, increment_letter=True): + """Helper to generate labels for a given range.""" + labels = [] + start = str(custom_range.start_label) + end = str(custom_range.end_label) + step = custom_range.step + label_type = custom_range.label_type + + try: + converter = LabelConverterFactory.get_converter(label_type) + + if label_type == CustomAxisLabelsChoices.NUMBERS: + converter.set_number_only_mode(True) + elif label_type == CustomAxisLabelsChoices.ALPHANUMERIC: + converter.set_increment_prefix(increment_letter) + + if label_type in [CustomAxisLabelsChoices.NUMALPHA, CustomAxisLabelsChoices.LETTERS]: + if label_type == CustomAxisLabelsChoices.LETTERS: + labels = self._generate_letter_labels(start, end, increment_letter, step) + else: + labels = self._generate_numalpha_labels(start, end, increment_letter, step) + else: + labels = self._generate_numeric_labels(converter, start, end, step) + + except ValueError as e: + raise ValueError(f"Error in label generation: {e}") from e + + return labels + + def _generate_numalpha_labels(self, start, end, increment_letter, step=1): + """Generate labels for NUMALPHA type.""" + labels = [] + start_prefix, start_letters = extract_prefix_and_letter(start) + end_prefix, end_letters = extract_prefix_and_letter(end) + + if start_prefix != end_prefix: + raise ValueError(f"Prefix mismatch: {start_prefix} != {end_prefix}") + + current_prefix, current_letters = start_prefix, start_letters + + while True: + labels.append(f"{current_prefix}{current_letters}") + + if labels[-1] == end: + break + + if step > 0: + current_letters = self._increment_letters(current_letters, increment_letter, len(current_letters)) + if self._should_stop_label_generation(current_letters, end_letters): + break + else: + current_letters = self._decrement_letters(current_letters, increment_letter, end_letters) + if not current_letters: + break + + return labels + + def _generate_letter_labels(self, start, end, increment_letter, step=1): + """Generate labels for LETTERS type.""" + labels = [] + start_prefix, start_letters = extract_prefix_and_number(start) + _, end_letters = extract_prefix_and_number(end) + + while True: + labels.append(f"{start_prefix}{start_letters}") + + if start_letters == end_letters: + break + + # Increment or decrement letters based on step direction + if step > 0: + start_letters = self._increment_letters(start_letters, increment_letter, len(start_letters)) + else: + start_letters = self._decrement_letters(start_letters, increment_letter, end_letters) + + return labels + + def _increment_letters(self, current_letters, increment_letter, length): + """Increment the letters based on the desired strategy.""" + if increment_letter: + # Use grid_number_to_letter and grid_letter_to_number for the carry-over logic + current_number = grid_letter_to_number(current_letters) + next_number = current_number + 1 + return grid_number_to_letter(next_number) + # Increment all letters + next_letter = chr(ord(current_letters[0]) + 1) + return next_letter * length + + def _decrement_letters(self, letters, increment_letter, end_letters): + """Decrement letters in a label.""" + if not letters: + return None + + # Convert letters to list for manipulation + letter_list = list(letters) + + if increment_letter: + # Only decrement the last letter + last_idx = len(letter_list) - 1 + if letter_list[last_idx] > "A": + letter_list[last_idx] = chr(ord(letter_list[last_idx]) - 1) + else: + return None + else: + # Decrement all letters together + for i, letter in enumerate(letter_list): + if letter > "A": + letter_list[i] = chr(ord(letter) - 1) + else: + return None + + result = "".join(letter_list) + + # Check if we've gone past the end + if end_letters and ( + (increment_letter and result < end_letters) or (not increment_letter and result < end_letters) + ): + return None + + return result + + def _generate_numeric_labels(self, converter, start, end, step): + """Generate labels for numeric or other types.""" + labels = [] + # Set the format based on the start label + if hasattr(converter, "set_format"): + converter.set_format(start) + + current = converter.to_numeric(start) + end_val = converter.to_numeric(end) + + while True: + labels.append(converter.from_numeric(current)) + if current == end_val: + break + current += step + if (step > 0 and current > end_val) or (step < 0 and current < end_val): + break + return labels + + def _should_stop_label_generation(self, current_letters, end_letters): + """Determine if the label generation should stop.""" + if len(current_letters) > len(end_letters): + return True + if len(current_letters) == len(end_letters) and current_letters > end_letters: + return True + return False diff --git a/nautobot_floor_plan/migrations/0009_add_custom_label_support.py b/nautobot_floor_plan/migrations/0009_add_custom_label_support.py new file mode 100644 index 0000000..61d77c4 --- /dev/null +++ b/nautobot_floor_plan/migrations/0009_add_custom_label_support.py @@ -0,0 +1,69 @@ +# Generated by Django 4.2.17 on 2024-12-19 20:44 + +import django.db.models.deletion +from django.db import migrations, models + +import nautobot_floor_plan.custom_validators + + +class Migration(migrations.Migration): + dependencies = [ + ("nautobot_floor_plan", "0008_add_axis_step"), + ] + + operations = [ + migrations.AlterField( + model_name="floorplan", + name="x_axis_labels", + field=models.CharField(default="numbers", max_length=12), + ), + migrations.AlterField( + model_name="floorplan", + name="x_axis_step", + field=models.IntegerField(default=1, validators=[nautobot_floor_plan.custom_validators.ValidateNotZero(0)]), + ), + migrations.AlterField( + model_name="floorplan", + name="y_axis_labels", + field=models.CharField(default="numbers", max_length=12), + ), + migrations.AlterField( + model_name="floorplan", + name="y_axis_step", + field=models.IntegerField(default=1, validators=[nautobot_floor_plan.custom_validators.ValidateNotZero(0)]), + ), + migrations.AddField( + model_name="floorplan", + name="is_tile_movable", + field=models.BooleanField(default=True), + ), + migrations.CreateModel( + name="FloorPlanCustomAxisLabel", + fields=[ + ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ("axis", models.CharField(max_length=1)), + ("label_type", models.CharField(default="letters", max_length=20)), + ("start_label", models.CharField(max_length=10)), + ("end_label", models.CharField(max_length=10)), + ( + "step", + models.IntegerField( + default=1, validators=[nautobot_floor_plan.custom_validators.ValidateNotZero(0)] + ), + ), + ("increment_letter", models.BooleanField(default=True)), + ("order", models.PositiveIntegerField(default=0)), + ( + "floor_plan", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="custom_labels", + to="nautobot_floor_plan.floorplan", + ), + ), + ], + options={ + "ordering": ["floor_plan", "axis", "order"], + }, + ), + ] diff --git a/nautobot_floor_plan/models.py b/nautobot_floor_plan/models.py index 22e29f7..9a3f3e1 100644 --- a/nautobot_floor_plan/models.py +++ b/nautobot_floor_plan/models.py @@ -7,9 +7,15 @@ from django.db import models, transaction from nautobot.apps.models import PrimaryModel, StatusField, extras_features -from nautobot_floor_plan.choices import AllocationTypeChoices, AxisLabelsChoices, RackOrientationChoices +from nautobot_floor_plan.choices import ( + AllocationTypeChoices, + AxisLabelsChoices, + CustomAxisLabelsChoices, + RackOrientationChoices, +) +from nautobot_floor_plan.custom_validators import ValidateNotZero +from nautobot_floor_plan.label_generator import FloorPlanLabelGenerator from nautobot_floor_plan.svg import FloorPlanSVG -from nautobot_floor_plan.utils import validate_not_zero logger = logging.getLogger(__name__) @@ -51,13 +57,13 @@ class FloorPlan(PrimaryModel): help_text='Relative depth of each "tile" in the floor plan (cm, inches, etc.)', ) x_axis_labels = models.CharField( - max_length=10, + max_length=12, choices=AxisLabelsChoices, default=AxisLabelsChoices.NUMBERS, help_text="Grid labels of X axis (horizontal).", ) y_axis_labels = models.CharField( - max_length=10, + max_length=12, choices=AxisLabelsChoices, default=AxisLabelsChoices.NUMBERS, help_text="Grid labels of Y axis (vertical).", @@ -69,15 +75,16 @@ class FloorPlan(PrimaryModel): validators=[MinValueValidator(0)], default=1, help_text="User defined starting value for grid labeling" ) x_axis_step = models.IntegerField( - validators=[validate_not_zero], + validators=[ValidateNotZero(0)], default=1, help_text="Positive or negative integer that will be used to step labeling.", ) y_axis_step = models.IntegerField( - validators=[validate_not_zero], + validators=[ValidateNotZero(0)], default=1, help_text="Positive or negative integer that will be used to step labeling.", ) + is_tile_movable = models.BooleanField(default=True, help_text="Determines if Tiles can be moved once placed") class Meta: """Metaclass attributes.""" @@ -146,6 +153,128 @@ def validate_no_resizing_with_tiles(self): f"FloorPlan must maintain original size: ({original.x_size}, {original.y_size}), " ) + def generate_labels(self, axis, count): + """ + Generate labels for the specified axis. + + This method creates an instance of FloorPlanLabelGenerator and uses it to generate labels + based on the specified axis and count. It will first check for any custom labels defined + for the axis and use them if available; otherwise, it will generate default labels. + """ + generator = FloorPlanLabelGenerator(self) + return generator.generate_labels(axis, count) + + def reset_seed_for_custom_labels(self): + """Reset seed and step values when custom labels are added.""" + # Only proceed if there are custom labels + if not self.custom_labels.exists(): + return + + changed = False + x_has_custom = self.custom_labels.filter(axis="X").exists() + y_has_custom = self.custom_labels.filter(axis="Y").exists() + + if x_has_custom and (self.x_origin_seed != 1 or self.x_axis_step != 1): + self.x_origin_seed = 1 + self.x_axis_step = 1 + changed = True + + if y_has_custom and (self.y_origin_seed != 1 or self.y_axis_step != 1): + self.y_origin_seed = 1 + self.y_axis_step = 1 + changed = True + + if changed: + # Get the current values before updating + initial_instance = self.__class__.objects.get(pk=self.pk) + x_initial = initial_instance.x_origin_seed + y_initial = initial_instance.y_origin_seed + + # Update tile positions only for axes that have custom labels + tiles = self.update_tile_origins( + x_initial=x_initial if x_has_custom else self.x_origin_seed, + x_updated=1 if x_has_custom else self.x_origin_seed, + y_initial=y_initial if y_has_custom else self.y_origin_seed, + y_updated=1 if y_has_custom else self.y_origin_seed, + ) + + # Save without triggering another reset + super().save() + + # Update tiles + for tile in tiles: + tile.validated_save() + + +@extras_features( + "custom_fields", + "custom_validators", + "graphql", + "relationships", + "webhooks", +) +class FloorPlanCustomAxisLabel(models.Model): + """Model allowing for the creation of custom grid labels.""" + + floor_plan = models.ForeignKey( + to="FloorPlan", + on_delete=models.CASCADE, + related_name="custom_labels", + ) + axis = models.CharField( + max_length=1, + choices=(("X", "X Axis"), ("Y", "Y Axis")), + ) + label_type = models.CharField( + max_length=20, + choices=CustomAxisLabelsChoices, + default=AxisLabelsChoices.LETTERS, + help_text="Type of labeling system to use", + ) + start_label = models.CharField( + max_length=10, + help_text="Starting label for this custom label range.", + ) + end_label = models.CharField( + max_length=10, + help_text="Ending label for this custom label range.", + ) + step = models.IntegerField( + validators=[ValidateNotZero(0)], + default=1, + help_text="Positive or negative step for this label range.", + ) + increment_letter = models.BooleanField( + default=True, + help_text="For letter-based labels, determines increment pattern.", + ) + + order = models.PositiveIntegerField( + default=0, + help_text="Order of the custom label range.", + ) + + class Meta: + """Meta attributes.""" + + ordering = ["floor_plan", "axis", "order"] + + def save(self, *args, **kwargs): + """Override save to reset seed values when custom labels are added.""" + super().save(*args, **kwargs) + # Reset the corresponding seed value to 1 + self.floor_plan.reset_seed_for_custom_labels() + + def clean(self): + """Add validation to ensure seed values are reset.""" + super().clean() + # If this is a new custom label (no pk) or the axis has changed + if not self.pk or (self.pk and self._state.fields_cache.get("axis") != self.axis): + if self.axis == "X" and self.floor_plan.x_origin_seed != 1: + self.floor_plan.x_origin_seed = 1 + elif self.axis == "Y" and self.floor_plan.y_origin_seed != 1: + self.floor_plan.y_origin_seed = 1 + @extras_features( "custom_fields", @@ -157,8 +286,6 @@ def validate_no_resizing_with_tiles(self): "statuses", "webhooks", ) -# TBD: Remove after releasing pylint-nautobot v0.3.0 -# pylint: disable-next=nb-string-field-blank-null class FloorPlanTile(PrimaryModel): """Model representing a single rectangular "tile" within a FloorPlan, its status, and any Rack that it contains.""" diff --git a/nautobot_floor_plan/svg.py b/nautobot_floor_plan/svg.py index 3718eea..9f4fc6e 100644 --- a/nautobot_floor_plan/svg.py +++ b/nautobot_floor_plan/svg.py @@ -9,8 +9,7 @@ from django.utils.http import urlencode from nautobot.core.templatetags.helpers import fgcolor -from nautobot_floor_plan.choices import AllocationTypeChoices, AxisLabelsChoices, RackOrientationChoices -from nautobot_floor_plan.utils import grid_number_to_letter +from nautobot_floor_plan.choices import AllocationTypeChoices, RackOrientationChoices logger = logging.getLogger(__name__) @@ -28,7 +27,6 @@ class FloorPlanSVG: RACK_TILE_INSET = 3 RACK_FRONT_DEPTH = 15 RACK_BUTTON_OFFSET = 5 - RACK_BORDER_OFFSET = 8 RACK_ORIENTATION_OFFSET = 14 RACKGROUP_TEXT_OFFSET = 12 Y_LABEL_TEXT_OFFSET = 34 @@ -88,39 +86,28 @@ def _setup_drawing(self, width, depth): return drawing - def _label_text(self, label_text_out, floor_plan, label_text_in, is_letters): - """Change label based off defined increment or decrement step.""" - if label_text_out == floor_plan["seed"]: - return label_text_out - label_text_out = label_text_in + floor_plan["step"] - - # Handle negative values and wrapping - if is_letters and label_text_out <= 0: - label_text_out = 18278 if label_text_in == 0 else 18278 + (label_text_in + floor_plan["step"]) - - return label_text_out - - def _draw_tile_link(self, drawing, axis, x_letters, y_letters): + def _draw_tile_link(self, drawing, axis): + """Draw a '+' link for adding a new tile at the specified grid position.""" query_params = urlencode( { "floor_plan": self.floor_plan.pk, - "x_origin": grid_number_to_letter(axis["x"]) if x_letters else axis["x"], - "y_origin": grid_number_to_letter(axis["y"]) if y_letters else axis["y"], + "x_origin": axis["x"], + "y_origin": axis["y"], "return_url": self.return_url, } ) add_url = f"{self.add_url}?{query_params}" add_link = drawing.add(drawing.a(href=add_url, target="_top")) + # Use grid indices for positioning + x_pos = axis["x_idx"] + y_pos = axis["y_idx"] + add_link.add( drawing.rect( ( - (axis["x"] - self.floor_plan.x_origin_seed + 0.5) * self.GRID_SIZE_X - + self.GRID_OFFSET - - (self.TEXT_LINE_HEIGHT / 2), - (axis["y"] - self.floor_plan.y_origin_seed + 0.5) * self.GRID_SIZE_Y - + self.GRID_OFFSET - - (self.TEXT_LINE_HEIGHT / 2), + (x_pos + 0.5) * self.GRID_SIZE_X + self.GRID_OFFSET - (self.TEXT_LINE_HEIGHT / 2), + (y_pos + 0.5) * self.GRID_SIZE_Y + self.GRID_OFFSET - (self.TEXT_LINE_HEIGHT / 2), ), (self.TEXT_LINE_HEIGHT, self.TEXT_LINE_HEIGHT), class_="add-tile-button", @@ -131,8 +118,8 @@ def _draw_tile_link(self, drawing, axis, x_letters, y_letters): drawing.text( "+", insert=( - (axis["x"] - self.floor_plan.x_origin_seed + 0.5) * self.GRID_SIZE_X + self.GRID_OFFSET, - (axis["y"] - self.floor_plan.y_origin_seed + 0.5) * self.GRID_SIZE_Y + self.GRID_OFFSET, + (x_pos + 0.5) * self.GRID_SIZE_X + self.GRID_OFFSET, + (y_pos + 0.5) * self.GRID_SIZE_Y + self.GRID_OFFSET, ), class_="button-text", ) @@ -140,25 +127,13 @@ def _draw_tile_link(self, drawing, axis, x_letters, y_letters): def _draw_grid(self, drawing): """Render the grid underlying all tiles.""" - # Set inital values for x and y axis label location - x_letters = self.floor_plan.x_axis_labels == AxisLabelsChoices.LETTERS - y_letters = self.floor_plan.y_axis_labels == AxisLabelsChoices.LETTERS - x_floor_plan = {"seed": self.floor_plan.x_origin_seed, "step": self.floor_plan.x_axis_step} - y_floor_plan = {"seed": self.floor_plan.y_origin_seed, "step": self.floor_plan.y_axis_step} - # Initial states for labels - x_label_text = 0 - y_label_text = 0 - max_y_length = max( - len(str(self._label_text(y, y_floor_plan, 0, y_letters))) - for y in range(self.floor_plan.y_origin_seed, self.floor_plan.y_size + self.floor_plan.y_origin_seed) - ) - y_label_text_offset = ( - self.Y_LABEL_TEXT_OFFSET - (6 - len(str(self.floor_plan.y_origin_seed))) if max_y_length > 1 else 0 - ) - if max_y_length >= 4: - y_label_text_offset = self.Y_LABEL_TEXT_OFFSET + 4 + self._draw_grid_lines(drawing) + x_labels, y_labels = self._generate_axis_labels() + self._draw_axis_labels(drawing, x_labels, y_labels) + self._draw_tile_links(drawing, x_labels, y_labels) - # Draw grid lines + def _draw_grid_lines(self, drawing): + """Draw the vertical and horizontal grid lines.""" for x in range(0, self.floor_plan.x_size + 1): drawing.add( drawing.line( @@ -182,107 +157,71 @@ def _draw_grid(self, drawing): ) ) - # Draw axis labels and links - for x in range(self.floor_plan.x_origin_seed, self.floor_plan.x_size + self.floor_plan.x_origin_seed): - x_label_text = self._label_text(x, x_floor_plan, x_label_text, x_letters) - label = grid_number_to_letter(x_label_text) if x_letters else str(x_label_text) + def _generate_axis_labels(self): + """Generate labels for the X and Y axes.""" + x_labels = self.floor_plan.generate_labels("X", self.floor_plan.x_size) + y_labels = self.floor_plan.generate_labels("Y", self.floor_plan.y_size) + return x_labels, y_labels + + def _draw_axis_labels(self, drawing, x_labels, y_labels): + """Draw labels on the X and Y axes.""" + for idx, label in enumerate(x_labels): drawing.add( drawing.text( label, insert=( - (x - self.floor_plan.x_origin_seed + 0.5) * self.GRID_SIZE_X + self.GRID_OFFSET, + (idx + 0.5) * self.GRID_SIZE_X + self.GRID_OFFSET, self.BORDER_WIDTH + self.TEXT_LINE_HEIGHT / 2, ), class_="grid-label", ) ) + max_y_length = max(len(str(label)) for label in y_labels) + y_label_text_offset = self._calculate_y_label_offset(max_y_length) - for y in range(self.floor_plan.y_origin_seed, self.floor_plan.y_size + self.floor_plan.y_origin_seed): - y_label_text = self._label_text(y, y_floor_plan, y_label_text, y_letters) - label = grid_number_to_letter(y_label_text) if y_letters else str(y_label_text) + for idx, label in enumerate(y_labels): drawing.add( drawing.text( label, insert=( self.BORDER_WIDTH + self.TEXT_LINE_HEIGHT / 2 - y_label_text_offset, - (y - self.floor_plan.y_origin_seed + 0.5) * self.GRID_SIZE_Y + self.GRID_OFFSET, + (idx + 0.5) * self.GRID_SIZE_Y + self.GRID_OFFSET, ), class_="grid-label", ) ) - for y in range(self.floor_plan.y_origin_seed, self.floor_plan.y_size + self.floor_plan.y_origin_seed): - for x in range(self.floor_plan.x_origin_seed, self.floor_plan.x_size + self.floor_plan.x_origin_seed): - axis = {"x": x, "y": y} - self._draw_tile_link(drawing, axis, x_letters, y_letters) - - def _draw_edit_delete_button(self, drawing, tile, button_offset, grid_offset): - if tile.allocation_type == AllocationTypeChoices.RACK: - tile_inset = 0 - else: - tile_inset = self.TILE_INSET - - origin = ( - (tile.x_origin - self.floor_plan.x_origin_seed) * self.GRID_SIZE_X + self.GRID_OFFSET + tile_inset, - (tile.y_origin - self.floor_plan.y_origin_seed) * self.GRID_SIZE_Y + self.GRID_OFFSET + tile_inset, - ) - - # Add a button for editing the tile definition - edit_url = reverse("plugins:nautobot_floor_plan:floorplantile_edit", kwargs={"pk": tile.pk}) - query_params = urlencode({"return_url": self.return_url}) - edit_url = f"{self.base_url}{edit_url}?{query_params}" - link = drawing.add(drawing.a(href=edit_url, target="_top")) - link.add( - drawing.rect( - (origin[0] + self.TILE_INSET + button_offset, origin[1] + self.TILE_INSET + grid_offset), - (self.TEXT_LINE_HEIGHT, self.TEXT_LINE_HEIGHT), - class_="edit-tile-button", - rx=self.CORNER_RADIUS, - ) - ) - link.add( - drawing.text( - "✎", - insert=( - origin[0] + self.TILE_INSET + self.TEXT_LINE_HEIGHT / 2 + button_offset, - origin[1] + self.TILE_INSET + self.TEXT_LINE_HEIGHT / 2 + grid_offset, - ), - class_="button-text", - ) - ) - - # Add a button for deleting the tile definition - delete_url = reverse("plugins:nautobot_floor_plan:floorplantile_delete", kwargs={"pk": tile.pk}) - query_params = urlencode({"return_url": self.return_url}) - delete_url = f"{self.base_url}{delete_url}?{query_params}" - link = drawing.add(drawing.a(href=delete_url, target="_top")) - link.add( - drawing.rect( - ( - origin[0] - + tile.x_size * self.GRID_SIZE_X - - self.RACK_TILE_INSET * self.TILE_INSET - - self.TEXT_LINE_HEIGHT, - origin[1] + self.TILE_INSET + grid_offset, - ), - (self.TEXT_LINE_HEIGHT, self.TEXT_LINE_HEIGHT), - class_="delete-tile-button", - rx=self.CORNER_RADIUS, - ) - ) - link.add( - drawing.text( - "X", - insert=( - origin[0] - + tile.x_size * self.GRID_SIZE_X - - self.RACK_TILE_INSET * self.TILE_INSET - - self.TEXT_LINE_HEIGHT / 2, - origin[1] + self.TILE_INSET + self.TEXT_LINE_HEIGHT / 2 + grid_offset, - ), - class_="button-text", - ) + def _calculate_y_label_offset(self, max_y_length): + """Calculate the offset for Y-axis labels.""" + # Add prefix length for binary (0b) and hex (0x) labels when calculating max length + adjusted_length = max_y_length + if str(self.floor_plan.y_origin_seed).startswith(("0b", "0x")): + adjusted_length = max_y_length + 2 + # Base offset calculation + base_offset = ( + self.Y_LABEL_TEXT_OFFSET - (6 - len(str(self.floor_plan.y_origin_seed))) if adjusted_length > 1 else 0 ) + # Calculate additional offset + # Add 1 to additional offset for 02WW scenario + if adjusted_length == 4: + adjusted_length = adjusted_length + 1 + if adjusted_length > 4: + # Add 10 for each increment of 2 beyond 4 and handle odd cases + additional_offset = ((adjusted_length - 4 + 1) // 2) * 10 + else: + additional_offset = 0 + return base_offset + additional_offset + + def _draw_tile_links(self, drawing, x_labels, y_labels): + """Draw links for each tile in the grid.""" + for y_idx, y_label in enumerate(y_labels): + for x_idx, x_label in enumerate(x_labels): + try: + axis = {"x": x_label, "y": y_label, "x_idx": x_idx, "y_idx": y_idx} + self._draw_tile_link(drawing, axis) + except (ValueError, TypeError) as e: + logger.warning("Error processing grid position (%s, %s): %s", x_idx, y_idx, e) + continue def _draw_tile(self, drawing, tile): """Render an individual FloorPlanTile to the drawing.""" @@ -319,26 +258,6 @@ def _draw_underlay_tiles(self, drawing, tile): class_="tile-status", ) ) - # TODO Make this a user option in the future or remove. It would draw a smaller status box around a Rack tile. - # Tile contains a rack and is being placed on a group of rackgroup tiles or status tiles - # else: - # origin = ( - # (tile.x_origin - 1) * self.GRID_SIZE_X + self.GRID_OFFSET + self.BORDER_WIDTH, - # (tile.y_origin - 1) * self.GRID_SIZE_Y + self.GRID_OFFSET + self.BORDER_WIDTH, - # ) - # # Draw the tile outline and fill it with its status color - # drawing.add( - # drawing.rect( - # origin, - # ( - # self.GRID_SIZE_X * tile.x_size - self.BORDER_WIDTH * self.TILE_INSET, - # self.GRID_SIZE_Y * tile.y_size - self.RACK_BORDER_OFFSET * self.TILE_INSET, - # ), - # rx=self.CORNER_RADIUS, - # style=f"fill: #{tile.status.color}", - # class_="tile-status", - # ) - # ) def _draw_defined_rackgroup_tile(self, drawing, tile): """Add Status and RackGroup text to a rendered tile.""" @@ -549,6 +468,74 @@ def _draw_rack_tile(self, drawing, tile): if tile.on_group_tile is True: self._draw_edit_delete_button(drawing, tile, self.RACK_BUTTON_OFFSET, self.GRID_OFFSET) + def _draw_edit_delete_button(self, drawing, tile, button_offset, grid_offset): + if tile.allocation_type == AllocationTypeChoices.RACK: + tile_inset = 0 + else: + tile_inset = self.TILE_INSET + + origin = ( + (tile.x_origin - self.floor_plan.x_origin_seed) * self.GRID_SIZE_X + self.GRID_OFFSET + tile_inset, + (tile.y_origin - self.floor_plan.y_origin_seed) * self.GRID_SIZE_Y + self.GRID_OFFSET + tile_inset, + ) + + # Add a button for editing the tile definition + edit_url = reverse("plugins:nautobot_floor_plan:floorplantile_edit", kwargs={"pk": tile.pk}) + query_params = urlencode({"return_url": self.return_url}) + edit_url = f"{self.base_url}{edit_url}?{query_params}" + link = drawing.add(drawing.a(href=edit_url, target="_top")) + link.add( + drawing.rect( + (origin[0] + self.TILE_INSET + button_offset, origin[1] + self.TILE_INSET + grid_offset), + (self.TEXT_LINE_HEIGHT, self.TEXT_LINE_HEIGHT), + class_="edit-tile-button", + rx=self.CORNER_RADIUS, + ) + ) + link.add( + drawing.text( + "✎", + insert=( + origin[0] + self.TILE_INSET + self.TEXT_LINE_HEIGHT / 2 + button_offset, + origin[1] + self.TILE_INSET + self.TEXT_LINE_HEIGHT / 2 + grid_offset, + ), + class_="button-text", + ) + ) + + # Add a button for deleting the tile definition + delete_url = reverse("plugins:nautobot_floor_plan:floorplantile_delete", kwargs={"pk": tile.pk}) + query_params = urlencode({"return_url": self.return_url}) + delete_url = f"{self.base_url}{delete_url}?{query_params}" + link = drawing.add(drawing.a(href=delete_url, target="_top")) + link.add( + drawing.rect( + ( + origin[0] + + tile.x_size * self.GRID_SIZE_X + - self.RACK_TILE_INSET * self.TILE_INSET + - self.TEXT_LINE_HEIGHT, + origin[1] + self.TILE_INSET + grid_offset, + ), + (self.TEXT_LINE_HEIGHT, self.TEXT_LINE_HEIGHT), + class_="delete-tile-button", + rx=self.CORNER_RADIUS, + ) + ) + link.add( + drawing.text( + "X", + insert=( + origin[0] + + tile.x_size * self.GRID_SIZE_X + - self.RACK_TILE_INSET * self.TILE_INSET + - self.TEXT_LINE_HEIGHT / 2, + origin[1] + self.TILE_INSET + self.TEXT_LINE_HEIGHT / 2 + grid_offset, + ), + class_="button-text", + ) + ) + def render(self): """Generate an SVG document representing a FloorPlan.""" logger.debug("Setting up drawing...") diff --git a/nautobot_floor_plan/tables.py b/nautobot_floor_plan/tables.py index bbe7312..ea08c8b 100644 --- a/nautobot_floor_plan/tables.py +++ b/nautobot_floor_plan/tables.py @@ -5,7 +5,11 @@ from nautobot.core.templatetags.helpers import hyperlinked_object from nautobot_floor_plan import models -from nautobot_floor_plan.templatetags.seed_helpers import grid_location_conversion, seed_conversion +from nautobot_floor_plan.templatetags.seed_helpers import ( + grid_location_conversion, + render_axis_step, + render_origin_seed, +) class FloorPlanTable(BaseTable): @@ -15,8 +19,8 @@ class FloorPlanTable(BaseTable): pk = ToggleColumn() floor_plan = tables.Column(empty_values=[], orderable=False) location = tables.Column(linkify=True) - x_origin_seed = tables.Column() - y_origin_seed = tables.Column() + x_origin_seed = tables.Column(accessor="x_origin_seed", verbose_name="X Origin Seed") + y_origin_seed = tables.Column(accessor="y_origin_seed", verbose_name="Y Origin Seed") tags = TagColumn() actions = ButtonsColumn(models.FloorPlan) @@ -25,12 +29,20 @@ def render_floor_plan(self, record): return hyperlinked_object(record) def render_x_origin_seed(self, record): - """Render x_origin in letters if requried.""" - return seed_conversion(record, "x") + """Render x_origin seed or converted custom start label if defined.""" + return render_origin_seed(record, "x") + + def render_x_axis_step(self, record): + """Render x_axis step or custom step if defined.""" + return render_axis_step(record, "x") def render_y_origin_seed(self, record): - """Render y_origin in letters if requried.""" - return seed_conversion(record, "y") + """Render y_origin seed or converted custom start label if defined.""" + return render_origin_seed(record, "y") + + def render_y_axis_step(self, record): + """Render y_axis step or custom step if defined.""" + return render_axis_step(record, "y") class Meta(BaseTable.Meta): """Meta attributes.""" diff --git a/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_create.html b/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_create.html new file mode 100644 index 0000000..d2d4c3a --- /dev/null +++ b/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_create.html @@ -0,0 +1,75 @@ +{% extends 'generic/object_create.html' %} +{% load static %} +{% load form_helpers %} +{% load seed_helpers %} + +{% block form %} +

+ +
+
X Axis Settings
+
+ +
+
+ +
+
Y Axis Settings
+
+ +
+
+ +{% include 'inc/extras_features_edit_form_fields.html' %} +{% endblock %} diff --git a/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_retrieve.html b/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_retrieve.html index e2c6846..3962a4a 100644 --- a/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_retrieve.html +++ b/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_retrieve.html @@ -36,27 +36,27 @@ X Axis Labels - {{ object.x_axis_labels }} + {{ object|render_axis_label:'x' }} X Axis Seed - {{ object|seed_conversion:'x' }} + {{ object|render_origin_seed:'x' }} X Axis Step - {{ object.x_axis_step }} + {{ object|render_axis_step:'x' }} Y Axis Labels - {{ object.y_axis_labels }} + {{ object|render_axis_label:'y' }} Y Axis Seed - {{ object|seed_conversion:'y' }} + {{ object|render_origin_seed:'y' }} Y Axis Step - {{ object.y_axis_step }} + {{ object|render_axis_step:'y' }} Tile(s) diff --git a/nautobot_floor_plan/templatetags/seed_helpers.py b/nautobot_floor_plan/templatetags/seed_helpers.py index d8d1606..1c069e7 100644 --- a/nautobot_floor_plan/templatetags/seed_helpers.py +++ b/nautobot_floor_plan/templatetags/seed_helpers.py @@ -2,7 +2,7 @@ from django import template -from nautobot_floor_plan import choices, utils +from nautobot_floor_plan import choices, label_converters, utils register = template.Library() @@ -36,3 +36,53 @@ def count_children_floor_plans(location): """Returns count of Children with FloorPlans for a given location.""" count = location.children.filter(floor_plan__isnull=False).count() return count + + +@register.filter() +def get_fieldset_field(form, field_name): + """Retrieve a field from the form using a dynamic field name.""" + try: + return form[field_name] + except KeyError: + return None + + +@register.filter +def render_origin_seed(obj, axis): + """Render custom seed info for the specified axis if it exists, otherwise display the default seed.""" + custom_label = obj.custom_labels.filter(axis=axis.upper()).first() + if custom_label: + try: + converter = label_converters.LabelConverterFactory.get_converter(custom_label.label_type) + # Convert and display the custom label start + numeric_value = converter.to_numeric(custom_label.start_label) + display_label = converter.from_numeric(numeric_value) + + # Preserve prefix for numalpha labels + if custom_label.label_type == choices.CustomAxisLabelsChoices.NUMALPHA: + prefix, _ = utils.extract_prefix_and_letter(custom_label.start_label) + _, letters = utils.extract_prefix_and_letter(display_label) + return f"{prefix}{letters}" + return display_label + except ValueError: + return custom_label.start_label + # Fall back to default seed + return seed_conversion(obj, axis.lower()) + + +@register.filter +def render_axis_label(obj, axis): + """Render custom label for the specified axis if it exists, otherwise display the default label.""" + custom_label = obj.custom_labels.filter(axis=axis.upper()).first() + if custom_label: + return custom_label.label_type + return getattr(obj, f"{axis.lower()}_axis_labels") + + +@register.filter +def render_axis_step(obj, axis): + """Render custom step for the specified axis if it exists, otherwise display the default step.""" + custom_label = obj.custom_labels.filter(axis=axis.upper()).first() + if custom_label: + return custom_label.step + return getattr(obj, f"{axis.lower()}_axis_step") diff --git a/nautobot_floor_plan/tests/test_converters.py b/nautobot_floor_plan/tests/test_converters.py new file mode 100644 index 0000000..2025cd2 --- /dev/null +++ b/nautobot_floor_plan/tests/test_converters.py @@ -0,0 +1,361 @@ +"""Test floorplan converters.""" + +from nautobot.core.testing import TestCase + +from nautobot_floor_plan import choices, forms, label_converters, utils +from nautobot_floor_plan.tests import fixtures + + +class TestLabelConverters(TestCase): + """Test custom label conversion utilities.""" + + def setUp(self): + """Create test data.""" + data = fixtures.create_prerequisites() + self.floors = data["floors"] + + def test_binary_converter(self): + """Test binary label conversion.""" + converter = label_converters.BinaryConverter() + test_cases = [ + ("0b0001", 1), + ("0b0010", 2), + ("0b1010", 10), + ] + for label, number in test_cases: + self.assertEqual(converter.to_numeric(label), number) + self.assertEqual(converter.from_numeric(number), label) + + def test_hex_converter(self): + """Test Hexadecimal label conversion.""" + converter = label_converters.HexConverter() + test_cases = [ + ("0x0001", 1), + ("0x000A", 10), + ("0x000F", 15), + ] + for label, number in test_cases: + self.assertEqual(converter.to_numeric(label), number) + self.assertEqual(converter.from_numeric(number), label) + + def test_numalpha_converter(self): + """Test numalpha label conversion.""" + converter = label_converters.NumalphaConverter() + test_cases = [ + ("07A", 1), + ("07B", 2), + ("07Z", 26), + ("08A", 1), + ] + for label, expected_number in test_cases: + # Test conversion to numeric + self.assertEqual(converter.to_numeric(label), expected_number) + + # Test conversion back to label (with prefix preservation) + prefix, _ = utils.extract_prefix_and_letter(label) + converted_label = converter.from_numeric(expected_number, prefix=prefix) + self.assertEqual(converted_label, label) + + # Test prefix extraction + extracted_prefix, letter = utils.extract_prefix_and_letter(label) + self.assertEqual(extracted_prefix + letter, label) + + def test_roman_converter(self): + """Test roman numeral conversion.""" + converter = label_converters.RomanConverter() + test_cases = [ + ("I", 1), + ("V", 5), + ("X", 10), + ("L", 50), + ] + for label, number in test_cases: + self.assertEqual(converter.to_numeric(label), number) + self.assertEqual(converter.from_numeric(number), label) + + def test_alphanumeric_converter(self): + """Test alphanumeric label conversion.""" + converter = label_converters.AlphanumericConverter() + + # Test with increment_letter=True (default, incrementing numbers) + converter.set_increment_prefix(False) + converter.to_numeric("A1") # Initialize format without leading zeros + self.assertEqual(converter.from_numeric(1), "A1") + self.assertEqual(converter.from_numeric(5), "A5") + self.assertEqual(converter.to_numeric("A1"), 1) + self.assertEqual(converter.to_numeric("A5"), 5) + + # Test with increment_letter=False (incrementing prefix) + converter.set_increment_prefix(True) + converter.to_numeric("A1") # Initialize format without leading zeros + self.assertEqual(converter.from_numeric(1), "A1") + self.assertEqual(converter.from_numeric(2), "B1") + self.assertEqual(converter.to_numeric("A1"), 1) + self.assertEqual(converter.to_numeric("B1"), 2) + + # Test with leading zeros + converter.set_increment_prefix(False) + converter.to_numeric("A01") # Initialize format with leading zeros + self.assertEqual(converter.from_numeric(1), "A01") + self.assertEqual(converter.from_numeric(5), "A05") + + # Test prefix incrementing with leading zeros + converter.set_increment_prefix(True) + converter.to_numeric("A01") # Initialize format with leading zeros + self.assertEqual(converter.from_numeric(1), "A01") + self.assertEqual(converter.from_numeric(2), "B01") + + # Test invalid input + with self.assertRaises(ValueError): + converter.to_numeric("ABC") # No number + + +class TestPositionAndLabelConverters(TestCase): + """Test position-to-label and label-to-position conversion.""" + + def setUp(self): + """Create test data.""" + data = fixtures.create_prerequisites() + self.floors = data["floors"] + + # Create and save a form instance + self.form = forms.FloorPlanForm( + data={ + "location": self.floors[1].pk, + "x_size": 10, + "y_size": 20, + "tile_depth": 1, + "tile_width": 2, + "x_origin_seed": 1, + "x_axis_step": 1, + "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "x_custom_ranges": "null", + "y_origin_seed": 1, + "y_axis_step": 1, + "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "y_custom_ranges": "null", + } + ) + if self.form.is_valid(): + self.floor_plan = self.form.save(commit=True) # Save the instance to the database + else: + self.fail(f"Form validation failed: {self.form.errors}") + + def test_numeric_ranges(self): + """Test numeric ranges with both ascending and descending steps.""" + numeric_ranges = [ + {"start": "01", "end": "05", "step": 1, "increment_letter": False, "label_type": "numbers"}, + {"start": "15", "end": "11", "step": -1, "increment_letter": False, "label_type": "numbers"}, + ] + self.form.create_custom_axis_labels(numeric_ranges, self.floor_plan, axis="X") + + # Test position to label conversion + test_cases = [ + {"position": 1, "expected": "01"}, + {"position": 3, "expected": "03"}, + {"position": 5, "expected": "05"}, + {"position": 6, "expected": "15"}, + {"position": 8, "expected": "13"}, + {"position": 10, "expected": "11"}, + ] + self._test_position_to_label_conversion(test_cases) + self._test_label_to_position_conversion(test_cases) + self._test_out_of_range_values() + + def test_alphanumeric_ranges(self): + """Test alphanumeric ranges with both ascending and descending steps.""" + alphanumeric_ranges = [ + {"start": "A01", "end": "A05", "step": 1, "increment_letter": False, "label_type": "alphanumeric"}, + {"start": "B05", "end": "B01", "step": -1, "increment_letter": False, "label_type": "alphanumeric"}, + ] + self.form.create_custom_axis_labels(alphanumeric_ranges, self.floor_plan, axis="X") + + test_cases = [ + {"position": 1, "expected": "A01"}, + {"position": 3, "expected": "A03"}, + {"position": 5, "expected": "A05"}, + {"position": 6, "expected": "B05"}, + {"position": 8, "expected": "B03"}, + {"position": 10, "expected": "B01"}, + ] + self._test_position_to_label_conversion(test_cases) + self._test_label_to_position_conversion(test_cases) + self._test_out_of_range_values() + + def test_alphanumeric_incrementing_prefix_ranges(self): + """Test alphanumeric ranges with both ascending and descending steps and incrementing prefix.""" + alphanumeric_ranges = [ + {"start": "A01", "end": "E01", "step": 1, "increment_letter": True, "label_type": "alphanumeric"}, + {"start": "F05", "end": "F01", "step": -1, "increment_letter": False, "label_type": "alphanumeric"}, + ] + self.form.create_custom_axis_labels(alphanumeric_ranges, self.floor_plan, axis="X") + + test_cases = [ + {"position": 1, "expected": "A01"}, + {"position": 3, "expected": "C01"}, + {"position": 5, "expected": "E01"}, + {"position": 6, "expected": "F05"}, + {"position": 8, "expected": "F03"}, + {"position": 10, "expected": "F01"}, + ] + self._test_position_to_label_conversion(test_cases) + self._test_label_to_position_conversion(test_cases) + self._test_out_of_range_values() + + def test_numalpha_ranges(self): + """Test numalpha ranges with both ascending and descending steps.""" + numalpha_ranges = [ + {"start": "02A", "end": "02E", "step": 1, "increment_letter": True, "label_type": "numalpha"}, + {"start": "03E", "end": "03A", "step": -1, "increment_letter": True, "label_type": "numalpha"}, + ] + self.form.create_custom_axis_labels(numalpha_ranges, self.floor_plan, axis="X") + + test_cases = [ + {"position": 1, "expected": "02A"}, + {"position": 3, "expected": "02C"}, + {"position": 5, "expected": "02E"}, + {"position": 6, "expected": "03E"}, + {"position": 8, "expected": "03C"}, + {"position": 10, "expected": "03A"}, + ] + self._test_position_to_label_conversion(test_cases) + self._test_label_to_position_conversion(test_cases) + self._test_out_of_range_values() + + def test_letter_ranges(self): + """Test letter ranges with both ascending and descending steps.""" + letter_ranges = [ + {"start": "A", "end": "E", "step": 1, "increment_letter": True, "label_type": "letters"}, + {"start": "K", "end": "G", "step": -1, "increment_letter": True, "label_type": "letters"}, + ] + self.form.create_custom_axis_labels(letter_ranges, self.floor_plan, axis="X") + + test_cases = [ + {"position": 1, "expected": "A"}, + {"position": 3, "expected": "C"}, + {"position": 5, "expected": "E"}, + {"position": 6, "expected": "K"}, + {"position": 8, "expected": "I"}, + {"position": 10, "expected": "G"}, + ] + self._test_position_to_label_conversion(test_cases) + self._test_label_to_position_conversion(test_cases) + self._test_out_of_range_values() + + def test_roman_ranges(self): + """Test roman numeral ranges with both ascending and descending steps.""" + roman_ranges = [ + {"start": "I", "end": "V", "step": 1, "increment_letter": True, "label_type": "roman"}, + {"start": "X", "end": "VI", "step": -1, "increment_letter": True, "label_type": "roman"}, + ] + self.form.create_custom_axis_labels(roman_ranges, self.floor_plan, axis="X") + + test_cases = [ + {"position": 1, "expected": "I"}, + {"position": 3, "expected": "III"}, + {"position": 5, "expected": "V"}, + {"position": 6, "expected": "X"}, + {"position": 8, "expected": "VIII"}, + {"position": 10, "expected": "VI"}, + ] + self._test_position_to_label_conversion(test_cases) + self._test_label_to_position_conversion(test_cases) + self._test_out_of_range_values() + + def test_hex_ranges(self): + """Test hexadecimal ranges with both ascending and descending steps.""" + hex_ranges = [ + {"start": "1", "end": "5", "step": 1, "increment_letter": True, "label_type": "hex"}, + {"start": "10", "end": "6", "step": -1, "increment_letter": True, "label_type": "hex"}, + ] + self.form.create_custom_axis_labels(hex_ranges, self.floor_plan, axis="X") + + test_cases = [ + {"position": 1, "expected": "0x0001"}, + {"position": 3, "expected": "0x0003"}, + {"position": 5, "expected": "0x0005"}, + {"position": 6, "expected": "0x000A"}, + {"position": 8, "expected": "0x0008"}, + {"position": 10, "expected": "0x0006"}, + ] + self._test_position_to_label_conversion(test_cases) + self._test_label_to_position_conversion(test_cases) + self._test_out_of_range_values() + + def test_binary_ranges(self): + """Test binary ranges with both ascending and descending steps.""" + binary_ranges = [ + {"start": "1", "end": "5", "step": 1, "increment_letter": True, "label_type": "binary"}, + {"start": "10", "end": "6", "step": -1, "increment_letter": True, "label_type": "binary"}, + ] + self.form.create_custom_axis_labels(binary_ranges, self.floor_plan, axis="X") + + test_cases = [ + {"position": 1, "expected": "0b0001"}, + {"position": 3, "expected": "0b0011"}, + {"position": 5, "expected": "0b0101"}, + {"position": 6, "expected": "0b1010"}, + {"position": 8, "expected": "0b1000"}, + {"position": 10, "expected": "0b0110"}, + ] + self._test_position_to_label_conversion(test_cases) + self._test_label_to_position_conversion(test_cases) + self._test_out_of_range_values() + + def test_greek_ranges(self): + """Test Greek letter ranges with both ascending and descending steps.""" + greek_ranges = [ + {"start": "α", "end": "ε", "step": 1, "increment_letter": True, "label_type": "greek"}, + {"start": "κ", "end": "ζ", "step": -1, "increment_letter": True, "label_type": "greek"}, + ] + self.form.create_custom_axis_labels(greek_ranges, self.floor_plan, axis="X") + + test_cases = [ + {"position": 1, "expected": "α"}, # alpha + {"position": 3, "expected": "γ"}, # gamma + {"position": 5, "expected": "ε"}, # epsilon + {"position": 6, "expected": "κ"}, # kappa + {"position": 8, "expected": "θ"}, # theta + {"position": 10, "expected": "ζ"}, # zeta + ] + self._test_position_to_label_conversion(test_cases) + self._test_label_to_position_conversion(test_cases) + self._test_out_of_range_values() + + def _test_position_to_label_conversion(self, test_cases): + """Helper method to test position to label conversion.""" + for test in test_cases: + with self.subTest(test=test): + converter = label_converters.PositionToLabelConverter(test["position"], "X", self.floor_plan) + label = converter.convert() + self.assertEqual( + label, + test["expected"], + f"Position {test['position']} converted to {label}, expected {test['expected']}", + ) + + def _test_label_to_position_conversion(self, test_cases): + """Helper method to test label to position conversion.""" + for test in test_cases: + with self.subTest(test=test): + converter = label_converters.LabelToPositionConverter(test["expected"], "X", self.floor_plan) + position, label = converter.convert() + self.assertEqual( + position, + test["position"], + f"Label {test['expected']} converted to position {position}, expected {test['position']}", + ) + self.assertEqual(label, test["expected"]) + + def _test_out_of_range_values(self): + """Helper method to test out of range values.""" + # Test position beyond all ranges + converter = label_converters.PositionToLabelConverter(20, "X", self.floor_plan) + label = converter.convert() + self.assertIsNone(label) + + # Test label not in any range + converter = label_converters.LabelToPositionConverter("25", "X", self.floor_plan) + with self.assertRaises(ValueError) as context: + converter.convert() + self.assertIn("not within any defined range", str(context.exception)) diff --git a/nautobot_floor_plan/tests/test_forms.py b/nautobot_floor_plan/tests/test_forms.py index fb2ac9d..ba939b3 100644 --- a/nautobot_floor_plan/tests/test_forms.py +++ b/nautobot_floor_plan/tests/test_forms.py @@ -61,9 +61,11 @@ def test_valid_extra_inputs(self): "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, "x_origin_seed": 1, "x_axis_step": 1, + "x_custom_ranges": "null", "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, "y_origin_seed": 1, "y_axis_step": 1, + "y_custom_ranges": "null", "tags": [tag], } ) @@ -105,6 +107,459 @@ def test_invalid_required_fields(self): for message in form.errors.values(): self.assertIn("This field is required.", message) + def test_form_fieldsets_structure(self): + """Test that the form's fieldset structure is correct.""" + form = forms.FloorPlanForm() + + # Test basic fieldset structure + self.assertEqual(len(form.fieldsets), 3) + + # Test Floor Plan Details tab + self.assertIn("Floor Plan", dict(form.fieldsets)) + self.assertIn("location", form.fieldsets[0][1]) + self.assertIn("x_size", form.fieldsets[0][1]) + + # Test X Axis Settings tabs + x_axis_settings = form.fieldsets[1][1] + self.assertIn("tabs", x_axis_settings) + self.assertEqual(len(x_axis_settings["tabs"]), 2) + + # Test Y Axis Settings tabs + y_axis_settings = form.fieldsets[2][1] + self.assertIn("tabs", y_axis_settings) + self.assertEqual(len(y_axis_settings["tabs"]), 2) + + def test_custom_ranges_validation(self): + """Test validation of custom range inputs.""" + test_cases = [ + # Valid cases + {"x_custom_ranges": '[{"start": "1", "end": "10", "step": 1, "label_type": "hex"}]', "valid": True}, + {"x_custom_ranges": '[{"start": "3", "end": "12", "step": 1, "label_type": "binary"}]', "valid": True}, + { + "x_custom_ranges": '[{"start": "07A", "end": "07J", "step": 1, "increment_letter": false, "label_type": "numalpha"}]', + "valid": True, + }, + # Invalid cases + { + "x_custom_ranges": '[{"start": "07A", "end": "08Z", "step": 1, "increment_letter": false, "label_type": "numalpha"}]', + "valid": False, + "error": "Range: '07' != '08'. Use separate ranges for different prefixes", + }, + { + "x_custom_ranges": '[{"start": "1", "end": "10", "step": 1, "label_type": "let"}]', + "valid": False, + "error": "Invalid label type", + }, + ] + + for test_case in test_cases: + form_data = { + "location": self.floors[0].pk, + "x_size": 10, + "y_size": 10, + "tile_depth": 100, + "tile_width": 100, + "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "x_origin_seed": 1, + "y_origin_seed": 1, + "x_axis_step": 1, + "y_axis_step": 1, + "x_custom_ranges": test_case["x_custom_ranges"], + } + + form = forms.FloorPlanForm(data=form_data) + is_valid = form.is_valid() + + self.assertEqual(is_valid, test_case["valid"]) + if not is_valid and "error" in test_case: + errors = str(form.errors) + self.assertIn(test_case["error"], errors) + + def test_step_aware_range_validation(self): + """Test that range validation correctly considers step values.""" + test_cases = [ + { + "range": [{"start": "1", "end": "20", "step": 2, "label_type": "binary", "increment_letter": True}], + "size": 10, + "should_pass": True, + }, + { + "range": [{"start": "1", "end": "20", "step": 1, "label_type": "binary", "increment_letter": True}], + "size": 10, + "should_pass": False, + "error": "has effective size 20", + }, + { + "range": [ + {"start": "07A", "end": "07Z", "step": 1, "label_type": "numalpha", "increment_letter": False} + ], + "size": 26, + "should_pass": True, + }, + { + "range": [ + {"start": "02AA", "end": "02ZZ", "step": 1, "label_type": "numalpha", "increment_letter": False} + ], + "size": 26, + "should_pass": True, + }, + { + "range": [{"start": "AA", "end": "ZZ", "step": 1, "label_type": "letters", "increment_letter": False}], + "size": 26, + "should_pass": True, + }, + { + "range": [ + {"start": "07A", "end": "08A", "step": 1, "label_type": "numalpha", "increment_letter": True} + ], + "size": 10, + "should_pass": False, + "error": "Range: '07' != '08'. Use separate ranges for different prefixes", + }, + ] + + for test in test_cases: + form_data = { + "location": self.floors[0].pk, + "x_size": test["size"], + "y_size": test["size"], + "tile_depth": 100, + "tile_width": 100, + "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "x_origin_seed": 1, + "y_origin_seed": 1, + "x_axis_step": 1, + "y_axis_step": 1, + "x_custom_ranges": test["range"], + } + form = forms.FloorPlanForm(data=form_data) + is_valid = form.is_valid() + + if test["should_pass"]: + self.assertTrue(is_valid, f"Form should be valid for range: {test['range']}") + else: + self.assertFalse(is_valid, f"Form should be invalid for range: {test['range']}") + self.assertIn(test["error"], str(form.errors)) + + def test_alphanumeric_range_validation(self): + """Test validation of alphanumeric range inputs.""" + test_cases = [ + # Valid cases + { + "x_custom_ranges": '[{"start": "A1", "end": "A5", "step": 1, "increment_letter": true, "label_type": "alphanumeric"},{"start": "B1", "end": "B5", "step": 1, "increment_letter": true, "label_type": "alphanumeric"}]', + "valid": True, + }, + { + "x_custom_ranges": '[{"start": "A1", "end": "J1", "step": 1, "increment_letter": false, "label_type": "alphanumeric"}]', + "valid": True, + }, + # Invalid cases - range too large + { + "x_custom_ranges": '[{"start": "A1", "end": "A20", "step": 1, "increment_letter": true, "label_type": "alphanumeric"}]', + "valid": False, + "error": "Range from A1 to A20 has effective size 20, exceeding maximum size of 10", + }, + # Invalid cases - non-alphanumeric input + { + "x_custom_ranges": '[{"start": "123", "end": "456", "step": 1, "increment_letter": true, "label_type": "alphanumeric"}]', + "valid": False, + "error": "Invalid alphanumeric range: '123' to '456' must include alphabetic characters. Use label_type 'numbers' if no letters are needed.", + }, + ] + + for test_case in test_cases: + form_data = { + "location": self.floors[0].pk, + "x_size": 10, + "y_size": 10, + "tile_depth": 100, + "tile_width": 100, + "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "x_origin_seed": 1, + "y_origin_seed": 1, + "x_axis_step": 1, + "y_axis_step": 1, + "x_custom_ranges": test_case["x_custom_ranges"], + } + + form = forms.FloorPlanForm(data=form_data) + is_valid = form.is_valid() + + if test_case["valid"]: + self.assertTrue(is_valid, f"Form should be valid for {test_case['x_custom_ranges']}") + else: + self.assertFalse(is_valid, f"Form should be invalid for {test_case['x_custom_ranges']}") + if "error" in test_case: + self.assertIn(test_case["error"], str(form.errors)) + + def test_custom_number_range_validation(self): + """Test validation of custom number range inputs.""" + test_cases = [ + # Valid cases + { + "x_custom_ranges": '[{"start": "1", "end": "5", "step": 1, "increment_letter": false, "label_type": "numbers"},{"start": "10", "end": "15", "step": 1, "increment_letter": false, "label_type": "numbers"}]', + "valid": True, + }, + { + "x_custom_ranges": '[{"start": "01", "end": "05", "step": 1, "increment_letter": false, "label_type": "numbers"}]', + "valid": True, + }, + # Invalid cases - range too large + { + "x_custom_ranges": '[{"start": "1", "end": "20", "step": 1, "increment_letter": false, "label_type": "numbers"}]', + "valid": False, + "error": "Range from 1 to 20 has effective size 20, exceeding maximum size of 10", + }, + # Invalid cases - non-numeric input + { + "x_custom_ranges": '[{"start": "ABC", "end": "DEF", "step": 1, "increment_letter": false, "label_type": "numbers"}]', + "valid": False, + "error": "Invalid number format", + }, + # Invalid cases - overlapping ranges + { + "x_custom_ranges": '[{"start": "1", "end": "5", "step": 1, "increment_letter": false, "label_type": "numbers"},{"start": "3", "end": "7", "step": 1, "increment_letter": false, "label_type": "numbers"}]', + "valid": False, + "error": "Ranges overlap", + }, + # Invalid cases - invalid increment_letter + { + "x_custom_ranges": '[{"start": "01", "end": "05", "step": 1, "increment_letter": true, "label_type": "numbers"}]', + "valid": False, + }, + ] + + for test_case in test_cases: + form_data = { + "location": self.floors[0].pk, + "x_size": 10, + "y_size": 10, + "tile_depth": 100, + "tile_width": 100, + "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "x_origin_seed": 1, + "y_origin_seed": 1, + "x_axis_step": 1, + "y_axis_step": 1, + "x_custom_ranges": test_case["x_custom_ranges"], + } + + form = forms.FloorPlanForm(data=form_data) + is_valid = form.is_valid() + + if test_case["valid"]: + self.assertTrue(is_valid, f"Form should be valid for {test_case['x_custom_ranges']}") + else: + self.assertFalse(is_valid, f"Form should be invalid for {test_case['x_custom_ranges']}") + if "error" in test_case: + self.assertIn(test_case["error"], str(form.errors)) + + def test_roman_range_validation(self): + """Test validation of Roman numeral range inputs.""" + test_cases = [ + # Valid cases + { + "x_custom_ranges": '[{"start": "I", "end": "V", "step": 1, "increment_letter": true, "label_type": "roman"},{"start": "XI", "end": "XV", "step": 1, "increment_letter": true, "label_type": "roman"}]', + "valid": True, + }, + # Invalid cases + { + "x_custom_ranges": '[{"start": "I", "end": "XX", "step": 1, "increment_letter": true, "label_type": "roman"}]', + "valid": False, + "error": "Range from I to XX has effective size 20, exceeding maximum size of 10", + }, + { + "x_custom_ranges": '[{"start": "ABC", "end": "DEF", "step": 1, "increment_letter": true, "label_type": "roman"}]', + "valid": False, + "errors": [ + "Invalid values for roman - Invalid Roman numeral: ABC", + "Invalid values for roman - Invalid Roman numeral character at position 0 in: ABC", + ], + }, + ] + + for test_case in test_cases: + form_data = { + "location": self.floors[0].pk, + "x_size": 10, + "y_size": 10, + "tile_depth": 100, + "tile_width": 100, + "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "x_origin_seed": 1, + "y_origin_seed": 1, + "x_axis_step": 1, + "y_axis_step": 1, + "x_custom_ranges": test_case["x_custom_ranges"], + } + + form = forms.FloorPlanForm(data=form_data) + is_valid = form.is_valid() + + if test_case["valid"]: + self.assertTrue(is_valid, f"Form should be valid for {test_case['x_custom_ranges']}") + else: + self.assertFalse(is_valid, f"Form should be invalid for {test_case['x_custom_ranges']}") + if "error" in test_case: + self.assertIn(test_case["error"], str(form.errors)) + elif "errors" in test_case: + error_str = str(form.errors) + self.assertTrue( + any(error in error_str for error in test_case["errors"]), + f"Expected one of {test_case['errors']} in error message, but got: {error_str}", + ) + + def test_letters_range_validation(self): + """Test validation of letter range inputs.""" + test_cases = [ + # Valid cases + { + "x_custom_ranges": '[{"start": "A", "end": "Z", "step": 1, "increment_letter": false, "label_type": "letters"},{"start": "AA", "end": "AZ", "step": 1, "increment_letter": false, "label_type": "letters"}]', + "valid": True, + }, + { + "x_custom_ranges": '[{"start": "A", "end": "Z", "step": 1, "increment_letter": false, "label_type": "letters"},{"start": "AA", "end": "ZZ", "step": 1, "increment_letter": false, "label_type": "letters"}]', + "valid": True, + }, + # Invalid cases - range too large + { + "x_custom_ranges": '[{"start": "A", "end": "AAA", "step": 1, "increment_letter": true, "label_type": "letters"}]', + "valid": False, + "error": "Range from A to AAA has effective size 703, exceeding maximum size of 52", + }, + # Invalid cases - non-letter input + { + "x_custom_ranges": '[{"start": "123", "end": "456", "step": 1, "increment_letter": false, "label_type": "letters"}]', + "valid": False, + "error": "Invalid values for letters: '123, 456'", + }, + ] + + for test_case in test_cases: + form_data = { + "location": self.floors[0].pk, + "x_size": 52, + "y_size": 52, + "tile_depth": 100, + "tile_width": 100, + "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "x_origin_seed": 1, + "y_origin_seed": 1, + "x_axis_step": 1, + "y_axis_step": 1, + "x_custom_ranges": test_case["x_custom_ranges"], + } + + form = forms.FloorPlanForm(data=form_data) + is_valid = form.is_valid() + + if test_case["valid"]: + self.assertTrue(is_valid, f"Form should be valid for {test_case['x_custom_ranges']}") + else: + self.assertFalse(is_valid, f"Form should be invalid for {test_case['x_custom_ranges']}") + if "error" in test_case: + self.assertIn(test_case["error"], str(form.errors)) + + def test_binary_range_validation(self): + """Test validation of binary range inputs.""" + test_cases = [ + # Valid cases + { + "x_custom_ranges": '[{"start": "1", "end": "5", "step": 1, "increment_letter": true, "label_type": "binary"},{"start": "6", "end": "10", "step": 1, "increment_letter": true, "label_type": "binary"}]', + "valid": True, + }, + # Invalid cases + { + "x_custom_ranges": '[{"start": "1", "end": "20", "step": 1, "increment_letter": true, "label_type": "binary"}]', + "valid": False, + "error": "Range from 1 to 20 has effective size 20, exceeding maximum size of 10", + }, + { + "x_custom_ranges": '[{"start": "abc", "end": "def", "step": 1, "increment_letter": true, "label_type": "binary"}]', + "valid": False, + "error": "Invalid numeric values - invalid literal for int() with base 10: 'abc'", + }, + ] + + for test_case in test_cases: + form_data = { + "location": self.floors[0].pk, + "x_size": 10, + "y_size": 10, + "tile_depth": 100, + "tile_width": 100, + "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "x_origin_seed": 1, + "y_origin_seed": 1, + "x_axis_step": 1, + "y_axis_step": 1, + "x_custom_ranges": test_case["x_custom_ranges"], + } + + form = forms.FloorPlanForm(data=form_data) + is_valid = form.is_valid() + + if test_case["valid"]: + self.assertTrue(is_valid, f"Form should be valid for {test_case['x_custom_ranges']}") + else: + self.assertFalse(is_valid, f"Form should be invalid for {test_case['x_custom_ranges']}") + if "error" in test_case: + self.assertIn(test_case["error"], str(form.errors)) + + def test_hex_range_validation(self): + """Test validation of hexadecimal range inputs.""" + test_cases = [ + # Valid cases + { + "x_custom_ranges": '[{"start": "1", "end": "15", "step": 1, "increment_letter": true, "label_type": "hex"},{"start": "16", "end": "30", "step": 1, "increment_letter": true, "label_type": "hex"}]', + "valid": True, + }, + # Invalid cases + { + "x_custom_ranges": '[{"start": "0G", "end": "1F", "step": 1, "increment_letter": true, "label_type": "hex"}]', + "valid": False, + "error": "Invalid numeric values - invalid literal for int() with base 10: '0G'", + }, + { + "x_custom_ranges": '[{"start": "XX", "end": "YY", "step": 1, "increment_letter": true, "label_type": "hex"}]', + "valid": False, + "error": "Invalid numeric values - invalid literal for int() with base 10: 'XX'", + }, + ] + + for test_case in test_cases: + form_data = { + "location": self.floors[0].pk, + "x_size": 32, + "y_size": 32, + "tile_depth": 100, + "tile_width": 100, + "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "x_origin_seed": 1, + "y_origin_seed": 1, + "x_axis_step": 1, + "y_axis_step": 1, + "x_custom_ranges": test_case["x_custom_ranges"], + } + + form = forms.FloorPlanForm(data=form_data) + is_valid = form.is_valid() + + if test_case["valid"]: + self.assertTrue(is_valid, f"Form should be valid for {test_case['x_custom_ranges']}") + else: + self.assertFalse(is_valid, f"Form should be invalid for {test_case['x_custom_ranges']}") + if "error" in test_case: + self.assertIn(test_case["error"], str(form.errors)) + class TestFloorPlanTileForm(TestCase): """Test FloorPlanTileForm forms.""" diff --git a/nautobot_floor_plan/tests/test_label_generator.py b/nautobot_floor_plan/tests/test_label_generator.py new file mode 100644 index 0000000..93bda1b --- /dev/null +++ b/nautobot_floor_plan/tests/test_label_generator.py @@ -0,0 +1,327 @@ +"""Test floorplan label generator.""" + +from nautobot.core.testing import TestCase + +from nautobot_floor_plan import models +from nautobot_floor_plan.custom_validators import RangeValidator +from nautobot_floor_plan.tests import fixtures + + +class TestNumericLabelGenerator(TestCase): + """Test cases for numeric label generation (numbers and alphanumeric).""" + + def setUp(self): + """Create LocationType, Status, and Location records.""" + data = fixtures.create_prerequisites() + self.floors = data["floors"] + self.status = data["status"] + self.floor_plan = models.FloorPlan(location=self.floors[0], x_size=10, y_size=10) + self.floor_plan.validated_save() + self.validator = RangeValidator(max_size=10) + + def create_custom_labels(self, labels_config, axis="X"): + """Helper to create custom labels from config.""" + for config in labels_config: + models.FloorPlanCustomAxisLabel.objects.create( + floor_plan=self.floor_plan, + axis=axis, + start_label=config["start"], + end_label=config["end"], + step=config["step"], + increment_letter=config["increment_letter"], + label_type=config["label_type"], + ) + + def test_custom_number_ranges(self): + """Test custom number ranges with basic incrementing.""" + config = [{"start": "1", "end": "5", "step": 1, "increment_letter": True, "label_type": "numbers"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["1", "2", "3", "4", "5"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_number_ranges_with_leading_zeros(self): + """Test custom number ranges with leading zeros.""" + config = [{"start": "01", "end": "05", "step": 1, "increment_letter": True, "label_type": "numbers"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["01", "02", "03", "04", "05"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_number_ranges_negative_step(self): + """Test custom number ranges with negative steps.""" + config = [{"start": "5", "end": "1", "step": -1, "increment_letter": True, "label_type": "numbers"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["5", "4", "3", "2", "1"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_number_ranges_with_leading_zeros_negative_step(self): + """Test custom number ranges with leading zeros and negative steps.""" + config = [{"start": "05", "end": "01", "step": -1, "increment_letter": False, "label_type": "numbers"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["05", "04", "03", "02", "01"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_number_ranges_multiple_ranges(self): + """Test multiple custom number ranges.""" + config = [ + {"start": "01", "end": "03", "step": 1, "increment_letter": True, "label_type": "numbers"}, + {"start": "10", "end": "12", "step": 1, "increment_letter": True, "label_type": "numbers"}, + ] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 6) + expected = ["01", "02", "03", "10", "11", "12"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_number_ranges_mixed_formats(self): + """Test custom number ranges with mixed formats.""" + config = [ + {"start": "1", "end": "3", "step": 1, "increment_letter": True, "label_type": "numbers"}, + {"start": "04", "end": "06", "step": 1, "increment_letter": True, "label_type": "numbers"}, + ] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 6) + expected = ["1", "2", "3", "04", "05", "06"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_alphanumeric_ranges(self): + """Test custom alphanumeric ranges with number incrementing.""" + config = [{"start": "A01", "end": "A05", "step": 1, "increment_letter": False, "label_type": "alphanumeric"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["A01", "A02", "A03", "A04", "A05"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_alphanumeric_ranges_no_leading_zero(self): + """Test custom alphanumeric ranges without leading zeros.""" + config = [{"start": "A1", "end": "A5", "step": 1, "increment_letter": False, "label_type": "alphanumeric"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["A1", "A2", "A3", "A4", "A5"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_alphanumeric_ranges_increment_prefix(self): + """Test custom alphanumeric ranges with prefix incrementing.""" + config = [{"start": "A01", "end": "E01", "step": 1, "increment_letter": True, "label_type": "alphanumeric"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["A01", "B01", "C01", "D01", "E01"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_alphanumeric_ranges_increment_prefix_no_leading_zero(self): + """Test custom alphanumeric ranges with prefix incrementing and no leading zeros.""" + config = [{"start": "A1", "end": "E1", "step": 1, "increment_letter": True, "label_type": "alphanumeric"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["A1", "B1", "C1", "D1", "E1"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_alphanumeric_ranges_negative(self): + """Test custom alphanumeric ranges with negative steps.""" + config = [{"start": "A05", "end": "A01", "step": -1, "increment_letter": False, "label_type": "alphanumeric"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["A05", "A04", "A03", "A02", "A01"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_alphanumeric_ranges_negative_prefix(self): + """Test custom alphanumeric ranges with negative steps and prefix incrementing.""" + config = [{"start": "E01", "end": "A01", "step": -1, "increment_letter": True, "label_type": "alphanumeric"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["E01", "D01", "C01", "B01", "A01"] + self.assertEqual(labels[: len(expected)], expected) + + +class TestLetterLabelGenerator(TestCase): + """Test cases for letter-based label generation (letters and numalpha).""" + + def setUp(self): + """Create LocationType, Status, and Location records.""" + data = fixtures.create_prerequisites() + self.floors = data["floors"] + self.status = data["status"] + self.floor_plan = models.FloorPlan(location=self.floors[0], x_size=10, y_size=10) + self.floor_plan.validated_save() + self.validator = RangeValidator(max_size=10) + + def create_custom_labels(self, labels_config, axis="X"): + """Helper to create custom labels from config.""" + for config in labels_config: + models.FloorPlanCustomAxisLabel.objects.create( + floor_plan=self.floor_plan, + axis=axis, + start_label=config["start"], + end_label=config["end"], + step=config["step"], + increment_letter=config["increment_letter"], + label_type=config["label_type"], + ) + + def test_custom_letter_ranges(self): + """Test custom letter ranges with different configurations.""" + config = [{"start": "C", "end": "Z", "step": 1, "increment_letter": True, "label_type": "letters"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 24) + expected = [chr(65 + i) for i in range(2, 26)] # C through Z + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_letter_ranges_negative_step(self): + """Test custom letter ranges with negative steps.""" + config = [{"start": "E", "end": "A", "step": -1, "increment_letter": True, "label_type": "letters"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["E", "D", "C", "B", "A"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_letter_ranges_multiple_ranges(self): + """Test multiple custom letter ranges.""" + config = [ + {"start": "A", "end": "C", "step": 1, "increment_letter": True, "label_type": "letters"}, + {"start": "X", "end": "Z", "step": 1, "increment_letter": True, "label_type": "letters"}, + ] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 6) + expected = ["A", "B", "C", "X", "Y", "Z"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_numalpha_ranges(self): + """Test custom numalpha ranges with letter incrementing.""" + config = [{"start": "02A", "end": "02E", "step": 1, "increment_letter": True, "label_type": "numalpha"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["02A", "02B", "02C", "02D", "02E"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_numalpha_ranges_no_leading_zero(self): + """Test custom numalpha ranges without leading zeros.""" + config = [{"start": "2A", "end": "2E", "step": 1, "increment_letter": True, "label_type": "numalpha"}] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 5) + expected = ["2A", "2B", "2C", "2D", "2E"] + self.assertEqual(labels[: len(expected)], expected) + + def test_multiple_numalpha_ranges(self): + """Test multiple numalpha ranges.""" + config = [ + {"start": "01A", "end": "01C", "step": 1, "increment_letter": True, "label_type": "numalpha"}, + {"start": "02X", "end": "02Z", "step": 1, "increment_letter": True, "label_type": "numalpha"}, + ] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 6) + expected = ["01A", "01B", "01C", "02X", "02Y", "02Z"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_numalpha_ranges_multi_letter_negative_step(self): + """Test custom numalpha ranges with multi-letter sequences and negative steps.""" + config = [ + {"start": "02EE", "end": "02EA", "step": -1, "increment_letter": True, "label_type": "numalpha"}, + {"start": "02E", "end": "02A", "step": -1, "increment_letter": False, "label_type": "numalpha"}, + ] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 10) + expected = ["02EE", "02ED", "02EC", "02EB", "02EA", "02E", "02D", "02C", "02B", "02A"] + self.assertEqual(labels[: len(expected)], expected) + + def test_custom_numalpha_ranges_multi_letter_negative_step_all_letters(self): + """Test custom numalpha ranges with multi-letter sequences and negative steps, decrementing all letters.""" + config = [ + {"start": "02EE", "end": "02AA", "step": -1, "increment_letter": False, "label_type": "numalpha"}, + {"start": "02E", "end": "02A", "step": -1, "increment_letter": False, "label_type": "numalpha"}, + ] + self.create_custom_labels(config) + labels = self.floor_plan.generate_labels("X", 10) + expected = ["02EE", "02DD", "02CC", "02BB", "02AA", "02E", "02D", "02C", "02B", "02A"] + self.assertEqual(labels[: len(expected)], expected) + + +class TestLabelRangeOrder(TestCase): + """Test cases for custom label range ordering.""" + + def setUp(self): + """Create LocationType, Status, and Location records.""" + data = fixtures.create_prerequisites() + self.floors = data["floors"] + self.status = data["status"] + self.floor_plan = models.FloorPlan(location=self.floors[0], x_size=10, y_size=10) + self.floor_plan.validated_save() + + def create_custom_labels(self, labels_config, axis="X"): + """Helper to create custom labels from config.""" + for config in labels_config: + models.FloorPlanCustomAxisLabel.objects.create( + floor_plan=self.floor_plan, + axis=axis, + start_label=config["start"], + end_label=config["end"], + step=config["step"], + increment_last_letter=config["increment_last_letter"], + label_type=config["label_type"], + order=config["order"], + ) + + +def test_custom_range_order_consistency(self): + """Test that custom range order is maintained when saving and retrieving.""" + # Create initial ranges in specific order + config = [ + { + "start": "02EE", + "end": "02AA", + "step": -1, + "increment_last_letter": True, + "label_type": "numalpha", + "order": 1, + }, + { + "start": "02E", + "end": "02A", + "step": -1, + "increment_last_letter": False, + "label_type": "numalpha", + "order": 2, + }, + ] + self.create_custom_labels(config) + + # Verify order in database + ranges = self.floor_plan.get_custom_ranges("X") + self.assertEqual(len(ranges), 2) + self.assertEqual(ranges[0].start_label, "02EE") + self.assertEqual(ranges[1].start_label, "02E") + + # Verify order in JSON representation + json_ranges = self.floor_plan.get_custom_ranges_as_json("X") + self.assertEqual(json_ranges[0]["start"], "02EE") + self.assertEqual(json_ranges[1]["start"], "02E") + + +def test_custom_range_order_mixed_types(self): + """Test that custom range order is maintained with different label types.""" + config = [ + { + "start": "A01", + "end": "A05", + "step": 1, + "increment_last_letter": True, + "label_type": "alphanumeric", + "order": 1, + }, + {"start": "01", "end": "05", "step": 1, "increment_last_letter": True, "label_type": "numbers", "order": 2}, + {"start": "02A", "end": "02E", "step": 1, "increment_last_letter": True, "label_type": "numalpha", "order": 3}, + ] + self.create_custom_labels(config) + + # Verify order in database + ranges = self.floor_plan.get_custom_ranges("X") + self.assertEqual(len(ranges), 3) + self.assertEqual(ranges[0].start_label, "A01") + self.assertEqual(ranges[1].start_label, "01") + self.assertEqual(ranges[2].start_label, "02A") + + # Verify label generation maintains order + labels = self.floor_plan.generate_labels("X", 15) + expected = ["A01", "A02", "A03", "A04", "A05", "01", "02", "03", "04", "05", "02A", "02B", "02C", "02D", "02E"] + self.assertEqual(labels, expected) diff --git a/nautobot_floor_plan/tests/test_tables.py b/nautobot_floor_plan/tests/test_tables.py new file mode 100644 index 0000000..e1e2c1d --- /dev/null +++ b/nautobot_floor_plan/tests/test_tables.py @@ -0,0 +1,52 @@ +"""Test floorplan tables.""" + +from nautobot.core.testing import TestCase + +from nautobot_floor_plan import models +from nautobot_floor_plan.tables import FloorPlanTable +from nautobot_floor_plan.tests import fixtures + + +class TestFloorPlanTable(TestCase): + """Test FloorPlan Table.""" + + def setUp(self): + """Create LocationType, Status, and Location records.""" + data = fixtures.create_prerequisites() + self.floors = data["floors"] + self.status = data["status"] + + def test_floor_plan_table_rendering(self): + """Test FloorPlanTable renders correct values for custom labels.""" + floor_plan = models.FloorPlan(location=self.floors[0], x_size=1, y_size=1) + floor_plan.validated_save() + test_cases = [ + { + "custom_label": { + "axis": "X", + "label_type": "numalpha", + "start_label": "07A", + "end_label": "07Z", + "step": 2, + }, + "expected_seed": "07A", + "expected_step": 2, + }, + {"custom_label": None, "expected_seed": "1", "expected_step": 1}, + ] + + table = FloorPlanTable([floor_plan]) + + for test in test_cases: + if test["custom_label"]: + models.FloorPlanCustomAxisLabel.objects.create(floor_plan=floor_plan, **test["custom_label"]) + + rendered_seed = table.render_x_origin_seed(floor_plan) + rendered_step = table.render_x_axis_step(floor_plan) + + self.assertEqual(rendered_seed, test["expected_seed"]) + self.assertEqual(rendered_step, test["expected_step"]) + + # Clean up for next test + if test["custom_label"]: + models.FloorPlanCustomAxisLabel.objects.all().delete() diff --git a/nautobot_floor_plan/tests/test_template_tags.py b/nautobot_floor_plan/tests/test_template_tags.py new file mode 100644 index 0000000..af25341 --- /dev/null +++ b/nautobot_floor_plan/tests/test_template_tags.py @@ -0,0 +1,112 @@ +"""Test cases for template tags.""" + +from nautobot.core.testing import TestCase + +from nautobot_floor_plan import choices, models +from nautobot_floor_plan.templatetags.seed_helpers import ( + get_fieldset_field, + grid_location_conversion, + render_axis_label, + seed_conversion, +) +from nautobot_floor_plan.tests import fixtures + + +class TestSeedHelpers(TestCase): + """Test cases for seed helper template tags.""" + + def setUp(self): + """Create test objects.""" + data = fixtures.create_prerequisites() + self.floors = data["floors"] + self.status = data["status"] + + def test_seed_conversion(self): + """Test conversion of seed numbers to letters.""" + floor_plan = models.FloorPlan.objects.create( + location=self.floors[0], x_size=3, y_size=3, x_origin_seed=1, y_origin_seed=1 + ) + floor_plan.validated_save() + # Test numeric seed + floor_plan.x_axis_labels = choices.AxisLabelsChoices.NUMBERS + floor_plan.x_origin_seed = 1 + self.assertEqual(seed_conversion(floor_plan, "x"), "1") + + # Test letter conversion + floor_plan.x_axis_labels = choices.AxisLabelsChoices.LETTERS + floor_plan.x_origin_seed = 1 + self.assertEqual(seed_conversion(floor_plan, "x"), "A") + + # Test larger numbers + floor_plan.x_origin_seed = 26 + self.assertEqual(seed_conversion(floor_plan, "x"), "Z") + + floor_plan.x_origin_seed = 27 + self.assertEqual(seed_conversion(floor_plan, "x"), "AA") + + def test_grid_location_conversion(self): + """Test conversion of grid locations to letters.""" + floor_plan = models.FloorPlan.objects.create( + location=self.floors[0], x_size=3, y_size=3, x_origin_seed=1, y_origin_seed=1 + ) + floor_plan.validated_save() + floor_plan_tile = models.FloorPlanTile(floor_plan=floor_plan, x_origin=1, y_origin=1, status=self.status) + floor_plan_tile.validated_save() + # Test numeric grid + floor_plan.x_axis_labels = choices.AxisLabelsChoices.NUMBERS + floor_plan_tile.x_origin = 1 + self.assertEqual(grid_location_conversion(floor_plan_tile, "x"), "1") + + # Test letter conversion + floor_plan.x_axis_labels = choices.AxisLabelsChoices.LETTERS + floor_plan_tile.x_origin = 1 + self.assertEqual(grid_location_conversion(floor_plan_tile, "x"), "A") + + # Test larger numbers + floor_plan_tile.x_origin = 26 + self.assertEqual(grid_location_conversion(floor_plan_tile, "x"), "Z") + + floor_plan_tile.x_origin = 27 + self.assertEqual(grid_location_conversion(floor_plan_tile, "x"), "AA") + + def test_get_fieldset_field(self): + """Test retrieving fields from a form fieldset.""" + + class MockForm(dict): + """Test retrieving fields from a form fieldset.""" + + form = MockForm() + form["test_field"] = "test_value" + + # Test existing field + self.assertEqual(get_fieldset_field(form, "test_field"), "test_value") + + # Test non-existent field + self.assertIsNone(get_fieldset_field(form, "non_existent_field")) + + def test_render_axis_label(self): + """Test render_axis_label template filter.""" + floor_plan = models.FloorPlan.objects.create( + location=self.floors[1], x_size=3, y_size=3, x_origin_seed=1, y_origin_seed=1 + ) + test_cases = [ + { + "custom_label": {"axis": "X", "label_type": "binary", "start_label": "1", "end_label": "10", "step": 1}, + "expected": "binary", + }, + {"custom_label": None, "axis_labels": choices.AxisLabelsChoices.NUMBERS, "expected": "numbers"}, + ] + + for test in test_cases: + if test["custom_label"]: + models.FloorPlanCustomAxisLabel.objects.create(floor_plan=floor_plan, **test["custom_label"]) + else: + # Set the default axis labels on the floor plan + floor_plan.x_axis_labels = test["axis_labels"] + floor_plan.save() + + result = render_axis_label(floor_plan, "X") + self.assertEqual(result, test["expected"]) + + # Clean up for next test + models.FloorPlanCustomAxisLabel.objects.all().delete() diff --git a/nautobot_floor_plan/utils.py b/nautobot_floor_plan/utils.py index 0fdd010..2375065 100644 --- a/nautobot_floor_plan/utils.py +++ b/nautobot_floor_plan/utils.py @@ -25,6 +25,34 @@ def grid_letter_to_number(letter): return number +def extract_prefix_and_letter(label): + """Helper function to split a label into prefix and letter parts.""" + prefix = "" + letters = label + + for i, char in enumerate(label): + if char.isalpha(): + prefix = label[:i] + letters = label[i:] + break + + return prefix, letters + + +def extract_prefix_and_number(label): + """Helper function to split a label into prefix and number parts.""" + prefix = "" + numbers = label + + for i, char in enumerate(label): + if char.isdigit(): + prefix = label[:i] + numbers = label[i:] + break + + return prefix, numbers + + def axis_init_label_conversion(axis_origin, axis_location, step, is_letters): """Returns the correct label position, converting to letters if `letters` is True.""" if is_letters: @@ -45,8 +73,18 @@ def axis_init_label_conversion(axis_origin, axis_location, step, is_letters): return converted_location -def axis_clean_label_conversion(axis_origin, axis_label, step, is_letters): +def axis_clean_label_conversion(axis_origin, axis_label, step, is_letters, custom_ranges=None): """Returns the correct database label position.""" + # First check if we have custom ranges that apply + if custom_ranges: + for custom_range in custom_ranges: + start = custom_range["start"] + end = custom_range["end"] + # If our label falls within this custom range, use it + if start <= axis_label <= end: + return axis_label # Return the original label as-is + + # If no custom range applies, use the default conversion logic total_cells = 18278 # Convert letters to numbers if needed if is_letters: @@ -75,6 +113,16 @@ def axis_clean_label_conversion(axis_origin, axis_label, step, is_letters): return str(original_location) +def calculate_letter_range_size(custom_range, converter): + """Calculate the range size for letter-based labels.""" + start_value = converter.to_numeric(custom_range.start_label) + end_value = converter.to_numeric(custom_range.end_label) + return abs(end_value - start_value) + 1 + + +# Depreciate in version 2.6 and remove in 2.7 + + def validate_not_zero(value): """Prevent the usage of 0 as a value in the step form field or model attribute.""" if value == 0: From 5df33f3dc7c257d689edd79f791f2f777dad0aba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDJ?= <“dj.howard@networktocode.com> Date: Mon, 6 Jan 2025 11:42:37 -0500 Subject: [PATCH 02/15] updating poetry.lock --- poetry.lock | 283 +++++++++++++++++++++++++++------------------------- 1 file changed, 145 insertions(+), 138 deletions(-) diff --git a/poetry.lock b/poetry.lock index 613d84e..6192c45 100644 --- a/poetry.lock +++ b/poetry.lock @@ -365,127 +365,114 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "3.4.0" +version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.7" files = [ - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, - {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, - {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, ] [[package]] name = "click" -version = "8.1.7" +version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] @@ -1059,6 +1046,23 @@ Django = ">=3.2" [package.extras] tablib = ["tablib"] +[[package]] +name = "django-tables2" +version = "2.7.5" +description = "Table/data-grid framework for Django" +optional = false +python-versions = ">=3.9" +files = [ + {file = "django_tables2-2.7.5-py3-none-any.whl", hash = "sha256:d9338937797207ffb6f481be2125c5ec3a0bb1858d409c672cc25fc5d654cb22"}, + {file = "django_tables2-2.7.5.tar.gz", hash = "sha256:fb5dcaa09379cf3947598ec7e1bd5f26ed63aafdee3b23963446763bbeac37bf"}, +] + +[package.dependencies] +django = ">=4.2" + +[package.extras] +tablib = ["tablib"] + [[package]] name = "django-taggit" version = "5.0.1" @@ -1241,13 +1245,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "gitdb" -version = "4.0.11" +version = "4.0.12" description = "Git Object Database" optional = false python-versions = ">=3.7" files = [ - {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, - {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, + {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"}, + {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"}, ] [package.dependencies] @@ -1255,20 +1259,20 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.43" +version = "3.1.44" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, - {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, + {file = "GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110"}, + {file = "gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] +doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"] test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] [[package]] @@ -1562,13 +1566,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" -version = "3.1.4" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] @@ -1982,13 +1986,13 @@ mkdocstrings = ">=0.25" [[package]] name = "nautobot" -version = "2.3.13" +version = "2.3.15" description = "Source of truth and network automation platform." optional = false python-versions = "<3.13,>=3.8" files = [ - {file = "nautobot-2.3.13-py3-none-any.whl", hash = "sha256:b851be96be0ab667cba570507a4ff19298b63df128680e3694af2b4bf8b7db02"}, - {file = "nautobot-2.3.13.tar.gz", hash = "sha256:13d35823be0c9af2a702d8ece52cb4a0f0e1035cd823203f0aa6130ef03daa82"}, + {file = "nautobot-2.3.15-py3-none-any.whl", hash = "sha256:b980c57bcf25f4afc1b34e42de01bc24bf1d5097c32f55cb032a98bece85f3b6"}, + {file = "nautobot-2.3.15.tar.gz", hash = "sha256:65982102f94d9f5388d06cd2768b134dfb95cc10b50160f3173ea3ff752eaa92"}, ] [package.dependencies] @@ -2008,7 +2012,10 @@ django-prometheus = ">=2.3.1,<2.4.0" django-redis = ">=5.4.0,<5.5.0" django-silk = ">=5.1.0,<5.2.0" django-structlog = {version = ">=8.1.0,<9.0.0", extras = ["celery"]} -django-tables2 = ">=2.7.0,<2.8.0" +django-tables2 = [ + {version = "2.7.0", markers = "python_version < \"3.9\""}, + {version = ">=2.7.4,<2.8.0", markers = "python_version >= \"3.9\""}, +] django-taggit = ">=5.0.0,<5.1.0" django-timezone-field = ">=7.0,<7.1" django-tree-queries = ">=0.19.0,<0.20.0" @@ -2020,14 +2027,14 @@ emoji = ">=2.12.1,<2.13.0" GitPython = ">=3.1.43,<3.2.0" graphene-django = ">=2.16.0,<2.17.0" graphene-django-optimizer = ">=0.8.0,<0.9.0" -Jinja2 = ">=3.1.4,<3.2.0" +Jinja2 = ">=3.1.5,<3.2.0" jsonschema = ">=4.7.0,<5.0.0" kombu = ">=5.4.2,<5.5.0" Markdown = ">=3.6,<3.7" MarkupSafe = ">=2.1.5,<2.2.0" netaddr = ">=1.3.0,<1.4.0" netutils = ">=1.6.0,<2.0.0" -nh3 = ">=0.2.19,<0.3.0" +nh3 = ">=0.2.20,<0.3.0" packaging = ">=23.1" Pillow = ">=10.3.0,<10.4.0" prometheus-client = ">=0.20.0,<0.21.0" @@ -2062,13 +2069,13 @@ nicer-shell = ["ipython"] [[package]] name = "netutils" -version = "1.10.0" +version = "1.11.0" description = "Common helper functions useful in network automation." optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "netutils-1.10.0-py3-none-any.whl", hash = "sha256:19b8cc3d2cf567a986f916c90f298d241af03a71c62ec6d38d6dc3395347670b"}, - {file = "netutils-1.10.0.tar.gz", hash = "sha256:f457fb85cb622e89aa0403fb2128c50986f7ce38d93a5873981727d088619793"}, + {file = "netutils-1.11.0-py3-none-any.whl", hash = "sha256:863674eb7dce2b85972d52079b4884fb30e498ccf1dd581abc28b4d69bfdf0cd"}, + {file = "netutils-1.11.0.tar.gz", hash = "sha256:1631152256db1623675d9087d4327b2f4633d294f758518742a974e868a50ae8"}, ] [package.extras] @@ -2482,13 +2489,13 @@ files = [ [[package]] name = "pygments" -version = "2.18.0" +version = "2.19.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, + {file = "pygments-2.19.0-py3-none-any.whl", hash = "sha256:4755e6e64d22161d5b61432c0600c923c5927214e7c956e31c23923c89251a9b"}, + {file = "pygments-2.19.0.tar.gz", hash = "sha256:afc4146269910d4bdfabcd27c24923137a74d562a23a320a41a55ad303e19783"}, ] [package.extras] @@ -2591,13 +2598,13 @@ pylint = ">=1.7" [[package]] name = "pymdown-extensions" -version = "10.12" +version = "10.13" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"}, - {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"}, + {file = "pymdown_extensions-10.13-py3-none-any.whl", hash = "sha256:80bc33d715eec68e683e04298946d47d78c7739e79d808203df278ee8ef89428"}, + {file = "pymdown_extensions-10.13.tar.gz", hash = "sha256:e0b351494dc0d8d14a1f52b39b1499a00ef1566b4ba23dc74f1eba75c736f5dd"}, ] [package.dependencies] @@ -3211,13 +3218,13 @@ files = [ [[package]] name = "smmap" -version = "5.0.1" +version = "5.0.2" description = "A pure Python implementation of a sliding window memory map manager" optional = false python-versions = ">=3.7" files = [ - {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, - {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, + {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"}, + {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"}, ] [[package]] From fa845efa57f6abd75553dae0f02b2edb838a39f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDJ?= <“dj.howard@networktocode.com> Date: Mon, 6 Jan 2025 11:49:11 -0500 Subject: [PATCH 03/15] pinning poetry version in ci.yml --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 61ccc70..c778bb7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,6 +47,8 @@ jobs: uses: "actions/checkout@v4" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v6" + with: + poetry-version: "1.8.4" - name: "Check Docs Build" run: "poetry run invoke build-and-check-docs" poetry: From ec16f108499056214f3e9ae5c0c9a428727b572a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDJ?= <“dj.howard@networktocode.com> Date: Mon, 6 Jan 2025 13:16:46 -0500 Subject: [PATCH 04/15] pinning poetry version in ci.yml --- .github/workflows/ci.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c778bb7..0ed0815 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,6 +25,8 @@ jobs: uses: "actions/checkout@v4" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v6" + with: + poetry-version: "1.8.4" - name: "Linting: ruff format" run: "poetry run invoke ruff --action format" ruff-lint: @@ -36,6 +38,8 @@ jobs: uses: "actions/checkout@v4" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v6" + with: + poetry-version: "1.8.4" - name: "Linting: ruff" run: "poetry run invoke ruff --action lint" check-docs-build: @@ -60,6 +64,8 @@ jobs: uses: "actions/checkout@v4" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v6" + with: + poetry-version: "1.8.4" - name: "Checking: poetry lock file" run: "poetry run invoke lock --check" yamllint: @@ -71,6 +77,8 @@ jobs: uses: "actions/checkout@v4" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v6" + with: + poetry-version: "1.8.4" - name: "Linting: yamllint" run: "poetry run invoke yamllint" check-in-docker: @@ -93,6 +101,8 @@ jobs: uses: "actions/checkout@v4" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v6" + with: + poetry-version: "1.8.4" - name: "Constrain Nautobot version and regenerate lock file" env: INVOKE_NAUTOBOT_FLOOR_PLAN_LOCAL: "true" @@ -148,6 +158,8 @@ jobs: uses: "actions/checkout@v4" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v6" + with: + poetry-version: "1.8.4" - name: "Constrain Nautobot version and regenerate lock file" env: INVOKE_NAUTOBOT_FLOOR_PLAN_LOCAL: "true" @@ -189,6 +201,8 @@ jobs: fetch-depth: "0" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v6" + with: + poetry-version: "1.8.4" - name: "Check for changelog entry" run: | git fetch --no-tags origin +refs/heads/${{ github.base_ref }}:refs/remotes/origin/${{ github.base_ref }} From 7b9c8ffa6b1c4fc57bba5a7e83e89bafacc3a2e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDJ?= <“dj.howard@networktocode.com> Date: Mon, 6 Jan 2025 13:40:21 -0500 Subject: [PATCH 05/15] modified typehint to use Tuple[int,int]: instead of tuple[int, int] to support python 3.8 --- nautobot_floor_plan/label_converters.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nautobot_floor_plan/label_converters.py b/nautobot_floor_plan/label_converters.py index 28ac8b8..ec91472 100644 --- a/nautobot_floor_plan/label_converters.py +++ b/nautobot_floor_plan/label_converters.py @@ -2,7 +2,7 @@ import logging import re -from typing import Dict, Type +from typing import Dict, Tuple, Type from nautobot_floor_plan.choices import CustomAxisLabelsChoices from nautobot_floor_plan.utils import ( @@ -423,7 +423,8 @@ def __init__(self): super().__init__() self._current_value = None - def _convert_next_numeral(self, label: str, index: int) -> tuple[int, int]: + # TODO Change type hint to tuple when python 3.8 support is dropped. + def _convert_next_numeral(self, label: str, index: int) -> Tuple[int, int]: """Convert next Roman numeral and return its value and new index.""" # Try two character combinations first if index + 1 < len(label): From 7e05a08ac3e3d33594076674830eb9103914ee49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDJ?= <“dj.howard@networktocode.com> Date: Mon, 6 Jan 2025 14:04:03 -0500 Subject: [PATCH 06/15] adding placeholder for custom_ranges. --- nautobot_floor_plan/tests/test_views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nautobot_floor_plan/tests/test_views.py b/nautobot_floor_plan/tests/test_views.py index 6ebbc9e..a80b3de 100644 --- a/nautobot_floor_plan/tests/test_views.py +++ b/nautobot_floor_plan/tests/test_views.py @@ -34,4 +34,6 @@ def setUpTestData(cls): "y_axis_step": 1, "x_axis_labels": choices.AxisLabelsChoices.NUMBERS, "y_axis_labels": choices.AxisLabelsChoices.NUMBERS, + "x_custom_ranges": [{}], # Placeholder for x_custom_ranges + "y_custom_ranges": [{}], # Placeholder for y_custom_ranges } From efd75b26e5fb6580484f931961d0c2e193676633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDJ?= <“dj.howard@networktocode.com> Date: Mon, 6 Jan 2025 16:39:17 -0500 Subject: [PATCH 07/15] removing typehints, updating change fragment number --- changes/{140.added => 141.added} | 0 nautobot_floor_plan/label_converters.py | 53 ++++++++++++------------- 2 files changed, 26 insertions(+), 27 deletions(-) rename changes/{140.added => 141.added} (100%) diff --git a/changes/140.added b/changes/141.added similarity index 100% rename from changes/140.added rename to changes/141.added diff --git a/nautobot_floor_plan/label_converters.py b/nautobot_floor_plan/label_converters.py index ec91472..2a3190c 100644 --- a/nautobot_floor_plan/label_converters.py +++ b/nautobot_floor_plan/label_converters.py @@ -2,7 +2,6 @@ import logging import re -from typing import Dict, Tuple, Type from nautobot_floor_plan.choices import CustomAxisLabelsChoices from nautobot_floor_plan.utils import ( @@ -310,15 +309,15 @@ def __init__(self): self._increment_prefix = False self.current_label = None - def to_numeric(self, label: str) -> int: + def to_numeric(self, label): """Convert label to numeric value.""" raise NotImplementedError - def from_numeric(self, number: int) -> str: + def from_numeric(self, number): """Convert numeric value to label.""" raise NotImplementedError - def set_increment_prefix(self, increment_prefix: bool) -> None: + def set_increment_prefix(self, increment_prefix): """Set whether to increment the prefix instead of the number.""" raise NotImplementedError @@ -346,7 +345,7 @@ def _handle_mixed_conversion(self, letters): return grid_letter_to_number(letters) return ord(letters[0]) - ord("A") + 1 - def to_numeric(self, label: str) -> int: + def to_numeric(self, label): """Convert alphanumeric label to numeric value.""" self._current_label = label if not self._start_label: @@ -369,7 +368,7 @@ def to_numeric(self, label: str) -> int: return numeric_value - def _generate_letter_pattern(self, number: int, pattern_letters: str) -> str: + def _generate_letter_pattern(self, number, pattern_letters): """Generate the letter pattern based on the numeric value.""" if not self._increment_prefix: # Use the pattern from start label @@ -379,7 +378,7 @@ def _generate_letter_pattern(self, number: int, pattern_letters: str) -> str: return letter * letter_length return grid_number_to_letter(number) - def from_numeric(self, number: int, prefix: str = "") -> str: + def from_numeric(self, number, prefix=""): """Convert numeric value to Numalpha label.""" if number < 1: raise ValueError("Number must be positive") @@ -394,7 +393,7 @@ def from_numeric(self, number: int, prefix: str = "") -> str: result = f"{use_prefix}{result_letters}" return result - def set_increment_prefix(self, increment_prefix: bool) -> None: + def set_increment_prefix(self, increment_prefix): """Set whether to increment the prefix instead of the number.""" self._increment_prefix = increment_prefix @@ -424,7 +423,7 @@ def __init__(self): self._current_value = None # TODO Change type hint to tuple when python 3.8 support is dropped. - def _convert_next_numeral(self, label: str, index: int) -> Tuple[int, int]: + def _convert_next_numeral(self, label, index): """Convert next Roman numeral and return its value and new index.""" # Try two character combinations first if index + 1 < len(label): @@ -441,7 +440,7 @@ def _convert_next_numeral(self, label: str, index: int) -> Tuple[int, int]: raise ValueError(f"Invalid Roman numeral character at position {index} in: {label}") - def to_numeric(self, label: str) -> int: + def to_numeric(self, label): """Convert Roman numeral to integer.""" if not label: raise ValueError("Roman numeral cannot be empty") @@ -457,7 +456,7 @@ def to_numeric(self, label: str) -> int: self._current_value = result return result - def from_numeric(self, number: int, prefix: str = "") -> str: + def from_numeric(self, number, prefix=""): """Convert integer to Roman numeral.""" if not 0 < number < 4000: raise ValueError("Number must be between 1 and 3999") @@ -493,7 +492,7 @@ def __init__(self): self._current_value = None self._prefix = "" - def to_numeric(self, label: str) -> int: + def to_numeric(self, label) -> int: """Convert Greek letter to numeric value.""" if not label: raise ValueError("Greek letter cannot be empty") @@ -523,7 +522,7 @@ def to_numeric(self, label: str) -> int: except ValueError as e: raise ValueError(f"Invalid Greek letter: {label}") from e - def from_numeric(self, number: int, prefix: str = "") -> str: + def from_numeric(self, number, prefix=""): """Convert numeric value to Greek letter.""" if number < 1 or number > len(self.GREEK_LETTERS): raise ValueError(f"Number must be between 1 and {len(self.GREEK_LETTERS)}") @@ -546,12 +545,12 @@ def set_increment_prefix(self, increment_prefix: bool) -> None: class BinaryConverter(LabelConverter): """Binary number conversion.""" - def __init__(self, min_digits: int = 4): + def __init__(self, min_digits=4): """Initialize the converter with a minimum digit width.""" super().__init__() self.min_digits = min_digits - def to_numeric(self, label: str) -> int: + def to_numeric(self, label) -> int: """Convert a label to a numeric value.""" try: # If the label starts with '0b', interpret as binary @@ -562,7 +561,7 @@ def to_numeric(self, label: str) -> int: except ValueError as e: raise ValueError(f"Label must be an integer or binary value, received: {label}") from e - def from_numeric(self, number: int, prefix: str = "") -> str: + def from_numeric(self, number, prefix=""): """Convert a numeric value to a binary string with a '0b' prefix.""" if number < 0: raise ValueError("Binary conversion requires positive numbers") @@ -581,12 +580,12 @@ def set_increment_prefix(self, increment_prefix: bool) -> None: class HexConverter(LabelConverter): """Hexadecimal number conversion.""" - def __init__(self, min_digits: int = 4): + def __init__(self, min_digits=4): """Initialize the converter with a minimum digit width.""" super().__init__() self.min_digits = min_digits - def to_numeric(self, label: str) -> int: + def to_numeric(self, label) -> int: """Convert a label to a numeric value.""" try: # If the label starts with '0x', interpret as hex @@ -597,7 +596,7 @@ def to_numeric(self, label: str) -> int: except ValueError as e: raise ValueError(f"Label must be an integer or hex value, received: {label}") from e - def from_numeric(self, number: int, prefix: str = "") -> str: + def from_numeric(self, number, prefix=""): """Convert numeric value to hex string.""" if number < 0: raise ValueError("Hex conversion requires positive numbers") @@ -625,7 +624,7 @@ def __init__(self): self._is_number_only = False self._increment_prefix = False - def to_numeric(self, label: str) -> int: + def to_numeric(self, label) -> int: """Convert alphanumeric or numeric label to numeric value.""" if self._is_number_only: if not label.isdigit(): @@ -646,7 +645,7 @@ def to_numeric(self, label: str) -> int: return sum((ord(c) - ord("A") + 1) * (26**i) for i, c in enumerate(reversed(prefix))) return int(number) - def from_numeric(self, number: int, prefix: str = "") -> str: + def from_numeric(self, number, prefix=""): """Convert numeric value to alphanumeric or numeric label.""" if number < 1: raise ValueError("Number must be positive") @@ -660,21 +659,21 @@ def from_numeric(self, number: int, prefix: str = "") -> str: return f"{self._prefix}{number:02d}" if self._use_leading_zeros else f"{self._prefix}{number}" - def _generate_prefix(self, number: int) -> str: + def _generate_prefix(self, number): """Generate alphabetic prefix for a given numeric value.""" if number < 1: raise ValueError("Number must be positive") return grid_number_to_letter(number) - def set_increment_prefix(self, increment_prefix: bool) -> None: + def set_increment_prefix(self, increment_prefix): """Set whether to increment the prefix instead of the number.""" self._increment_prefix = increment_prefix - def set_number_only_mode(self, is_number_only: bool) -> None: + def set_number_only_mode(self, is_number_only): """Set whether the converter should handle pure numbers.""" self._is_number_only = is_number_only - def set_prefix(self, prefix: str) -> None: + def set_prefix(self, prefix): """Set the prefix for the label converter.""" if not re.match(r"^[A-Z]+$", prefix): raise ValueError("Prefix must be a non-empty string of uppercase letters") @@ -684,7 +683,7 @@ def set_prefix(self, prefix: str) -> None: class LabelConverterFactory: """Factory for creating label converters.""" - _converters: Dict[str, Type[LabelConverter]] = { + _converters = { CustomAxisLabelsChoices.ROMAN: RomanConverter, CustomAxisLabelsChoices.GREEK: GreekConverter, CustomAxisLabelsChoices.BINARY: BinaryConverter, @@ -696,7 +695,7 @@ class LabelConverterFactory: } @classmethod - def get_converter(cls, label_type: str) -> LabelConverter: + def get_converter(cls, label_type): """Get the appropriate converter for the label type.""" converter_class = cls._converters.get(label_type) if not converter_class: From 249260e22ca8c7b5477f65866d1abbdc107923ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDJ?= <“dj.howard@networktocode.com> Date: Mon, 6 Jan 2025 16:54:46 -0500 Subject: [PATCH 08/15] adding disable x and y origin check to floorplantile init --- nautobot_floor_plan/forms.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nautobot_floor_plan/forms.py b/nautobot_floor_plan/forms.py index df8e5a1..b448d0d 100644 --- a/nautobot_floor_plan/forms.py +++ b/nautobot_floor_plan/forms.py @@ -418,6 +418,9 @@ def __init__(self, *args, **kwargs): fp_obj = self.fields["floor_plan"].queryset.get(id=fp_id) self.x_letters = fp_obj.x_axis_labels == choices.AxisLabelsChoices.LETTERS self.y_letters = fp_obj.y_axis_labels == choices.AxisLabelsChoices.LETTERS + if not fp_obj.is_tile_movable: + self.fields["x_origin"].disabled = True + self.fields["y_origin"].disabled = True if self.instance.x_origin or self.instance.y_origin: if fp_obj.custom_labels.filter(axis="X").exists(): From 480e6a9d7433b04b213046b1d91ad5527c11daae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDJ?= <“dj.howard@networktocode.com> Date: Thu, 9 Jan 2025 08:34:27 -0500 Subject: [PATCH 09/15] Addressing PR comments. --- changes/8.added | 2 +- docs/images/add-tile-axis-numalpha.png | Bin 72206 -> 42744 bytes docs/images/add-tile-axis-roman.png | Bin 68334 -> 41942 bytes docs/images/custom-label-examples.png | Bin 0 -> 64055 bytes docs/user/app_getting_started.md | 1 + nautobot_floor_plan/forms.py | 41 +++++----------- .../migrations/0008_add_axis_step.py | 6 +-- .../0009_add_custom_label_support.py | 12 +++-- nautobot_floor_plan/models.py | 4 +- .../nautobot_floor_plan/floorplan_create.html | 46 +++++++++++++++--- .../templatetags/seed_helpers.py | 3 +- nautobot_floor_plan/tests/test_converters.py | 3 +- .../tests/test_label_generator.py | 2 +- nautobot_floor_plan/tests/test_utils.py | 2 +- .../{ => utils}/custom_validators.py | 5 +- .../{ => utils}/label_converters.py | 2 +- .../{ => utils}/label_generator.py | 4 +- nautobot_floor_plan/{ => utils}/utils.py | 0 18 files changed, 77 insertions(+), 56 deletions(-) create mode 100644 docs/images/custom-label-examples.png rename nautobot_floor_plan/{ => utils}/custom_validators.py (98%) rename nautobot_floor_plan/{ => utils}/label_converters.py (99%) rename nautobot_floor_plan/{ => utils}/label_generator.py (98%) rename nautobot_floor_plan/{ => utils}/utils.py (100%) diff --git a/changes/8.added b/changes/8.added index bc90206..2bf6f7a 100644 --- a/changes/8.added +++ b/changes/8.added @@ -1 +1 @@ -Added support for defining custom label ranges. \ No newline at end of file +Added support for defining custom grid label ranges. \ No newline at end of file diff --git a/docs/images/add-tile-axis-numalpha.png b/docs/images/add-tile-axis-numalpha.png index 8e99ef92ef2ec51c025b0c095792ccd3f76377d0..e676a3fdc553a331ea0255f024944be15fa31688 100644 GIT binary patch literal 42744 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 WA^3(&t@K_4f8?c=q>3aB{Qn=vQZrTn literal 72206 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 T@BZ+*0scrokryuz)AssbR3~EL literal 68334 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 a586`4qos3UZgE85OG{l}?ZpK|=)V9B?AN^j diff --git a/docs/images/custom-label-examples.png b/docs/images/custom-label-examples.png new file mode 100644 index 0000000000000000000000000000000000000000..6516959a407e43606e8db9fef0a9d0940dfdabfb GIT binary patch literal 64055 zcmd43Wn5L=8V5*sg9wr$-JsH)(%lkAI3nHMEg>i+NH+q~B_JuFbV^D$BHcCXc*T2X z=G)ACnD+;A-hK97d(~d+`Ny-vRh4D2F&<#R!NFn6J(E(0gF_$!zujmk;K+}m88h$) z-br0n0ZX7Cve4nE8R4heP&_!yuzRyIsI}?E@6Y<~YZty*vxQ3*h9QdnY>Ij9}I=!-U4*Zb61upzyp{eVvtE4Dk zYG=a^F|&ICWp}r+hg||E!Zd%*5CETHhdF4d|D57%B}}8M zq)IJm=Ln_dVdrG$q!GcOrluBhGU@aB_2SbF+an*ql6UogwaQwoZ@!Q^;L8Qcx#TM++PfK~cK)0?-xgjxny;&CG{2bpEHM9ha5nLv&ZVh72E(;F~i|sk$(}dn5A+;pp8|98pi# zNKPzB)h!GEbx;S=a}_c3R=fb5#m5xa1<8&WRfFckv;@TTUDwR|Emf!p8XeiilvDS(E#;fDpW;95`w>@2*&bNJX`~! zz*lDtB@20EOnEY;V)uW2OS5;2l#Ro6ZWfnB)#*PhOSW^1Sj}+PS=0#F1Y%(%F7fYd zdQ9O2|EJ7C`2{}#Bn)Y9+>lhR;w265f44)c$KeucCV$)U-P_wmkqL*_izu{%PsG2a{edemQR6?b^7r`=D~xBOVz zK9=Q}x*traOrmXIQ^Vt-B((q4CfemcOTf?}nsY?R5{KV;WX%!P?U^j!a@6DYXu;nk zC-Z){_J{qvVe{9&-4?ULC^1+{$^)^zqs?||CUD5?nkp!`>rAOyD8Uuo zl#NQ-SdLhp*6(~yrn*tkP~Hb1qK3}cHnOo+^>Hsoax|CQmpmF2xwKAl>|tWNn)BMl zzWm)-hAlv-$Qdy15vRn1p5c8E-dT1KV-fzHK82OFZq_mJSH|s?`9fTxj*&;_Qqz7H z+2U716|68y&sPLZ^S+lMaVjGGQBQy9LK-&nA8)t+FtAGt*7@mxs_IwCQA`zqc|(!m zdtq_5Om+Jzk#=jqWTSFaSun&jM)(H_1pWME#_r9od4|tRwbF*IqVit$MxjHnSC&aH6wonO}ArmSa++Pf9x#io=!BdwdnSMHlIve5!ZrenjT8L z<8H`^8;%%}_hs#a)vu(3g$@R0sT#LAkM5J41C1OdhrP1S0*K)KYgJ1%hH6>o+~c?cU5%MUJuFE(h4RZ$O?k~qIk z!RC^y(8O~mz0}h=ufgc$(JvI;;*DMWBThd@Ci-adZ}?4@@057@VOSv!?FL}2DNqf(S6zrNnPKs`#kxVnAhRW^7Ru8%(|}RpY#)DHH&^t z@~d+koO1VER6{fU{w%YR=;VG|$u;o(+QC@@NG;vTu>2XrFVI}=*(`{VD47LH@WwbIeu^qCo%b* zEag;eBlPRx!6Bc@09QBpNp7T^2s05eaxdDB^wNUm3?E5KM;^u4c{ic6CmlL5vf|~l zN5_Z1Dl8R6uaCM=x^-At&_*e2_xI|pD|meN+E861EZC4nMI~mEN~uLBuQpZuFrN2< zt%D(oyN8jO;WB2s?tCqUq2Q-PE4sE8Cxz3uhhe&W6ZaKJ+FgW>$2250-}YICbRxG! zgsd{Ko$W6a!#m~Ebdi`w;oT!z?sn;|jkD^GN7K-T!YEUXNQ7c+-POiw^-rTYfAG)TOG#&Kt@NwdC-3~Ipt6cT4 zT~fg%$0B&G5^mO;{3<*A7ttvEH?Ts^uTA1SI14L7x*;D{$D>a+BOp84qH|gegrD(Y zQ*9;jK5Mnl3L&oinC$7{!6$;qJLhhit?EI#^D%=Zq#V+K&a|{~%n&_6buvap`P{1X zAtLvv+L_1Kg4=d2fwRd>=QC8Q@ao)qPY;|RJt3ROe3c&x)6b4i-5E(Set{xEfx;D2Qh~Aauyh=Qdb;mEub8S3UOWy85=sRsmG{s}v25C(S? zyeozQuw+{z21$%NHAOf+mu$(^aM14WC=pG>|sa-e&rWD~`rwKBu2(e@s4t5Xiu}S3qE=5Vn25#J-v)ttYeiw6NNuO zS&gwioZJ7!oU5G=AJ<#X%)KWAa9>;7;y9?juJ@96kppMBc(_yg;o(hGP^bKUYxnjmU4 zOcn@fYn4as|8Cr^U9C***8DBejAiZi(?ussVo{rVg!5arDkoZdafz>yj9y~}9)x14 zfs-PzvTH$j`c;me<5pLkz>a+g`VHedT>_J}S&}oo-%e=oxBiUO^*Zggzhz8@f zYG?le{=mZ5>UW~>UL?H)kWGw;3_E87?G{fD&R5+28f9S1?Mn<^DtPN-hq|+(zic0F znuEJGmbNWT^-VzN2TP+op9quvO9ewU#%UHtA4c~W(VO~X4ptS932f=G$`Qzs_<$2O zx)am(D5b0c40&w4K~m=1DH+42B`Vp$vUOffIDRL`A7;Y-BN==SL4)0-+d%aLL&J~gwlig!J%d88fP+$U=T z!{7m|@Oq4uQqHV*AWAhHjyS>*w^M$Ksq!B}DkgXafsxHb}l#h06Eb718Tz zrJdxH4U8~Fj0A~clrK2{0q#;T90Pv{R;bDzTyj3nWl*S%DC_U?U(@u&foRRp~JFN!sQ=2eCTHj0>`OJ5H|bh za;jB(Wdv^pijnSWs)@j7tjzn?M<4MeMp z`4eFr-`xoi7ldH4L4tek7!fHkjF5}}@D|`-u`qNn{G1ZdJ0gdMIz+(P*5iGBMpRqcVz_?*P{{myW+s(7sBQc)a?H+ozYLLT0H(C*)Xrk7qBYw`(CCi zr7JTD(Bm$vEP+TdV+PQxWyXt?v&{eoKeh&t%+RPq@OS+q>)NT8kgbmeIFASTOwRz7 z(b$AzsI~xT8xjzy{R)lH_ulX9_*jrWtvcKE?57Lc;a0X2==z_MnHoe9Fbq%bvGVRw z^{e$XH=M@Z=1a77m+YtL-XKa}1dPY#NEeLefh@n_<)I5~J1NYG#>jcYqhIhNfQJ(B zNih0iYs|4Sx#jqW!IVZwcUjYc{Ko5$EWuJJ#FPk3wIMbn6la-_VE%a~nZ?S1SpiXGsGg634<6uv zQu-k#;s_bC{lze<&`))9(|rSxtd-CHFe`hD9c8uI?9`1;UK8fSiDgYw0NU7(qhrwL{+<5|{sSHy9MyE}<0> zj1fLb%6pi428(J^_Kw8WW&zVSd*C0`i+umN$$InEL9c&%w@W6Lh~Q4O#@SYJ8SB>N zZi}7G@wT{7`d$T}1I0pb%`+7$lXnMKlfPSTZvq@6g0~HvZ9IBp(fyg4-amKzo@+aG z)idb_9&chF03~^&0sW)E^O?ffYo~@72X*=c1i66L^&S~$`@Z^C5(gbb^5qmiikCsW zZMyl{cem*}nbiDYv!uXdN=0)0V}b z5Z2$F9MN3}>@)+mgAEr((-+EQjuK%s4`ukA=%uJkH}&85`&9D-1H>-wlXflFzc$~b z90E?!j!i7fBqOCK0G0Ap&~0k~Vuv^?g_+Zr6zfVkU5mVg_K^EVBshY<%4fAz_!fhC zWL3_t4hN~CMJ_h%!A#blT~GI7pY_`P0*Pd+Ef25_r%NnPQPWEs326emA_S0GSn+MM zk2mSl-CsmXd_lhi^hrm4imheO*MnXTs#&D#X{$115Z9ps4xxup$ zf4#uGMuDP$>7byyXE!W;AKUM8X1=}o@;6yJ7`5%3%|h>W)hDX8s+p>uUp@h<06zM)S90^Ul6yB-+_jcphV5`3? z%?<*3$ZoYWr8cBH#X|k&xl_MZq>6|uxt%*PCF(e>&|LhlSwJo)r$!=Hq($=9t~{Sp z)-`rrGb!XA<<4_xB-uR%!GT1d zQ6*kIJ{y^(R%kavs(m0uH-lHPmnQ8mKAacClxza7sW&Ju!O^0f`Wmq*M7H=% zNI_X%+Oz9O4Ec6Omxg}ZhBExOpHwvQevw0l9ba4yI|%uLKKkXRt$W* z+LI^I(6u+bbDY~9Fm_RT-&qh)`lux|9^5(h+4~|mxL#ndVucWtV z-|D2`H1SuuHc1e3f3Qs6?u@KKjVpRpF8n60rLK)8_Xd)jbuA>_h(#$hnZ9t%*J$Xu znb-f|7;uJ@ah?LRWv0V5Pyzo2HM4it#1!AZj<7eiR<}vu!LU3h?xD5Avl*OuSW(o+y^R)$t~HOvrLr zew-_xmNaM5gCvTTk6e%6S1BBjVZP(r>hq)oRJEO|!|D{ifp9jP zXkrRXm0K&?QWoZ11s47@KF%GfnIwg>buops5tjkVg6&R`W0}+{imQ{dxth-BF_m0E z3`$mS=c2!;t`74N5WcisGLN8V0i;ru24l0w$TN!3%~y{{RV_%ZN-BPp7e=uz|8fv0 zI}*`AV?2xh?nZxYsMvkzqtgW0Qrzg6Lp4ux(cTX7RT4JLnJMz=*I8OHUByM6MLozR z^t0HyjD|=soc>@SPp& z%{6+SzISu*zD3til_V)Add-@QagV}8j!uCbKXvQ_e@0Xb{8H+a8^f$j>5g?(|I4V4 zgd(VXgB30TO0rWqXfHh4{E&M!^u6Ia93`px;+h1Ob_31Q!aTNKW_HUj{2(TGWonso z8DJ6IO=ZbD;{pQKlb5RxDY1G>cYx$(H?=q@X;?@oBI2<1u#7}-eWH?6f;sb%&l`b< z6NYYvNlpX&Hll{Ek1t}OMKG>60nPbCNVXB1eW|29UgJh~B!Y7E>;h*NG5Xpf*wGov z5dsr1uqsP-{D3|p^K41Qgf9+k6$*)Eq84xP&g%%Zwt^o~ay)zS_9y}IW+nJ@DtveW zClMwuVHHiT@X}`OyssCT6r|GGDvrqBg?4~0#i^1Zd1s&`JDdCH0o zCN6;#@+2Ao&*w|Z4}z`Qn6b732^J?X)}gzjx7WLVHkK@(-sYA;dFGpzqmQ1BydX8x zBEjIiX8yEMUB|)oCMf50^}TVr4iq+@3T0cHm_A(LhShHL3rm#p{aS2VC9qRn3nsS1 zTT|`iDWxr6;2X4Ee;t?T{-{=H#3H-SO+dafMp9pZ@=})EAvmNl$b{g$F0E1^Z@Gam zX`Sj5ZjJlnT1GVoIr85^S760djy3O%_I;$SVke025ZHm=A9A!WlUyBk&6nh1pJJo- zoP&YcUhb;6taoaV0fy_Wfs7GfFZ{Sz`$mLbTie#`o3D>Qz5A1Fvl zTPo=eCUsBvEb~bhHOUIPSWATa*cR<>m$+3}9_w#f@}Vq8ZSU-V64ZoJd|cLqvhCPo z5nkjJm_`zoDxBzFc+@&P9Ys@4hWfmDvXbFSaO}H<6URp|I+zn{7>OaxR*F>dL~V-J zHxv+2F((zcRu!q3!DTTah@{=>@a@uUXtoI-otMg4Mg zie^gliZ;^)kp?_F)Fqc=#5_6CAp>rtjXV@iVuvqc$kquJ-ypJj{i`MS= zDmOg9giwrW<^P4vM_d3kUrZuvIo(k;f@pvY!P#Qg_~ES_ci-r zz!8QW{~vV6Lj-__ZApg0rbq2HngMRu1M;@+6^uHI5t^7s<0q6?{ z#0qMYz*EqnCQEUT(sLuL9O$SaAiygdWtVzHs`F_OaDJA@zT2Pb+5zIhiw3vGk2nWV zUzTs3!584a)`FrZ>b5+CMK-pll zsnD1Ypss;MT+8_yS)?1l_Mue+0xZ@*lg`^0d{kb%t?JAM0Q*I&n;16@d^4&y6$t#N z@DUpq6(7x)*%l^7l!#^0-NQI5`MmaF5j^%dUcV~B76mSURVlrz2T-6RH%|G1DyJ$9 z33a;rQutmkM@#&RFQ5lIr0*MQJ}7wC3gCtyxqU0V_Iu~6qT@D%8^XxhSdc!~%1X9cX++!_% zevSEz#8B>$XOHxRN^Ej{0L1UjHkcOyW(Xw@_BXl@%PlD?^)i6i-$m=yyur7t?+bhu z5HKP*=BW-cYLy}`&0E5+y~yUnWLAN(0V|B$@mb2o?ERE+x1MHW8w@21O&cfXkFJ6N zV!g~nk79%zVTObb#+;}Zx}s+bLFHrW3L!9Q-F6mO2*gS3n)chl%4N0K%+`RS^V~sN ztmAj#-V>Jr{`FumFbzuDTH9cVmvue2-Y{8$DNtu>3kRxWbOsOrqWstcs}g*`SiEoT zNBF#5+SpE{p@=^qeEJ;I5AZ4-Fi;KI^ura}6RQXCwu7ati9i`J5wwMcv$PTe%Hy@G zX2Yc#TD@$RGXU^+G;EiWt)+X}F7u3QY9y<7jXhBBavoEY#ZIwn_DI1UwE@))Wpd74 zf8cnX6d}3s9?A`qYB)Dv3r?BEB}msb!{{8|W4UHail#uumyGaX6s}2Jdxyuh9uovF z0hu8;X;F~2MYl`1*x!J9uWf|pC_f$7zW{hPeUPAXRMTseKGe!}>q#ZvR2l+I!^$6=_#`b=bW;v>sWfaHmQA9#SCUL^Q2SP;gZ8m@Yi zW>|Za!vfGxZ{i29m-`+M(xyoD96Vy5=-VbvnAESPq_>FtEiM<_r(A6^?Gi&=LL1x+ zqI3gNs%8V2pfXbS`MrZuQ;hw*h28vOv)uKyzBTX#)nxBZJRTI%SiT`=>yZ=oDJblp zy{r#wCpCg;VLrH5z8{nauZQ!ZTDmujXJCl%1S}$2H+yN~_46Uk7zHJUdaD8T&QDM> zxWn_UE+rf~7E!wT`9;$72?ThI#ac)S?mwjDJ%Rz^@BYL-PgtW;?in)@q1z64f3HX1 z&s)V5H@XFu88+LwmRB~4Q8|#{osU36_+VT>4GYD|T8f=MrGsz7 z+U0#CcZh(z#tFvPd4`o*{fDnrm}Z48qC=S3rI0 z^N292mYy0DJ#MK5HlV~~wP~pfnB`@}<2ElQ`xk!KIzS&BB}O^k-vMS}URmtXtG?1p z$BOk{-_UQLGPp$6!++s@n1@yn3uu)tzc_vG9ve_tX&11=Le@ zP<#9`kR^0;FPlfh?t<+UWlIq7Y#&5t^F|3dl*^_*dR~ogUM%^774yBJs~(%O(q!0m zQLGl@kkO{@F^Y7v?pFn?BO@LPLE)tH^CRM7xJ}r8E!dAuQ_R&UvB>+``J%~Z>9cy= z{dD2(g`UiWM8Gk1Z6#=Pqpe%;85*lBuUAl0SEsc#B)4PxSB|RK>n8B6ADhjiV)o?Q zq)L*cPKg4o>{pVXkdJ+-V%DC!g@SCXcpFa85TFa^>51s4tQ3&U*L_+Ev&8T+tR!ay zB~`n=Wr$O=i7@UR0TKL{v-bt*Rkli?bnl6=PW@*bXuC^c_XO&@O792gIn8sj-gt-3 zj3>cfRFTRhuH^j}lyp-sXXM3%MWznQ_0=im?=2;=q6p<0`A!MA`&|2ueG~qMaj|2p zowWcTaN*%ACHZ;5H+%*A+s=-l9*?$ITgwKyQRKjW_)>hd_So8y%jucNF+(~F(eas= zh>yz*R!Fu^>6<7O?S~)qta-w&f#;@Ru1^`lCxTqE)S7|d7s#Cq=yx`wF>gul9yA!+ z`ty7f`1g9&9G3g}IE|ydFL&yoothYAPhP3!ot;ISb*2$HTsT2o#F~afUNNCZvNsfF z;5cyN@<}X)aoI133C09jc}qN9?@xaDfhm0E9YyM|x9)^EFp7NVlD|~g_n}^!DMi~Y z5)~2>>i42R4yk*K4czZjiTR*<_qphPwg7yGmw@F&oeBbpQN5=&eqdk2-nZbCTIG+(gL@!EK3 zR0i4U+(6>XAD^qXr!@|5Z}D>rew4>;hwyrOKj5}o=gZL7f53b3O1!)+el>rV3p;$O+A$nFgJdLL9A@%`v5K)Wm_2n;CSpm_Kj?RDS^q7Vy(fWgLn zPDM=R<`QB@CexmxH$JC7Cr~b4g`UzX&1aKjXJ#FJ&i+QQNwfGM^NE08?Ou$^CuuoW zyB61wcb=-Px~6ZS^4wYnp1egvTC2+#d_DP?K0G4((-5!2LsW#psxJoGKGboF+;Wcn zI>tW74Y>Lqt6DY+MwI;`-HklDa_Y3g6$8>PJ0I7*@*MKRQc5bJ+S zT-&cUr1zd8vCcW?V*R`lTT2tP8aPWrLNd}W$cmR3$6dc?Mxf-g$@u8krBXq%c9io& zA!(YDxy-rQDAkB1?~*igxGokEfs&9{2-QxTevH^cl|I5=UNWj209Lz?(Nx zX|gv18qQ)4w)9cG4=mzgq zos4A-KY4C`LA_f^!fp0!!SJ2~`+Tgq4sjNo>|xU<1o@V$Plc=~@+E}Aod{~0gV~3= zI(X@0*PAVj?CZq`OufaV=c_-1wi4v(S!gv>glnYDYsh-Mw9CIju*KmI?n6G`E6wp? zFwoBF)|&24xWSGkOcb>{DHPTy=YfVSx9GbSx9bafUy8l~8b>=RQqXNlWrqa?`; z?b^irar#I^sTHnE>BDM#(nj)@eU*>~5-Tbj_q~E%v+oZBEd(x}PmUBKDq&c$aENkeYIC&gv_9ammUF! zqP$=I)LVL$XWfk)mAvUq^{LCDB7;JQlaa|JC8U$8L+*7lkJ^u4H)AK>ynYnTnP@x0 zrZDJ?p<%M=<`mz_5LLj3gd8OjUIXu7B}uArfvoWmh*8Fwem_Bo^u7C@dN1p`@pFi2 zkdLzJ?~g#_5)}ebwd)s;2TpBE9VR`oVtm~Rlkcl>w}i}?z>qZan3K5N9gc& z4`(k9$JvlGvRVVVNNym{%|4oz&Ba#pRh?J6m#{sx%VMhFtV47HW~x(|Xeyb5*cTlxE%1tjHzYuNa>}jvG4iB2})%0f*+BMGcK1}7F84W9pJH^+2 zWuHo%ijxCntavq36&v?w|X7I2VaRyOb;E z#5T*3*Cn6$@*jEZoL-FR=nk(~+snvIkGfS_v*rZ)ac1=a^kExJB5gz8Y<%iWL(ci- zrddhw(fj?f3m=8|Gh`CJ<}iB|er8w|OTy%mxmEOKXG-iemwZN^JF)BWh5d^M(_Vv~cXiCl7KgU(q8 zd)nvb>Nj6@)^a&(Ccv=}Y_v3mJl4l9qPLUx)?r-IFw{6;>6P*+j8gU`DWe?p>Se1S zl{)vyXli>RTK7X_hOpT#%?J5Imga3=qePEwgLU(5@hKOTTTY|g8<-~fs^(}#b4 z4=z9YtTG92|Inl=tc{V?>S638*ZhDz(@D z3JpTiKTt}BTDzM!wq!K38a-}rs4RIoR>!e2oYr@K4d;v5G5@t^JC}dG-2nTT*{mSz z6X1aC9t}AXWB4jYW)wuX&Fdw*i`J(MQTpI$Y2x6z5xhg+m>@RBBR}_JD-N< za0A^H5YwwNO4m^PO*&Ob-pk>SRzCTOUkjA%(6i!q*!TMf-{F#S=PsUYzP@@p4%i~7 zXdG4tObPVuvjWUO^~77kQ^1sT<%ah5%uNj9nr*>MfT#S6Fp)!+ap8=YQxjyLv`4kYX1=P`{L60y%&9n?N zGo{0N^hg(htw8l`kUIu!&nJZAKhKxt-yC5O;rdd3$auZO9DpqUSidweiM!v)O$f<+-P7Q}3K z{&C};wr<A}u_d?IMd;tb!U$Ad{kG-0Jt|b(~xuKv4-5*@U-j6&36MeAYc^ z(%1?G*&Y?}b_Hp!7_jI9nF3g67B_NYPF~s6dMJWaAD?25D3jI`;1qPiUj~s{21_7k{e#aNWcw{}rH3O4y83;Mpq7 z@pQC-F{ha-_^;#&`V8HEjLf)aCIU}2RbT?oSSJdlVnaWyVn7yK}a}5`egbm^CU>< z9$1Bv30lQMVICP*+oF&8mHZc=*|eM_IY@>ezh@EnEaZKEKj?f3_!#t+&mfT|>AOz{ zHZK-H==QLbnhvU)J=Dv$9KNV%@~wIAjUJ%jkdpw{1g_xwoA=#ERf8g!)%Q_WzN;kV zyxn`e5B8W+C9dIUD!(hP?-31oF~Ee>vsWN`{hg2SH0tpHC(4;bYw{+duS812!t2;Qf|4kTC!94{#LJ(%eo`{TK92p03sj+H`iNN?l;d0P|N zD$?vRe0+Lmfbq0i{Q5>-g5VTTgw=b6&n7>Er?s9q;~;L2&t1>mo4L*@R}{$IaeLWm zfDV`#k;arvVFWCfjZH--vBCf_%IMedxlcQgQ(JA9wfGVcr`@u~1mOsL8|Y-%*VmM{ z1QwJukZm&CzHE|~`+X)0=c|n-%(KyZ3P@|ESXJ}&*a@ELx20Z*k2ftcdPQ&caakVW zjQBE7!RT#b;)Dl+_Y?ASt(DCVqcK8&MJ86R>a z-klNW9>Q?u&fAa3OE7PcYZNkK_>fKS6R~8iuQX5hVwm0luNBW%co9YJ@3io}-+-Gd zJ;f15m&2f)NfD9I}#P4 zH*xt3;Fh8TLH7Onmv6oSCqD&1@1h1i6@A>jQE!7Q@h=bq;~2ED-7nOKJfpuH5tgDR zVwdphYQj``nxXqZNnosxNSaROZuRcJ5;(kuE+NW|?Gdb+{;KH4*=L%Jt$=bKFIP4_ zK#x?}BF4@O^TyBTj4;bjeu=^O_*u2$*7@ zhx6NL0?I&E;R0^Ee}5v=d*&sfq$MEMd%a!k2%9N-1BCw$qRv+i=s8i`^6r4rJBY2} zmlcgjjI)Qi+km&IK`H5vM>vxg*dpJ3_QWDabJ`NRHUjy9u6>OpJ#*c7{Xd9f3fzg% zn@+(HuHY4r{_+NdRZEZH&$U$C7gGh+Jqt|lFW73v)bllo^zcZmE0pV7I;%&Ot#)T7 zfw`@u)CS{MJEC?hwXTe+y8tt;@X=eS1F!}qXLJGX6T)IPa(;2FlyT@&BK+(TqA)R| z_QHZr1=wB;8mj%?q{M9;}h*hm}HtTBS4_iM-=4=hY-|D+NWm@pLXED_;n>S&&cesJUw|wfVu5v^h%&L9Mscy6CLn+u z8AF`(0=QAEebHQL4slsfS>&30k{4zrPg%ZUM=?}1OLc1+2ot6$#=Rm1T8#Nt-gCv9$TZ(yGpwH=b#Py5vXeZ6KSvwjU8jV%-5Sof@!;+-g5}=rl7H z{PS$cBV8==Ov_`JPH6Y7V3o3BN`dq@Cxf|f8g#n^&%%+jP4C_XfcvVc${&}5jrqYV z($^I@QGm30g!SW$oB9TUNs#d@Z1mwi>9;1^CZBikQ4H4rOFxwhcR^yo#K1W=_dj|f zmpkuzg`K*x-J{MEO?Bw3l=`yebvXM*i$#DborW|8J`sN@rp-%zx}UB|_yaX&{D2Ak zP3HbS#2~LIF>(+q$^y~FEh9SH8)oOj)A3AlTywB5?DQnk>D2YPZu*nAKct0J-hTPS zIf0ur<(V6p6R3KO+$&f8p}rr)169&F8P72z58C;=;eL%WP4O`jB%NIw;!fF*9OU*B zhjb~e0taiDu*IRgxps^R@^?ZMURH8w`m^V61i?SYR@# zp}3d^rJ=YU^iKc9r5}o7!u@ox(RN=~3zohC(@EzffRbwWS-q&>ZybDN0s>{vy-v09 zJ5{(2rW+fS#&6w;zQV8oozmMu^XcDkdjlKE{ry{_h&lT_P1(C+ZAk9(v9R+3{(Bx9 zOp{Jz$@9F^esN*`aa3b+Ev3JKx+f;+gD(NJs=|!Ov=r{DgB<{zY|k*H%RcKD-Mtp!NEHE?qCbGPdD>{Q-L>~A(#7d62TZGH z`=`}=a>DaNPZlC`itZqf-9ymey5~&ecN#l5g^5V`Y^l)luE7Q{Et^e8{`gKpr-Yf; zahv&y?f}pcF>H)_6V!$86mnEpmO~InbP@euh5Snh7^6AIJWZ9m`nAFO{{MYdOvG?Y z4GOe&Kw31K=+$1(Doj!f1HMl|rfr}^V5E|9X3`DQl2-$*e&`&@vPOSnqRe>xelCGj zCMH^SZpaIm8`r7->3bh#flb;DSn6*WEbYAyWb-cq?HfaIx5HL%@l5z);dpigMNsK%< z=_1u?W>2c$1P*{A%fZGF3|?I@;ywp#rpQmP<~M;!w`=LA`|_K`lBxj=kcsbLaW#NZ z(o^v0n2~uKGzl|C=-`=b=fKF*I*~3mKMe$b)yi z%Hf9&;F<%$7fYY=R`)M3LpLXAKD|dp)lb)%5U}BLT>)&51BCnZka2}k`k;B7q8}_A zF){;cytbYlVYqc0F!7cQ@dhZg{1W#-W-Qh=CJ2um#F97XTUz#|Dj4J5$vpVJ1lgq7 z0r8t5@z3@T<8C9!TB~u&UOh|&!2tEJ!UFis(U41N=niQ6VmFl^7Ou#d31qsNK#UBS zwNLC90#JEoY2&YD@)&Pl9;clg&14Haou=>H_CnGhk!XX$atk_=Orw(-iKu`ZRoC)k zUOVVo%b;!~LPZnA9hk;r#x~B^8 zQNR*eR1UnrE!%4*jL3{URuk+2g-^HMJ3{-8TTp8oh_$~vidKnhY{0t?aA4Z>K{Bu{ zbbxWh&rfsJFDAP(>3%}8)bpNV<%-OvdiWRXe-!G~ua;g#dOi$kR$3yt(gBko8=wOc zM)4ABLeu4`~uLuP)V->4K2D+*J7XbbQJ_$>o^A_(`7t9lne;lP|T&7gXgx-tz zm9Y5TZJ{;b`z8=C*G2LivDhGOurZ{ONx zfgh_RD!IKs7yT8;2$mnI)X=omqSP%4#Ugz{wbc`kGI0$u|7#D3bxi`w!TSr4(iaL3 zftP(GpV9*r=&mVD`MJm2vQ0%k>#!F-z*EX7cBeUXk%ot?0b5GlwgBJ)$c(2!maZG^ z`1j?YaWkN>V=8v9pa+TW%z()LAP{qKH9^{}#2Dn5e9rR%55*hgdD7{QKQI|MPpo49 zyvrc!`m)sxj_D#jeqWqFdtQ*L`TddXMb`VlcuoDJ?1$KkUt0k9i(Rnx1@rY68oB8C z3Za7RbknX`tX`Y4p4T(=c)vNH0#=USdN6lHJBk%u?1bH)+=JTX#YZX!Th+HWmkje> zrF4lSAXUD+-z}iYBu%@$=WIRUlaugUu_xPgsb5p%*?c{wtGz%bOj##~M2gc?5YTY5 z{)6vuWp)56{wUoNtWQqMHqBgIqHX|Ct`*EM?(;elZx?Vpg&?-PEn)-De4>c*C-6!G z?ow&v=xN~8F^J@?(@(W4{Rv`GVsr3JRe9e4C%^t|lb^$be4f8=MW}6Bm~|R%vO6~h zxb*3KjPc2AJq5o9P~;8x9qfzJz@D$Ia;9pI6b<8B-&8IWR#0?|(}^(6d@g)8mVGae z7}Z127eFTA9<-U0y*)+n*}PGtJW9FIx4{A!Z`Xm!UU?&R%LkNRt0TQ6>E76JCjE+E ze9U10aq3Y~3*oSbxI_m9<%RbcK*$j`oL0uwviuJJ59;1BEQ_{n8&$fbr9-+~0ci2AJryl>y<+1~Bj*01$rt-qt!#mrnY=Xo4^9Sx%O z7FV!S5Gz>4$=YzDj2d)r7{+3i4BTyLbDYHAizx(A42Q&eu*&E;nkl z3--dF)PB!$E#&$JB&?94I?b;-S=}@iRWFBvdqk(rJLP?Id+i0V^`DoeUhVm;QVnOg zYZ*=pUlS6l0`?!D=RqoulH_^(Y?`S{e|DuLgwSkL6fLB(*rSrJ!riv=(6G!z<%bQ1= z9KeeWx_F!Mw(k+LBZTy%83}7Y{A7cRI7k5s(xP2*P$Nn^yBCz&0n9l1+tC3`wq4O0 zd4~9{s!EmGH9Cr3Wibc+s1p`BZvCeb$@W+jgjP-;Bf)^4e<)+wb88KH`h|d6SMm^b zocGr5hNp{fQwF;f)Yt4Fufp9pY{(t2W50LM0lUwKI{-8N;#gp~ko@+M)YRozQKXs) zu4r6q72!U2Z0fy&(w)nB8Xyv8l-1`pVO7E+x1QlP7UE8XIOaCZa;AcTYh~~Be_s1{Lx92d)Y61e}l*NZh<=u(>l;$ zqdUWOn}O?>;hs}hH`pvH%TpPBj@hA3j*p|5(f;Rcx({H2Byvs{L z-t2Ty7pJW!f)Mmxb0XZ|k2J=X9?uY5pd1ji5uvgKZ~!Y6VkNAju~&2IyZly$CNjM= z^W%1;Qpow%EI_?uq8-?D{!HPwPTm98(8Xdnw|0&Fr@c*#~wzOZ=mV^`CO3 z6hCkD7BL-L!9Kr0!B5rD>DeZ+LzJ@^!-R`p70V?!wF{?XoYtX2u<~+`fu%sYI zgF9~GJ0rP9=9mz1EP2LpAwe&le65!ikkQoi7Eb{+e&@Rt*yW9xvhUOBrJTu08d}fQ zTAil?7v3L@Rs?zJ3h_-fz`5p%V%?%z^w4eo+z%ceu`SUy%L=e?(N7Y6@qBjC_9o2a zXUXa(+38R;TofyL^L)|eBXrbN5MWT6`$d3M!tQe#)71t~qlq?0J##EVdO>Nwjcc2M z<&faH90HrdSUO86+*-*eT6tsDK|=t(l|AJpTn_)4BdSsi_UDZ`r|q@4A}7hSuvgiEd|ankFWn@*sZ%)DHAaj)-fEYl zt!{fsA|BZ1q>XY=O4V_W>6Nb&+LQW>2L_mL10Kk79;%xZz?RXsK85Xj5!RoNw^ii@ z5~JdFB}^II6yW;!Z|6|AoEwK^zn#sySqn4I9@&fNIvjUSNE($zrjt{ zpeMU>jyXQLU%0=UavpbMh~0qg<889qU*TO2rV95Vc3dV92-Go-f5KjJg>X&<1#c^{7kF)uibW8*iUn1!-4`Ip2$3Sm+Y z^*5)>J9l4`P^zy#-ra(Axx`KT+(4gI$g3~W0Th)a*+xc6C&Tm^t!SJN8;R)n!lt($ zIhVn-Al}HGV4=T3j`Y;bOPmD)Fsk;RbP-#_3iO2r*IkBQ;r&Jxwqgsx-pI?rB79a})NCrG3x?*CVwWXbaEZtf{vs1O=c4noYWK`RI>AU#=h|3_*D~M z>V-?I3NMO^{W1|nA~6CR1=KOa$dZ<|iuixUgcGrJ3B783gcqfwQ8hmq)?q zNj@#(`SDV1-YToaBF>M=+D%b<^;p}nXA0Sibx!W0H{-12Zf0}co6ITKA`9qyY;dJ*k2Z*xMq)>*)!L;jw4X1np9ZR2ANzax{f);RbwY~u=GL!o zW5k!PR&!}Q2{RbgVNlvoa7hu{^zN^w7JDDu?hbj~l{F{;36Cbz{Ykzs&6o*2Y7R>b z6j-$b=vs=RQly=PihTO}`fK@yMwMcgEj~#)Q{tN%bUCfO+%NK5yp8uk!Z$6$Tq8@}6F3+%~$@Ogpmpcq+l(FHjp!#m{`tJ+vQu&9WbCvxGYEyMj=)&p(BSN27nL zh``xh(Xd8;ST^O9K$GM2@cN0n57A{BX1aTlM!TveUdGiTVk?fLDY8QO?B>d77x(VF z903FuU7|po*9{4xYimKq@bfuA<_#$Z8V8x_y!!?Y&HH&u<_ZfG*6z}q7@GAr14Z=a z^o6sVOMc3~q{tV|6Mu_je5EAaf>rCKU{&#RH@%3AJM|diiHZuUFzq9@!)kO>dwzH; z`Ec1yx42k2@H#T*@mT5E>YASY0>yo4J(9KfqSE@zCyo4U_a7+O8E$kQ+)>tK_h;@4 zq1&0qmvGBR^WrUiQPE!UZaBATZpwYy^pG9dn>I@0c`~<7Ivhs>M@G6j(kOw;yQLVq zS&^egXS6`~0;J=`i2eZliCh`2)8*y9W>smdn9`G3_B_CHl+x!K%sM+WXnr1jETH&l znX_G{SS#;tcZ)w~rBml^fMK)oqNS>hkY$v84u&cV#y7=iV|un?P9c}W-)Vi<=u@&Q zOF{!7r{6Z8&AQW-XqLWW!cLdeaue{1>Z{yr6w}nw_2;2HbzYtLO0ReIzM-nir0@Oy z`S&mAd06N$|RT=mT9Y|s>zM%xi+H)0Y{z5)Z5S&m~obitBUpPU~ z7lM3j300B*!U=N_oUr#hfBN4n0FfxjfFSuAK~3~8cESTeIoDTT&;Fhi6;kw`4+u+$J;7ZAnA30yATTK5y&LHr|_A&{55L9)G55ZlIh# z09It6l>V8O)WO6C-R4aki10kfa9*E6yCmFjZE~NQ(;)0v0WI^7jN-k5+UCHF&!^-~ z1?Oce1BRiZe^k`w>rl)i#MfOX?QuVRB|u+r50X6EAfNL*uq-oK0#cz;4{dE@>kno8 z1m<4B`}%Dk1MX8VU=u(E!1R022g3K4-``73?-@**5cv;5$$lj=IcueTtf+Et{@Ck5 zizkaf7A3~3LY1>%_BjG(pU=7&XsYpmL0-M&N(c~Jl|yWwYfBU^KyPmT|3s`h0oNPN zlFgEND&2XS<1_;xYMAjlhZ=xYVnn+BMEr0qQ`$z&fZt9mhD1WMjR zPkUzU1B`T*tyoAmPeg$5c)cg=Eg(9cN%(Gk1Zk7ZI{>p-0_>`MHrJz;MPB`8ZySJ@ z{Csc=?DlX7Spfd&L}0*0?pF_A8hrI^LX~@Cs5zX|8{2*<06#Frs=mMy~TcO|s6_Rmt z0FTI*>X-m!gBK{iWd?77bC+k$8wW%QI?i#k8{2`r$7%Z!$Y(o=w;g3z3X(Sip#2J{ z)KTN{UGOHznI4_S{{tiA;;_qFpTK?;hZ)hx{4d6HQ~SRdPoCu8ECP(!j#l96iaPRd zsBZw?Q*!Vpogn%S?AUUxVUEk0W?R_-S+8O(tL7?!vL=jXV_D?QjQ!ZFU1y*vEB+3y zQCgFPm*pSI6B5W*e2E2E*fEc9m)N7AvvFq0^i1R7UXC%Fj#hN6+Prpmb`^va$4%^RKz35xgjxFo| zy>hy@kVccO*Z((46X=3Q3uPgiyEmIj4qAG(p^z3|SugOrPscv=!?3#@DOJQg_R9AN zkb-zj*fDqa+Dasg!d?sU3jn5c6Iq1{z+nt4K? z{rteZQ=ZTh6}{Nu1M|tY5i*)O^QH^CvXiJ0DOUp+Nk283du$X{)@vR zBm}blZ6qcpO>@kRs{v_jy54e8Un3eBBv`Yg#kV1uyzJE+152<^{YV_BEYch%&0`+P zhuF?9;3B4XhHS7IE$6Cr13ub%mr5`G{iKSG^S$Van3;V?rM=f27(OP)-rzE zp4{hh%NE)aqjJ*tafL)K&NUV*z4(3DCJ-uxy)K^*1S{`9L|!QMlwBBG@&c5QB|_q6 zSMPOC^s1QKXD`_Z&c0QE8Wk_`CgVLf&NDXy$yk|eKoq88A}mr~DKk-ds^@+fphe`& z`4VCp-TY`3zV@HiF{HE4Kj{g=f58DCO((~rPuhIRcI`{=C3A)^wU&Esmv|F0WG(AF z=Um(h79N5;@G5f`KkVZ3jSIjxRJuo|OJ$c{xxAcQXqIl=n_4vZ#iH=L{Sg0!aa&kq znOsQMHM!ZCIL<5FmxRW#+|n*8bWIs8eHE!ZjSQM0X0nwxjF!#Mb-DNV4%q)u;P7BC-t`Jr71)r|y>SnIKX9%X`%vt;6snAfI@W;= zZn!IY0GhVd)wzA6M0Bva&*~ct&-tnx;{y;r2QG$h=fne^_3qjkbd}YU|n@FJz)eK1lrJlrxXhHzHtZ z;{z~pPh;e`pfJ-yWb}8{L%ZpJm^=SW28`3caZ6^lFawE4!;DdQ`{MtdOpP0AqNqyt zxA9(C}0C;u%v2cU|Q5H~L9Uuv?P7Zj8% z^AE@WCV877fCB@WUj+WvtsQ_XG&@AkT>o2?ase*Q3_)V;zXG&TB*L5?Jo}r$mJB&b zx#$@&{;g}lwJ6hT*Ta6f{CnPL;J|++Y>R|Jwed2k$iUx-H4}&*MGNf}`?v1ZP6g}l z{|f2;|HG}|lUanann0qNjMCQMAE^Ub?)h3QbW1S)b4zexN)?~Nf9Cvaww;7n+=}8R z?Z3a=D~RP}Ac*^$v|rBc^YHu68z8Zu1eF}dBnV;p$5e|P_`giGCy!w&v{_DmPZi51 zkHr}~Nc*V2ZSb>BRrJ4szPnmc)1R} z?FhJNvB5xmB?JP;aU2jQ0gK2BZ4#u7$)L`2QC(^hr6 ztw4E71_cz`b5!1g_^UvuxRwLXPlIIhJSZQ^<^p6dNd`NCiZ&5D9{r1k6<^W5hGk0r zx7u7Qv`UCs%u(z6K2^z?r#mHJ;twf;JF#;og#lQTPjd}4j(mcKMqfNZoD>QKL|o{wDLu!MFLEyE&;&S zcYjt%`}Pk$)_85;w-1WBMC7lI!4gZLKSCA@MEk?4eyV==M~W*e+d!9Wmdy_AA#^T+ zK;5_mlpz%>(6+Y&>UL=Yenc{7eUTr0pi_{`qD;L3ep>u6z=)nF9oYjSs7ku)g;ouf z_}#AfMCIc(l~ebL4}H_>QRakP+Yv{hqm^LKqa7dsy0l%pM>U>u9TX>hoP>aNWKOhi zPqQfP>CM*BEW5I<%`9-2)`?Q#yFc-C>y^ph-@YAOd@~tX+NcvRZ$POSAOf(B(vQyX zNO^7aKez%o7Zpek#R&wQZGHmUFUIGn;9C*r@iD|L;sH|Hn_(p2g)`K0VO)1Z(Yhw! zmWsGD!+^c_nEM}HOFVGU~LeyX)r7fhCVaD$Uc}s+#r-&~B|3tIpo?rMn zDrOF^A|k&4(DqOJLCRaF4QMQ^R5S|d1qRyC0}~s@6!tX}O3rN3kc2lg{ibo#G*}f* zQ!FdB^lP6m8Cx9(tiyd!Ph*KPCXB-^CRGDti?tSYDik?l4R%jAxd6R~OKB?`<(H z?O5GF3&l1L`I5CyTE4sivWJSz1Vv&#`!5nY#&K%z010Wc`^Q{si?#d)NcbusUD_YR z@~9;FBh;`^8J4RL4tDXA0NbsnessgNPQ_DNx^x{FMf2k0ba?Um{_b2QMG;Jn* zsNg?C=F_`FTD9X_C=fh^_%SsqlpGghXKPboH?NM7X?3v49CEx6e-E??ntq7J61kKN zkt^WZt6tt>@b9prZcJCV`wS0CNMz%&a8!JGG7ZHz?JK?f*-2d35z^a(WFSG8YJ@dr zUrT9Xo8D9jvh^pIpGrbnP#HS&Y0rr}S;5V*lM$#j>O4nSAE`BV2#tTrAK42ct|}%m zkfUIY4bq6$blShNulRbKaTH4A@*;mf_sF?Bsrd4f`gRQlb zt^uiY=>c%gO(;xc6HX82#-YL7n#77*EDx3#v=z!(?Xc4O9E7RBI)>hY@TgyY?`K~> z4{AT}o$*Yqlx}^a#i&9bELUHRO)srsoliDqe?@76<~p8+fkNr0QkMJfUgAZz(AHh# zhn90hU=sdKnDO!Z9-5=^DAEF@yz%9F0MI1Zr@Ah5neCRIaRpNe*km?)ozFQr_Mf8* zjVSAPsR7Nxt?xC)r9=~cUsMoIZ`j~Si0DIpYHii`K(QLvvGFiBdOwV&|0YbmOWR(c zij(sNp9KfZfFiwXE(W}bja)m@_3y$m`Nqp!pRz!d(?zY}8DNzF2uSAa(oEjA`=M0{vENRU(6FDc!`{B{^cy z<6In6HQlnv0VkjVSd7f6UBqk)&h&WvxLDR(dowO__JS-cPxgV7k+t1tB(JN!sVW2) zqu^j5Z+Fu+Zl9{JC+X}&?S&Fn#d4CiEUIwmI9e7noayU4;w0tJUadWB$M}|)VW#?g zaQW{O7#HwIq4+-^PYNs_6HGG~a+LMlm9dX5rV9Y5$(6JH6pjZ+{87uQH-dw|D|yhn z#m7ZmU57nkpde%~mNyq$2 z+f2wIRPih5`OSrDyqh0QDL>URMq6{xBF;$CDAL%=KGToQricMB@aO4nd*)Bg#SXy* zyDLJ>A$1J`kYKrfT_(-=!t&~A(sU)=?faqgXf?(8gw2=>Ef=r1vR-eIUAf>kenG)e zuK|>~j_Uu}I!SZ~1Lt-AnY&)Hk|`*b&0!iwMX@$`2RL7d0cOw!r>n&r3bxO65%`gS z%%edu2_Iwmp9; zPYOS|1JaI9@C1|9#ZrZqn9cne zWZplf5W3CeLRe$GbppDa%6DZ~UzGxZXg2&b4zSSQWMcTA6|vzIU3t9iVZngaq{bpc zvN3#Hp>k#Hy!+LC{?^ys#=C=p|Ef^4(ipE`6UWHb=EBi@|GZ=DJrfKm#W2%jlssNO z&VgveaAMwldit164NPYRI0b}4&?@shXa#;u?|c-w204sst#oq)+_;l>D6+A~){xJk zY$SRt7O#I$uE+WLFY5Yo6q+UAne0ZWc-{${nw#z1W~yf|{>FtIQDH_?`3uwh0hG(| zeQ-SE10Uzwi(ey`{E!9}Z*5$EisWGp|kc+v3V+*=?Ivr_S5-nSG7&w|{xT+k1T zM4w1H+y3i9&ZVu{fZx3ph5$>U*kY1U4zT9NC?c0(J52)1X<186m%E12RU)3*>b2CZ zv+$!azCsI8cLv^X#+ng7pgjDzPePrUkrRQ4IJoF=G>JAdzOoCU%pLYQS)wYGijC`5r*z}xLfm7T<8cK_m|eVb;t zNvm^g0*!XY4sl_{M^a@b6F-L+)RVA^=g&KiWvtCHEJH$-ugcGKK8kRqa=NWCMn&rW z7FhG43EZO5kuVl#^79Dsh!f`{gMHwah+#(7`G~u*y1R9I&P?D{>UFWL&u?In+;iA7 zPpQbgxyYG~-C4fIvG`@-#%Xja;=ZJ@C88G3HWjKyZYxy3_vDq3^Dhl0_ugKsr{Tuh z^n7TTr$x_QMyCi4G+A{drpLT`G9F{Fzg6=N!*Cx@XdE>YwqVoK2rgY}&A9*RNrTIZ@Ej0uo`<2JnDfJfCaQbv~m5|1_q3Wv{ zlYkq*)0dl_gbtt2$skG@E}OOunyf8o{ho6F@k;b{qBcNwt= zoL+A6coGP6~%IbZKOvtXy8JjG_q!-PkA`ArpC%2IArW0}?MmStx%%)G6 zeTIa7FB|d0a5Qp|!*nq*@+)gq8~$PV{^mDh-EVJb<`@kwKa%B>xQ5-h5$>oRG{osC z94*-^r*l}v^B-echL9rA6_-RvVapL{BJzLC$=C~MF7Xu+_UCPrF;GRPcmn6|jfn{( znt6_OP*BXe;LfN6gHGHmVw5^}xSvIjn%s)~@b7=RL<-L8?s_RCDuRUc=b(r*T)Sc{ zoJ`9<-vJK$xPv3BMpWc~KO>q+4P!_z1Cy)&pHB&aBS$}?qoBY0=c^R4A9CQ*_$agg z&!?V{gCmzeyCwhqOWv6DAtI8E3}w{ZbH0b@?79g|+k`Onp)+3J+G(0{Hk+!jyzbI? zkhdee1=}=#1VGo+5FyefO@9H$odJ8UcT}dJlP|oMHub=r`U7}zhY!jz}ZxW%<5d)<{FgA z#xgzLw*n%=K2q|pjM>cfmsb!qxCO{3itAd+!^>&frg}DJyfq5pe{Q0gAPgy8)`KIU zDjpaB&9s#dJYLCAT#$*#xDc3DHf;^aqYn_nda&&{2h<>QkW2kUrhoE31ZYy|v6!2&J0V<@J$fKaz8{lav|Kffd zT@M2V38@!(FM+%)V_g^LV=de0f9^^-B6K;KzZ^mA_WK6VoEG+(`r_+Ya3E6o_$&fr z>XPHEt)vrBrM|5^0l1M7|IPrKYqA-_$q0=hLIEgijp*=*Xd&$Rxq z3nK-s2o%j3{J?@3(W3=K%(FmmzNXm@C1}n3XrsqG1Cd%bK!BI_i?qaZpO zbjk}jFbQxfK#+3{Xc^{42>}`~;Q>TV925PJMfG$Zz%?ZOgA_p|h8Ze%UBY)u-C^|@ zyo(Q}n!N5WxK^PUqtErj0GU~o@&X+?&kPnCYkram(Q#j!TlvV#_wOq{s_A+`Z-@{2 z3utwyubcxwk0G199Wc8J?Sbwq6o2^VaT5>w6Iev_@&({H+|&%;uh}5e(M0xLS^{=h zqpbYocZ^1?>{6+qU$o%J04X{B)<9eA0ML#qH_+a%z!PCmBVb}9w6<0^E5_zxdI34R z1G^COPOLeINw)#H%6?FeIw@KQFqf`DdQK;x2-W$;t|~!f3rw?o1fe2XtV_>b1OfQ8 z8x7e(SEY+*-KYr{Aw$lDYT7C-CB{DwB>^oardYJu9}-j*6@vS(0Vp-F0r<6kV|r|* zS9}k|9=0{h3%+7r#55Npa5=iY06^INdUu#6fiDu;2O}) zKbVveEF>ENN$Q4PkOnxsx%A7nOnWdq@6hgh3J~+QyaF&-ZW8jS7`z=AFZ7&%5sg#g zpOt6W2@6x~aG}zOrxBn-N&XLreZicyO66~q@ZO3EZVBt16b50XD?X)lT~n%A-C`5{OiTsTaB0rEx1LK00KqX^%czwxcqF4BA&(1 zC0vSq@@vmR$>R1^;scR=1>!22|K1jaKWFjsMVhzvGQjb;@l`QzKH-Mr##k*uLeGjB zkc7g?yQZtec5sKV!{{qRF{Dn#6b;;!LlgteNaelR8F6@4S^a&?W#NQx*8`Y7NTT?n z!1o|H5*s6Jp^cId@c#QAomj&09mPtj$GiefNM*NOGK_<`^O7=B*e=X|Ve=vfCK_TG zeP?3ol{as+QkXtcCb3m@%MK#QUjMAwq0Gd3_mfAYzRc&wB|}WXtmCmp`6e_SuMWJn zbD$e}*N?l#C=2xW(O=&}m|D!9ez)|m(BLX#$~3HhHWHBqNfGSO`$`Igpwwomrbk>~ z9w;ik1{lg7z-SyvX8bjspFf7N)%H8*v_ z(~l`=py7Zb7j<(TMW*(l*o6(vJXmcu^%0=wZqefOMVtz419&NZ$`^QJ@V<}|;7w-2 z{yd1#3rLjBNc!9caH(#pKBaDmJqxf7Yz{Ox5yl z4NwjTwr&=mH%TZD|J{km;hagm2|~}z6(+?0Rt~b5i?^?!uWIItck$mExG^3(+D3-&y{=a=zY@kvp*KjM~{#%%6`+}2STer6gKTddO^g0PWVY+HcbhW%HPlI20+*TPGREZf36+e zRqUT}U;lpQOcZ>rTSfjms=qg$2D+=rJH4uZKjTILzP4dnr2^~kjmL)0AI|ar8@EN@ zKYn$3Sq=&vJqIFGO@^1mmQQ&=&Os;56)@zJSW$%!M-R92ZoWi9V?q*FS_PAwrlRPdk;>HRc;x86D2l44wb?WSnE036bog7M!Iycq}QYXWf@C|>k*4el`H%E zmouku`JA@DTZ-jswG57qT*2-)3sh;Fx?m1Vq1oIl7=DZF1nL5NJGS2?pya8Ah*XOM z-A5XE*0iXxLFSxt)^q3OZwg|$-p_;BioRJO7+Op`2OH-QV-JIc1RUR|tOuV#6hI%O zaj^nHYV6&KQu@?@r$FZcd=NhYS|SqON7HndPH5Ic!0@O!G$*2!-BcC8{}Xv5N;SVcxcf;6;GI(Utsxg5L2FB`IEK=}9NCH7_;VDR#dT;X8!+iX)co z6fN6h_5qX`i>mZW*|;O)0XIPLHS&X>at>6G8$jjsUg=0#;z9lg!QH7-LGny|`wb2+?U)#Zb8p{06fCPgtP&TCfI% z)-wyOrR)15&qCg`A@-MOCE%{jIT}IR`wZy4WIHlJVf4p?+; zfyX6v1_Yq)Q~_e4!@*p2rUN<8>gY<2Q8Ty8_2Aot(-DfIg074CX`ma|L6O>CePa@S zaj`+NMpVI`)-hQDdMDdS4_$`pE9E7oC&NF`B#5Z&Eug%Boqpe1pp*F(X%7TcPFbH@ z*GjKb0rzClmHd|Sqg5do*?P7@_J`s^5pi~`glLacL`v6IsyxZ^FioyuJRJ)IPlNmv zjdU>dqy{t_+~Q%yP@xOSvPi=SN0E*K0YOTpa}x>VB~`5`Ox3U$0>cA9gS`h{!lz!m zH&AwlB`}S3>L(d3TZ0b61{ML$X2)Aoz!U(q{?=!^pkOr#C$bguK$6x4?^!j=xPA$U zwdo2U|1-}g8pZq3RE#{|*Rbv*Kp2Aj^va~ApnKrupU8cnbxEluvfEn3@XE#E^BaAk z9w;90S>ey;dH~9d7ymd~2&Un7nmxINnGtcZ#J?Gvs;`8_$1}e+WdO#%~sk2T;RZF4Ah&y*OI#7W} zVGiGI<8+|@P@$b!?tR2JP)bf7$uB#C5vROI$nDh_w+N|+lDR}SrtTcvG2=0gS$cs& za-LGU$DN|{Kcip0E`65lyf5KTD(Pt$aijlRdH)gj&nHKuRbe_;OK}>yA+%}squt+N zD4W8fZk~kRz*)B37-B;Kvm@XUu@G(*^{)e2A5=|0C7@)|j`M=Y$H(C^tCr6xn|?>s zd%QRSfu!P~v+)l21=dsMG(gxaw3^(yn2W7C_>BOgdHh=1*1F|OW{+ao@LLSN&CLF% z0%F)cvSnt#=22b>l!**jr|>#Ms+x|TOH~^UXVXlztIq=oqyAwO$xISB&|4gXP?WP(kE zJLJ*)9;w@acZocG^=ND3GzlyXLYS)RALOZlA<^rqaxhv!yK_fuOTYufrYub>4=PSAr`|lhr5=$NloDZ)#Z> z@Qr+Jdjxv9G_NBfB03hyv61cs&GBt0gr`qI=Miz#Dca5TTZWL3C))z9{)85)9vSbU zTyEK6*-0wvjj0d%)1O?G)h=7wHrtLYVR}?o z@_1s=%)=n_`|TRE7Y#grLwVD=OWNx9WR3IG%I`?`!)+PG4?p>9={pTVa}v`X89R zA019Vi5mTE4P<4KqpN%7n?;Zn(i)XV6OlM;ClN1n4hhiaTntp28PLV2f8yYdfZf!3 z=|u_lml9hm17h1D=R$cendq zbe~TyJfSv^F5Njhq@(JW39(AkYDJRX#j6U5yjXaYYD(60sPSgG4C3pO4NcYC=_jM! z!r%Md!q#rtehP@h52*yL7x8?e;raSwG5u8KWqS53%#N&zS^}TU<7y;xmv~6IC!vn= z94Kn)z&6Fn#hBld2YUOU0yx*pwS?VJB1UQH39(VZSq;*A3f-e*5)J9|((`nz51xLQ zi21shj`|=)Ho`1{(TD;!oMR=4$_YpwQ?z-ie^2wmxmv@UzfK}f#;$yzi)KE#3W@m) zrg7wXvyMsX37>tK#eHMOZqgsxy&S}fn?}wz3>ZH?Ce7kngUpb-j1D%;m=}p~zB*;a zo^&Q!`iomm>}O(Zb-*aS)(8tHR#p=1Jd)aBO>GyiVLC1N+yEQhNKGD=CgkWlNOLkl zUCvdSTc&QCv>OT`Zt|-4QOg~KWHJ}hLjbuXUs6}nP zdLJ_(l&kZ?HHDgqXkUcE6{8oZGTtt2G8rEpQ0^yB47R37t^NSCC|@tWe0Tr|&W`QC z+k#8M4ju^9ko+0KG;01hU`+qSw$p^`OS)qZqvWLKh1dQ5y)pbVp5o;48vf!}AEIQS5}y&VcM_%@$oTtHAhp>6x^bEg>ay~{eWbqf(-r9 zx3Smcc#ApJ7C;zgH*Yw@X>7V2!LowvYfAe8?@^@cAu6sTuMZ*e-s|YMHq3oGT>M_y zE%i{RFQ@a!@p-+?*WSp$6_uR6I{H@MV1NA{nglt#&qsn`kCl^4+eN#T)VxO9A{zof z7XumVw-k`fVDyrOO)&ECXb+<`2tK_;E?A=7u+4w4)qgb$?Z@ZCeCizuy?VHC36!rY z!x$?FRD{9yKODN>Enp(dkm7yFd2JjVur@4)Q6Uk0z#dSp^O4v1GznN-T5=fKEq!c# zLX6Hyf&-YO)}(OU$ctQ5F+3^07kI!0rUpzBUp^m4-fT7qC(w}=wM1@drBZFv9fA1X@fWjjO7q2T_R1GKnK5vmeTk?rCB55htyFo#AL4x=pbz%!tVX+K zZbzMR?etR0pnkJXJN~YIJo593PpcbAtKAXNIJI=us)xc1O%mRDMW-mA`@G%6U1CDy z>^=U&nc>UMEnb<7qX!QnDK6nFY4PTVyXDm`NL8vzJg3Yglk4Ao4$IgGr($d6Y0|%( zr4i}$^D2AmKVkX(Ahzqb9+xt`<55gBscj*h6`%3;z{mtuBroNz+IEtWho?_e^H(w$ z>jU^Q&Q+&MV_yfJNiC6AuXnhs&8lN;~$IQKCaWgHiqy1 z%|*htdSOs&u^M$Ma9E(POk+WBs&Lf}W&_N@+ifr9KE>M0Nuj=i@#y(R9y9o6@A%-! zM~(Ntie>#%gP7|Hi%E>v+9f}=GGJWsS!zBlYDpkpE0j2myw~0etO@@xyzeF>XqjMt z2i=W&y&a4CIgmfKJ`r=5C|~y`o&PLWl8Uz#ptG|l=6Cc-yVy09mim(I=MP%L3P)Xj zykAU^u-Oha9`lzM+?*KmbQv-V=LlTU2s`RkW+LN%?5Gm)M4q?gy1+q(mW?gE+BLf> z|NGH26Vp&3cP~nUV;kAS33a?^lQ{cmW(s6YpmHqx)Mx*BU^FnZ$J@mtkknm~oVqRO zy56}(*yFqM5M~vfhkungZ3wB`d{Kj(9(}9d7-jH9bgD6yZ8Z0XSIdEn<4qf_s*b67 zFBoGbPENDAspTKL|0ccHGM24f8!+x+SKD)&X5FfP7ZLFG0!sI%W$9!gs5#3KrX8E~ z(17DpUTZn5wz(O$D+ojihl3@3^MU1uz6R2%{~=!W>E!#0nTNKz0}&kNObd%ajg3{| zw%5w!K3Yg;3dYw&sQlp=1rHVLnXcRjvOL1;aI!aAgFWW#+1U zi#hdF5a0O8zgUk55?UFO^QrpHKt5x@ss~jndaL|5h4iB@%31+`QMM;=$x#4BS~n^r z`5%}~5CW$fL)2dU1)2sV0g80Yp^pAP;1n4Erz{uR3o`!#P3u$uMY<$lLj3y~OXzDW ztqs)_{{l_N0E!-Q50CTv`-nNv zi{y2>f1UKoZ}nVa8cFjJ-=8WqA`AubKGTiz&KFBTGj!=1TE>sBVQ4a7ibh-r1H=Ic@m;Md(f@Rju2c%I4 zH5a8W^sk>mh|GcBb=i>8F$=5^(t6VaGxF0HhAkUO?^!zUWP>6VFuVZhJ25ODK-&cB zve88E9F2)1%mnKgMXTyV2&sv7{B%L^I77-4m>53|9(u$JFFbw1a<3+VXbJ&8T}#JS zNRnjk7y;GncmtHv96RC#>pFQ>(5`O~&nleZh1j>s=Ki6Ua7}7s2(D*ij99wjN_?Ahe+&@|a_@MuS8~R)B^G z&rNWrNhBvn#(9SC6B(-rH@5{Tls8KWpd8Rj`r^vzchI0%_H!T}@218Io&>{vI;}|d z00^=KVy9?u4si@NhqEf*(=ayy<#dnZ`9({+1qj-ATha06%@pjS&*x~#$T

Z(R;MT=)TTjyc zz#VDl72wFMEu&)_*#niTM#;u)0RkJjTXWQT4`l3S+y1~Z_gN?Ucp5{E=I2L5-ouGk zj=y~z7d)I&yjr=iwbv=Qi4-}7%q@Ttdhe4g>ksxE$vJ)InD&Gq+pY|ub089@ZrJT> zuU=8m1-DCYM}a&)JS*c4@W)TTP5^bQnfWOG7Yt<;dh4BFmtczBIpU^jN0Li<;#YiI zInnpE+6HsCt0d5vplE!Tm!2HqH@+rI(;VR4_#Fm+|F*9$JIN1YSB z15c&BNwxM}QZyqkBo9`1Y?9KMYjFS$$;cb(_g}r^?oaGi>Ar0O1zAZ60J@D*VfXwG z`;}MeYUuT`rm4{rt0^px4l_38tK*w;-}G?3(j6j)dZlO$J8|9Rm@}*HV-S&pZ3Lu< zJmT|3bSS%xAi9dk@dV$~KbK^2>$DyCTHoM~jeWPqzDL-=SoV^kA*hD-*yn;W?$`GkI;04|b zmU{T2!-Rk;Q?u_F{$D&t%1@x_Vf5iNS66_te+&US>rP;tQothC@q;yEGJUe8d9KGl zye3~Y|B{s}t>>C+4iIYL%^D1cPj9dvZ&j&UmI+xL4jpL4pf~J$<&i- zXzJH@me6H~(hSpP%UO2Ef}0zJKK;+Tuk#;nKA-8ftEe0vFQ{9Pc1T(jy=Yc+wi4ns z))nL-SKu?qZ0(0bK?|7bLCkMuder5wh7oYnCLS&SIo^xUeZmy4Zq=|Q2P_@iZ4Dat z?LC~A%Xq<+nn2`DWzA(E|N780o0)Q&p1ECOsr055F8%B?+3G-)bXZUE2ppBj)x1@% z&ghne_XAJUSr!3Q#Bg|A+IMaTUY@vQ9l) z&&a~-PzUIP;%J`Q$Rr=Dhnysuiw2%BE+IK4Xz-)r@m+ZKt zreaI{g>7F3?S`L8ya3>OpxAhzvlT#aZ6UoiA@RCI`;$?-&OHDQ@%XW+J_)`fmiS3K zUb=6lsv9BKrQp8@dX*p4SUqB29z7YC(KOCSwxw_XF^~0Xsn;^LXbwUkjZ^w7^LbhoW z`7+>FHe`o&py2|Ip0`Q|QHmMt z#lFuO@jJzVvF6w}g`al-1S2}W>*mVZ^SaycLTT$O;{bA?M*;ZXX2e51Yw)u4#1+Dy zRd3YK0W&x%OX71*2Y@aoX3<`a)l1i^H}0+v`NDJ5T+9XEmh|a=SbQGl+Y+}h*Aaj3 z5~HquV^a4+O1~IJtfe)|*oDd*L}1(NVw+s8f>728`(E=m_MF0rT4vcHw4oe<6lZm3 zZ%bIu4QvmW2Uz#oT47O{uN>r24D2{g$5p17)i=q1GLHL64xnK_WLHcFrA{h-Ps;Zp z$iqIPOXJ&7<-_s$wP(KNo&|cVbMtz@;e+E@IbURN0u7&1i&9^`tK>-Xo#9Y74z9=Rg;sXk9cuBRe*#)iDI7yC?cxwpxWmJQ->!5kilxJ^ZAwk*jTzkDZvViYdtb z&}aQ@o))({Uz&4i)MqPm2cg7@jgs~m@7sBumOTu=JoYc6bu^AoQd`#P>HU`!N8AWX z1OlgT*RBwzBOyqGbW0;3Te`bDm6BAtK^ml`lbr6id{piT>igro#2TsZE8LM-I`bPrT0!b#3rF@Qs8ak3+pb>B{th^u=s;)QqXAswREc~voX8xl(guCEnI1l3^W&ou>D^yLg|>TEHXmRJ+#Q)} z`1I@_=67Y^uF>I(6Eu9|k&F!<+pTZ)WfIQB!e}BO$hLA2GWV{_bYt%{ zA8Vu~bUMmW@Q#f)63MEX`W;wc5&5aY%<(apOHGnHacuyQh2aT9Pj>_&|1+|32iMT* zh}8Ekoh=8Uo~>+i<8b9%-7_y)wn?Q=5FO~O_M?f3aD`S)9cZ7WB6=YV4RFPPiO##M zPVxECe2hbTY%Ab35T-s*@JL8awxT>)=ws+lIfxXfam3Vn*C6 zQIuwQuv$WFOA5I}Bwyk>*51({9+k+|*Uw~ym8O?8BcsZzjq&|56kD%j80_?5;cYs~ z?dkKGqRPWnGevh*9f4IcjqHEL#W1NH;V=_y zK*+npd!>(!d~(Q=8Np7HxC&v7!A6H(U+=kL#aBi@c1e*WBJisTSyXVhgY<@ZypX2>1_CpnT!>-6k(7)F7j=Kdl#k9OW!?z zPd!@W*cVsovKeHF>8fukeH-RfL7BojHD5$$511S}r`^IahD9)L5Ml

4_Bp5+?NjQskLO>OCgBHqt)&WrqvEyDI!l^@|Gp|86?K6%gCLEyw0hYy5-mzUQSAD3rZte}==Hh%1fpuK!jPzQv(1aXsGf6Kn*|*XHAOL3fL zh%69qkyg>YqRqxI7@x03Aj!oQ7Y+i=3s<+Rj5At<(#lYellSxb(k-6 zxkQnX|NR0+3ZY!%l|*C{6N7xb#ceJ1%^J!JMF8PhZ;g+3vmf`4#2RtaJ(9EVkJJBD zxILi!Mt=?>{6MAdv{ zqi=B!*4vUCP`tu9uPd6bZw*66V z_{71{k@Do0Q2qJdDd2qj_ z|DW&u-!(9OxWs@}!IK>8BUSDBJ6taipso{WfDryYK;^VhYI1na_HI%KKcc6NpfpWUb2(YVv z#%>=PC^swVslNji0S(kDk_v#g{u#SjI6vIkoO>F(2Y@_oF!cV}lM6a%tn5M9No2ys zf1#jG5d0X!pSOA6ypEUJX=qK;+L2&-Ys$7^E(>I1lgM76{(Q4yw*twIT)#lyxfcbb zYC!o!_8%HItCqm_+l#2*q&7&??uI6fkW2L?@U2%10qSZVXm8&%f#h}$La6F$Doc~M z03cA~+y>AKdqD5L0s*!X7C!;kAW;tjFPi`i@TC*jpBK_r{MSHJi_r?;HuzqFjngJ2 zz8N}q-fL)&v3bVw&BFM5hNTi$1aPvjap$B6O1T5J{PJs1>b^q}-s0n$r=q%$-96@s*1k16K zHDj+r&Uxt$kM(n~+-wBV1)bwX3`=EA9Y!4j6aYWcA8-RwM*0;*w||f7Y*wHT3u$pv zMkw~w!XXr(Uf>LovU6aY-;SbSZ%7*a9Gw-qm`SA}C@w6Le#G_wyM9F*#S{Pd0<58$ zfnwAPk^FTH(LhIuj>&?G$~VDIin}3Lg<=(pKMg}Y0)fPi5DJ!(Uy_XML?hM6kZJ_a z5BRZJ?#MB4d8|!iBKlmb9E(pjhT<4Y6JEsx*Zz`S;CbHuqHT(aPRNHe83)sv%!W=d&VB@>J`F|zlVv40-rh3> z)(sHe^12>OZ!$h&Kc&}KM*#gxX_E8*3(sWx)V;eI@JuO<$02fW4nj|%%PnM@;~%7H z9dRSc@?TOJ=Gf{kP!_j9sJ5COotB;*@1W3`;yg=5J3Q!ihl^eq1KHW@khT3UtVHA_ z`4imLFGsG+P-vDfGb94!!_W@?l-F5dD7@>z} zYxK-ZfRr1XWZQF@NYvt27YCwAOtHVVxIB@>4S}uY(Sh<7ZuarPyG6N7sCT=RAI8A6 zFmj;}kftvN%Qb*iY6fUNf3!cH9k}KABjpk<_AcQydQjxQ0F2B6g8;*oU|@im`4(IW zrmlsea!3<)(q7gMy>R=Zmaz$cnWeo%5}&6cr|M)$9`hjkdle+nQTI)w+R4rUgFv~1x z@A?U?5sG;aAGwF7Im%cbkl{m@<{co*6x0EvA`P##J za{#)?q`X`(h<-gjrd@H6f@zWrWymQS%|za4P*UxQj)O;w75T`6%KnXW#p*ZtTWNB1N_g+b z8oPUa(~|tG((Mi?w3~+|ZBV7cfRc}-&&*b6*i0$?UZ0o76K;HG58jp4({(e2ZFRDgGeb)mu-{;mz9 zqMSi4UP?6Tw1Vtj8X~zZB`6n|UQ)mqVs-n}@DscYXdMJ>(8Ysa<=~+c!=6Q3#4R=U zxGHYOeH~%Jg2U_VVpQ#gXuI6PD@7w`0IpFTk6toIs8$n)o241?6^}wP^~ijeBSP+t z6FP9~?v}v7oHQ9=Z2F4~>Vt z7qqDE#X=3hY-_iDZJn_(YJu=1=wiIg+UAHn(P299=@WwjfzyAoF9^Xrz+#|vmdXG5t6*3SV zwoN!eDDlqR*!xRz4SO;|g_GpWZ1Fx~Bp3TY(Y+2c1Wu+a@~|6i#fVfM`V7#*!I=Tj zq-t~2&FjifrbT@woph1kXMenNmiYQ(s2CLhNw*sX=+Iu6{+>)c6EcfC`;&Hn>!7A> z2?M<&E&bV9%XLYE$6@1)r7!CxEK)y$kr;h~@>@?H<4w(*CG!kC#ZiFQTAZV^)~E<- zU++D*=l1kx5uTe?&ijUOO#?2X5Qi^H#Oxgxg6on?elwqPjcAi=^h_`=y($s6czS__ zY&CVOq8x?vZCQ<@LiAD#M`FV5XeKH*{R;<#%lyF3h!e7S)X=MJ9QGySlukN$%a|1n z+)5)8^`6xVV9l8e!$6`8VD?&%f2A!>#$bNlKGGgR9T6XcDd}Nj%*vvO_|%OOC)kUH zOoM4}cAEM%xyRIYQYZAFsWUY>3SsIlnu>7Cs@HJ@pwX*>ngN91;`|tL@J38#?@Q`h z&$hKByh~@EDSq@Yl1rZSrN4{+YYYW^LXa{-^VoO`-KmN`^F#kb_TX5Yn;aGj>hiJ^ ze?7v*i#X(FPks(F$an*RU5jU!XJUHU^l|qQsRnW%FZH5oM|;Twv zKAHEedTF+!Ds6KW%~P(nF_niMz$}>;DZGlCgt~-XlBGd$k|We$)SiK8V0i;`z_!xD zgk1sbsugY20xVHC5o$PhgAY=pFoqveKo5TDxGF6ITk#jVhcnRYfg>T**}YlIU5F#_ zsM|h{oco4Rq`2#XMu}GcU^O3&@D?yKGJuh}@pa!@HO5eJs+dDmQ>REw;D7KgY(k_+ zKwzUgjQA4n2CgJXmaE*QsecOqNdW*z>QFZuW&qoNYNF90cob+1nJs>mQ!%2W#Syv~ z%6Yvk8R?(3RAvx)br@3!syZp}5nkRuCfdhWrzVKsCgkB5>aRC}If=&%R6{mk zF)&;+CGOHc#^J_n&eVeS==t$#Wh}KTlS0c6zn+AJXYGLvWKrh110^`0B(f18PtPj zA}cRir2V$cZ4tc2hCcePdHOl6gxVa*F`)B~CyBFklF5(cl@LFeD4xX*jd+i;AKDb) zK}_2#8SigTv4hBmdQDaFIGpIxg;jVQ_TX40LMOrz!rowTF3pA(F z@i>b;{sYcegnXC~G*bvnY8Z--nHe9+gC~ z8EC6r)!V02_Kgk167kDuFML6J3Tr85WZyk-PJgahk>mtWT&nm?VC`HLf`Ff>3fuBx| zCKJ4uU%fk&#~Kh95h&Sx)rz}AA9i+zkwdPh2*5r76DbOoo3)&H5iS~iQq@%Uq+`mA zZ+}y%%`?*en&s6IigU`=@SzA7#_<>Tx{L8eH7;~xLaFGlt?MzXejYl`qCVgx}5 zB$^g?iJF$UFx9GCTOSy???k;sC`T$3Bs}AHFi7Ku5b8b=$jjUIu>1R?#(3dPc#t?AZ%_1 zKn0feKp=MOBYPPM+0Pe1SoSIuC74|2Jar@teqYV+P(8LCs8#w7^aV!!+r^<$mz-Nt z#}s`xCkXA^FU}U!e6QE!`Ti5Pe(>w;KWdjCz4PTUa8>I+BZ{z zL9IjEyjg;h=0jV}w*dYa9tOs;?_g0nbYx#V2kByVj$qfP5vmcktLmrc9ZU$Z9u8GP z5ufw5BQ%eS0X$F7&Ax-rOW=WQxdMhe*86J$Lmj{uV50fVc{kvC%T(1B+Mi|Vr_7g-_G=m!N_JMc|!&+fEBZ)>R81D&&s>5bd znQ7V;FyD8B?P&+Xnt#q+u{F*z@A6sI9#o9u0lsA(5F?g1@V&V#B4D$-*A}l0V`Br1 zfZ-#;2`=>lPn{i3`@zjAjF##F{P|!?Z+Dx!Zu>^3fKx**pSPiS*NB_G{djKOID=Po zI)4F#6!y;h@w$M;(%iKWFxT)^=09nw$KBQrHtEKdbpbMD6RCB69L6zNe@(N35^Z}B zo>?pZ3dCq~<1PS}$?kR~{j2!b=P#oIgnlqltAg0;e_QrYX`}{3IuP(0K-*Zo!fR=4 zpp&XTdhv5gtq(|$DLMQ{w(5pYlC!+UDaEspAM}j&JNA3H{gfqh3IyKA(|MqG;c+|n zbLgC(t|uiaJ2dj%{gGQmyBg9S=9X#}FCXsTXIxrmI4qTcLuKRnRy5d28&u-VL(a5D zf4F1zp`;=&9B?i)3xQyrpF(P$sA>Z7D8FehdvMaPz@iIQwgv#|T}78j0XM*k?R82~ zEkJ>!dwn7rsCbc}Y8k@2N*WPz7Q4}@csf*$|w{8J9uS1BosC?0& zQ3ciaol&FV-_AVOXI$67>1J&j$x(y3#`YQV4`vWmpqY}LVtk7Mx+g6{M7eY-%_ACv zRN2&kP63mIyTQhhh_2M8Yrq=A|7ulrX`TKZT3saRq}61(l_%ZS*9Ma&Yj%X|JKqJ4 z0)&q4HYv37Pa6e%dWxn$KaOocMEn~LtM3T42jx$n<{n6SfI^-F9XRC&_P;efh%dfi@kAYT4TqtUk&;lxYa~To)<%yng zx1kX3=W%(=r)5pl< ziF%V&Hw^ihgd#b>-8nIUKkg15!0*c@eSkv7EjDVF`f8iB=7DJdU!f?JGWzptXBT%i zVYb_QX&rZuxR##th%)J4kgsco+xkpV=Zk@d-EMu3;lxuQZofJPGB4-|*mr`;6a>s! zd|?!vU*x|kC?5H{ytFLC34yh9qwp!aLm?Baw(YokX(8?RXTd|3mBJkTrLX0~p>o1H zY9;stik~oz;2ze?W5tidS^XSFhLf@h#;!}x5rpwb#?CZ+z@AG1L8Ny_^xM(6t!vuy z^a{#z4W?n0KxtY;T9#MWTHdx?ED)wl zQ?CVMjhJWzwYMwWV|fDZRnS)&+LIf%{s2w?Te_l9Df?6>7t5u$>`#UEd78HzDwgn<2|K%lF^D;+&O+qd+lmbT!M@;Q(&7c2JCulNB}1^HBr7{U zb;XGm{+btzdj37Kc04$rq_dY_#gm#3DaQ$7hrnbx0tGAuXPJ`W3)kv?tOq z^jyIfKpX{LAwngI$|%Gi0zE{{=QH z(2t8(!$K?3V8K051I8KpAx`0?Je@G#-hHWhVk5*O^bk@mGdcG?=bkSCZosq3K15C~ z>c-k{+Nw{pF8tQ!g9*0;SN525cH^KTt`p}A{L#ifKK?W~W&vf;7itgX>?EPl?1Jj; zA*nAgdG((7yflMLVJ}Fz(2|3P3;C$%c>dHIOXh0%2OQ>OR@l# zaJIqY8iz%?GNbd;#EsyMnPo};-sdwvC&v)Yz~-yVXgo{|2pr2@@{!jqk z{J78bOU^!Z>e1!YZ}|gZ#25+G--2f`(d-keS?at^mo>GG5$mCK|NYuqlo+&WZd{94 z9p;wnD++jW2T4EGSR&q8sm-2+AXX5*f+t95<`PfFZ=Ta}OBF+$zs)^%Rc!?%`$^bi zk706~L!(q8E^=U~=(Lk8U&(wFQMlAU?Eq|sjArwU=v!Z?Pg=GQGL#bW=;Dcsr@kVH;F10c;Z}ePD^+uCVkV`=w@!= ziZs&Q2*K1DT3P}aJuMfb7%LUJSa=4Zqe3iH(FxA@wUK^$9M50m#xgVM0*r0xji2vo)LOh9 zAX5v5{Cw!WLXQE$d~UBgU^1wxf)V`)(FOc-$}Blnih94;l5Ja4?h!`9Z#&_`Xef@z zTSWC0onBzS$kX}zot4Y(tvSW)(>s!TI8<(xEi9pGsG+!NzMUg}h?)HpyN_6H#|*V= zTHun7n`E~3`Bv3%bq)mz{DRzcj+*q*UxUtEU6Iu8u9*X>TOcu6pyRsgn0&>AJaN71 zs+1gPvVAWK0z&auyU{n+TdARvjQ3V<_kAa5YiGIBa2Q^*ofO&%z~Iktv{G4>6_yQ8 z&eUhagcFjF`cEd#_u!3_ao8u=w`Ex*R5T4AMm%7T$^GHSt;oOX+I_WED#P zz-UhV==ZPl%tKy8h~m1P^$X+dynN=DGUlhDLOt0@%aRVg?_1WC-(|Fnc9Qz=VS^2c z=;Je#FMJVfO;%j##zXJ?oVtp!Lx)kN-W1Gd-il`t&UOpGylqjf>nR*Dw+2B9HE&ra zhwc_R1PpMnV_x3<#s@0p`tKj*QLG?nu-ZyCk$GVLSj?fMe)N!Lu^BgdhbSn)kW%LD z={u@cL-YlH8H4{(22aHr`?+F5Clj zPccd)v_E)PDG~K#-`wG&Wx!}JiT#?D4o7Bfin6tTcaIL~944iY5>x9=&?y&t^k5e+ z@>u}29+yZYA4sJCJdJ7t!)S~@e6+7BwbCt4VXxzax|@bH7;??gi9VXx|KmedZjb$~ zoeyCOACsiF)7~?Nqa(!x>EUk*?)b(#M2HG8d>Gn4gK|C_)!Y6;wPuLo+TFo6_(o{@ z#4{3JQl|^rKIX#c-0@o;NpkW-eEpV27-h{+*K&tpkQ`{KFn2uq$*jXnx`Bl5bWyxZ z-WB04Vq69tZw#D>(1d$|=R&`7jTWv`13pFk?B$>&ZK9J@EpSa*cfX?K4MDm>A%~@_Z8VRQZ6%>otU zeiC|p`sQ|w4WyyN<$R>%?R7P5AU4TxsD7p4Sj(3ckrHNExJzJsuha4Lhg*edhkU*6 zxzQnbic1-M8)vmLFr+aeOg3IIrG7iKBRb6*@Jn!V&gbyRWzM-0O@qww`=) z68_u$%Ah{h>H`#1KfCvwQq#gM#z))d2I2SOYnbgbkBl<8Hjh!>Me&_Epbn#t_p~y; zXM_876}wj|5Ts_3x%p7i=zBpS?n`w-0^(}JUbJmxZs?SX;8KQYp#iu| zgvUj3B{-?bW1fNrU<97CvJ56ZTGw*;wIlC?QX)QZ2MMB@-A>S7C2JAY(+J}X=8dDD zDeBW)BC8`5p^v*CAF)r`6j`=(4;mOHMGwAw?-Y(}X+UaOkizR@7KCo!LWYqEB0>8s!g!TF00VkS{MWS;!k;*PnxPWq5V*>fZ7b^j9u`z}6s z@_rS^Zf3HCBOyE+YK#hw7ZQ~B_h^Fm-|a4p!w!p-TBO|&TJ>^`8Tbh?Pu6!PxLb83 zh}kfN6Czx>kAEoKz`bL_PGQOVnDQ`{n%RwF+RBNCONoQTU^ve0`>ACr^6Ww>$Iw}? zf}ttxR|9rM<=~-0Vw28%(5h`hh=vqRS@^MpB5Al^W~A#5{7q~n#@!7S+&{b(iXS2M z@|2ycyc?&KY}Kxv)$=#P8=#~p>HWWeAUNvS0D$|D8LhMYOK1{DNrc>WurmB-f7P^4 zP#6>zhcn^7)D|j)0Z4!m)Az6Y0)4PKl+0x;lOVI1xA&EIp~i@LxtcBW#Zk9 z%>1KNq4*sEWrr~)>3@RN9)bV)1Sd1{M}rF#hXH9PvF{1>zduC={%8FTt>qtNN#dMHOWCOWT98syv_y%moBIMI4}?wc>8eq4q=z zecuLFIku}Tkc9Z9^Z#Z*mV$@Gf2*Hq+=BLi&vsx5%tx&P_0Kk2w3L{arWq;w0x@fT z7({MuUV$B6?VJBV!x+B&dh|7-|5rh*msaiV@IzU*ohp5hYavuH`#~DU3gjH9?W{B_ z6uT0%nKb~>Ay0j}OdJ?F3+KT0e|3xQcTLxM0%J5~&^oQzwVRl<1$NL^Z_n!68aGl5 z7rlVWlDq}7nFvSAp)C5Y!5oATeaMyh_7T)Eehz#t&47dI(hZTvlvxF1;s{pal>r^T zVZL+TAm?+Q(&t)rIvgYS|C$jq=aPa9mz=8oo>2MJIbg&Z0U0;48j>Z$rFi-A#mxBO zpr{W}%D#j3d&TmeXAxyH?Z7oy3Vl_4M@V18JG2RY+(lMaLR#XH^%&2blGAdHXqU~C z*59tsxf;XP(bHw3qlcYLf$|0sNB%3U3Lv^FSh7=v-3!cTdHXo6`S1SFHUA*^J)8rP zfetz9U77HVFQl;POnbz6>6wD}M(c%L7ly1%DKo5~0wD`v?qQ zgOe_BIKJf+1DuM&9-%$TQ|(Dnm1l`0o%!V&gUQi`qsL(C@nVdT-8>UWXfNm!LQv7y zA+oMnkiHijXp5e%;y4r|r3a)7)3(n(C11qK$(%ZiGoY|7pki6ugI#kcbe0P7f%=ai z1B*F8P1E`tDDKEwbhd%mF$356TKI`FVO30sov{a5^v<9iGEO6*F=+`{0H2r69yxG> z5s-+p@B2%T9fOdv@5#C^nD}o_CYqt_*C6R-z*lf5wF5(}E<;D$4WE zKv1+a0Z~}tEnvAO;TVDfD6&I{B72pi#g8xxYVL=yPwyuFM>H0TH|TCGHm!uh)L4Ej z!$ux$HRxER^#Iz)po8gSl~HAv5q}kk#L{V)=H8+&x83UolCdK{2$j<#ho-;hfQHd~ zs3n@+p1c6a6kk8#IIFj@|8S{~reMQHQb5)rWPe;Wy&MEruHC)VSS&B56ZQ%}sEyLb zkfR$|F}|aBC?)warr%1FelCpFL>%bE4n{l0#ZXTlSWb+_%dS2`^X_M+asJkc9XYYl za5TXDzFdW276xpw{o7a|@AeSLZ>HzqDt9|9KZ@-poua((e?|4(39RHpJ+^Z~%E;Rv zCEkFd0@TO*mwy1d>o}JzAXY`gkOxR#4e@uwUGWeY4-g~MdKaz7$M@zsg#|`?-=nLN zgDYMGcdqfw)<#;U(8R{%OJwS0=}-`bl^b^5zWq-W)+~^dni~ozTRw86gB)U7vF%)t zPfC5{h8p*#f@K;E;QgP741!>HU|&`{)De()PU}QnzjI12yq&njMvJ5tlWFgRex3FG zJ2YZed7uZVz4Ldy$_N1Z9E_`PuiwV}n`%f?0Zy`4$nI z$C;v%3y9Q^0{a13B8C81+x)>GQc846dkf?b2iNx+i?JWxNbQy+TXxc1N~AL)du;-J zOxc5XFU?!xW?K>@IC!n6aVlJa#}3!4OS^5u#R`EV^t46*r_Fu|X))``7O6Hql=zjK z)sa^76K26yKa}&-JxtG@Sop~CVPxWpJnVXv=*qo!q&M91!~510V27KIsi?W@1xMCk zdHq?7ih~xzwP194G}SCq+~74a%wpzy#BJ5V*^qC+{(i}7QKZk&@x7=|3IzL$bM8{v z9rYh0-YjWrUjQrY@PGu29qg-y)^+~^*;J7egH3Rjok1{qX2sd41A}-AFYxe*uDBS| z@eA)QSfbK#AKfGVu-xZ<5cxDT8+NJ~GaMoRbT&+s=^H7^=f0i7f5bVBSWaK%s?oTm zASn=nCHB4aS$d99oDoh{1p#ir8%G1fC01e#Y3I*w=*#3#TYCifz0WiF@w{Ij0&C`y zyv2jD;V4H9`V2F8<3qV7-fxSfRyz6#5s2tq7qA<9d_r&f3UNhI*#CkwsF|#y78UxM5*tWk?&>#NBLV% z79^D>AH?8`w*gpOzslPF$<6vyCui{!xt=A{-!O@JL+LEe>^Y&qHE7zAeYr^yOpD`n zm;Vy2dzI)Cdz3@^LJZ`63u{_1j=OuHYNjCGlffc;+paPl@CzNoNn54$_1HjsrjQX^ zYD9QwzhGh;ASF$NRrr|X5I!K>kfP&xWu``>YuKFMdoBb&R5rscbaf_%&xyLIpM--*diJ(_V zv&pT)5;;DTm?Q$98CiOD_8Z|zwT)90pFa*|weL3qmsBQ?5I-UERh z&k|7&zY6I_@IF-X_fJHE56C@#YlMP2re#EDMWjqb^>`r92qA4NM#x&+x}`thTwCR% zBMr-mT14#SU7GVOLvS2C0dfE+MVKU)57qh970s}d-6D$-v%yC*dVmGL`1OuceoTK1B95v+N%TRm zz=-8bGM=aSSwp7bOz$dW=~>HTcyMjT=sxK{S@>s*KM@*pVAXts-!XrS_RCt>`5EY%ro1a{VkqBnuB^H#;-KMDAS z5Yn1<4k`b5p4!5=ta*8b&o4U60^M2QS8k|TCPQ!T9**-wYi#0zxgP?$hdYCU!E}ws zl&HitNY3w_C3ZzVFScaJuFZh7yhO~j1}#3w0CB;C4cv$V{t``&=pP@ z5Jrc_qFW>iZ;I1-_dz^5MpdT=^MPr+BzfmZNLY{!s|mbuO89mqqwt1t=ld$hsR5xu z$}TZFp4vUds@2^4M)mUg;gJ~CtE)(EMxooOhO8#I=8rMaRo@?&Ut43lCDbr`6%tBH z8Mfo#1m78R(#dsD)moH{V-ss~cMQytuYXlhduI(NhFnNUfp7r?IM1#UoEE6ajORvc z6fcV2%jfjdDJVO!nZ4hVu=MjS`@x#DieH>u3Z4up6TBBIhbA>faP4vi*_#e_ui?&& zi!xoUBZ@cPBhw5#e-DvODPC7oqPr|NNQDaXg>~l{uI7O+Q7rC zpwEBKDp$n6)-$aJ1k{_V?XIf`vJ%64>vXT;she2;D)T1l^c9OQuToFcG`KIaL+clZ zV%>$1PvW<%^^Uz=1yRorhyA&65u?qbO-|UL#3$Y`{*pWSq;hRW#IgQnxI5J|j5MiH z!WN9=F(=>B)+ct%M9y8F$J4)%%je*D#zBBnqNE-urzw>cBreN^4**$PPtS+b4DE6p zJ2WO`wO4y(Y^%1;()d}~7ebgJ4^MlDYsdOP#{5%lV)JPFGo;Ep=SiXxIssm4I<`jh zap6=>s{#&}4IJN6@?R9&HhGDVy?hXyS|llugdaLgP%^7Kq=8ay<3aT~?qSTCmEe@b zAHK>I$0~3j4@6X1VR$}~{;R`S;RA8$eo+4S--z-KpjvG&_i9c35vh34fOr!n@oeW0 zUAAomL@O7^wbE~Y=aB|!>9I)v|I3G2UvwYRD$2V9S!uTuMe z^i>?-2n8DsHC+G5Qc+OydS0x$;GaJ)NDPjUeEy=O>5n;321;I6m3v73=QHGy;0Uqo zJvIIUXL*oalaVed`p;*uAYUjl|Hl%xe;+V_weaJg{3)~%M~1Y*08&GZzeYz!2-ZTA zFZde*9{|Bx9Z}^af7HYOT_gPe-LM!1DwkdT0n17+t@5Haq1IR8V6Z+NS>fwMAxBk; z46qLrcc8|RjswNOhUI2oGhnArf@Y}_0K+r`+yRCkfKkB74pPNJgm{1rvNS2zz=#$)ki=tsafizg-ybp{Vhh$#B8daBHHc%r7Pu`4aX!E{y9!#Ep=cP+V{iiNw#D6#C z`VU=(qmP8R!ar-3*XdaMJ3(HL>eaL{GC$az?(O(@iu{HQ1#Dg5z2i$D#x(;Et3^FBh{t?w=lKUZB zpc9nb)d(__-0eYNm=jdVBobmnM(qkLmtPx--=&xIVIbn|Ard`bM#3VS4$3Lg&8DKs zpJ#au0=Mj+n-GTr-Ek61Rjkx&pcXb(y%IN4i6}{auld^i8aF^9F@;N+tDlZH54@n^ z!Mx~I6NLS=0wSW$u@KKRKHI)&XCAoc$UK5>)oO2H8=-j03)cW$`Cc=j{1T+CDs>Tu z|JKk-w$HSm8t8zKG(9Lt{;Xu}14Am!25P*o?#7E6AI&A%sY);hB9S}<(u{U;j<-2+ zyG)Ae&Qy%JY>9ByvP1}S3YirUIA1BS)+S~E`{x1>uqk#AK+V0N8mb~l62o$0rD+kD z& z_%HI=t3UD?lA|NKmRmarj<3j?2X0KW6@SA;UZ9@I#KJ=qn`U3@`Qn@x5CW2iATm$D zpW1cn^*AUgO4}B_SiTG5mNRsoUzdaADmLk9(A6CYmp=r@Ku6g9m>~Y0up%P^`Wd)2 zZ4}J~DMsbW2@TwhL(G`3JM&YtewDd64l*MPnRYirz~*TRxR_^E--w?Sd~Rz;lJHcz z@~8HOCdMfCB?#lWK4VBHO!*pqRR;k%5?%;*liqO&6s!eqm9_XA9yN^!?rQ57VG9%v z`bkB76wk8S0^2C`c^TbNPBPa}3sx(5c<5i33ez3RoFac*CJ+6$G1CUw5zD*{-24(M z%~je}q8h_+dN>DbCu;vJz`*SKlSo3O?W#aU*WA2BmQ@0@ zL{yLKZ`=b(ojjS-?dzvrGi3#O^)aFzoL+r#Z>(sC$OLN#GMJF>r(NFvPCtR$LJ{{9t4vAi-4x`Uj(#zo1#+P zY}ANtbn9HQlQbZe3GPo-Sb}_=JZyb{WX4(cvh4qkV%w?D@qu-%equM<{0R9YDUTlF zdYlaf_n_ZIxFK1NZ*CFA&2xo_t~{`BG(Py$Rm|}$m|^1(!+vj#M2M8x`*GEo0pPq$ z#5%{ZP7ocJvkxT={n{frCX+-1#7yIz;9;(2>uKiA?3aU`bKG~6>*`Cx^SEyNM-_Nz z*fnZA+OA?+UJqQdd3&20ulQW;^E0Dwv~K4{(9GWZ1>*fUmDzWZGEs>()5!oWRY1ppH3A`7Cl+q8@ z`kpq~w%mrAJ-n=V+PU+U14Y@N?xFz`3dnUm_@tLRBgU8Qzkg}rQpPN_G zR3<3)G1ap46stGAm@9I)z29G0xMuEi7D&opt-O`Y;;R0fnRu02U(8b$KaRoG>=Z5B zWHAkyxlY8~)Ft1sJ^pQ|VU?IX&dc{kGZU~fh1*5HhGhfw{sx`GORXmi)h>oq@f`qMG znFpS?5=2-QEz>K{J)0x=nsJeoXmPwb?8HB`%R4_Z%mc662A(s-WNBfev96!SvZ4o@ zlc%F}cRLTHHVZ-}?V!imvf$v;0%o=?Kre@7q?*UquNwQ-#E>X<|FoU1ptchc9l42L@yxXfBf5A4e`JgzxkdWqj-Bz_PBlnKI5Zwk=QZ9LFL)5Kp56%jqY_^ldz%V!Nc}Mra7#NJSb zf+=r|uh(z+gxHoBD#?wiaMrz;Drt8_?RuP6Q6fm-Gm`n}@MDwv;i>=v3HsqvEnMOg zPJDzLv!~zuthJf7K9o(n4>f%fM&Ue4-FfHoJc*`Yhm6G3ybjScKY?DUMBAHve<-_T zZ3i^jWoxd6IGG9#IIk6S)8#AEy=?Be9>zDk*-&T&lzkO3k)%#&ga!17B}beF&tLK? z>fH8MCj0{=kzrTzo;scU9!IPx4^-SyM_Mso%cR zcF0f>rSX`pvG!{jx+m$5`}Nr{j$sXnnoR9?y3a`zX!dpP^c-KVOj}e!7_jXz6jSJM z%Ho|Qsc^Vnk|OzUrp7&vB^K*kWlFYAr{;c`8a{wtD`(jM%*cwtH9zT_p8ZlFD&8ua zUiM1NZ2u5vJL#8GrYfuHTk`GH{Mjhpcq zAw|Bk%z-O!9!6Ozf8VkQ;UxPoio#dxVlHE)tZ1-Z%i*-zof_yFTHvOet=8K2zFz6s zPxmks_>o|_)pxqyT`i;m9ySl&6?>*+$-iY5!N+hqFx{AVvl8u@@Hvj*!JDOQ!#>QX z>wIiaH=|5j%Hd3(Q1Xijia%e$aOKd)TO%h>L}uLzj}E*2H45Y+!mkb1=A1-hJ-R#e zpA+dBC8R3IP-NgcS1wU$Q z)p#ISq$tZrjgmNE3xDJ;v6=I(t^%IKC7;sJ(Xd2-hZQL8Ik(dwD0D5%#=rz3g6mh z4d-{KFSzhM4%Lc3XngtYokWQ_sok%~Pe%ur5B8`{cBVO{ShGm~M|)Qu4rSNI8B0cm z8Dt_$W-zj34^d;^8Ecl*&_W`k$dc?0VZ4;BvW&HoeQY7G3~51@tSO@?g_lT{ito$} zUDx-|cYS|<*Ej#2dCv2k?RW0`KKHp7!$iKs$+VYoM@@f8cihY4Y}Um~sl`opxx3VP zJLN5Zu7CYjRFSaBb8`H6zjpMzxp0LFib8=7i|Xdom35T(y_^VKnk{-+J|tPRRJqrh z&^s;SD5q9-a{r|TT}U^$?@8*9_Xx($b{Pz3A})Ux0&mAEcTT{gWo{q~MRvROgoj zf#rMLF0stE9>As_hyC?a*79~s#s`bA;%cRjNZ$+TyMC^}bJ(!3S?zi|WVAk*xTKVF zQf?IX^Wvnxele%ep<0v2-U-!Ta(=NlY?kcTQgY+>piB*DzCv0R)XqjdP5e3{B-(rhCCq_1qvQA;BAnho`#)>h+OYKHM|)4mO9*RU52GPzz3{SmTn@^?7B1|0Tv?UGKbC*;TIwNoZe235jykPfD@fK|_A`29cujrd0OLpcb!M({pJu1;>YttA=;425ATc%MC+Bhb%kp6Uqwfdi_# zuC}4JWl{Gl_)$cOSzAV| z^0BTMlYvv$i1vqbUh`z3p9Hz*+-60IF++_pkXo1+Mw zg8sZFAtEZ@wNN{WQJWMCMWaI+{IpeRZ^Dx?O&n9js#;*!a2wuuem7G+oc(M2+#-ks^h5`^`J!@Rl0H5 z2Uza7ja0h1wa3BSrkqO=T~WG&M(fsg3V z{e_s_*=v?qonOQ{iEss{dMt=A+J{4eq}VC4Nt-IWLaA>!k%oFYeVo4xNL*9`|Qifcm)q>_RxJ~NlMG&;~QMRr%MNlW>y46xK73P=UX~er*#z3cSmoh(jmJEr>+dHXXw#1 zRc;&Kzf6MYQ}e!k+9?y^TtmFwGbRjbD8sQR{(xpA(F~4hZko((z?$V(HEOE$hv3_+w?+(=A%1u1#u- zuNy9b1Vg}akvj&4G;A*f*^I-e9+8UK^!=v|3>8ifZf579DAF&Q*R1HXC{I**A_eQ zV_`zH&UZp&xeExp@`3YX{26<~{S!#|=Sa0X;oD>*mKXP+AV)gST&5!~+n5m1nkm<| z_zaxSc%F!WNe<1_xN;unDDm6u8%P}|Nz1(W?FyJV0&q5#DZgK>dHrE*{(#H#jh!C0 zHeqm|fQC%49B4wT1B?&Xxob+-h5g=0Zsr4yk>|$Kqhx5g*%!fWN2l9gz(HEI8ASS; z1feA3b9O_H+({ZMQ=9wyPQb}~7!tkC`&G&6zezTCTJPyC zE~v%OH@2q~v*rhf5nxpfr=^Ik3|aX~iT9{`HaAM9}h1h&7JUzAEW3g_D}a4$6j zZ6&81d0+bY+Uh?F;M8&}2U2`f+&zxsY0zoq>TE3^)rN=PsVymD#+~$NoZVfS3qo^Iz9|dX{F^B&(wsyd$zlibR_ErB+SYE+^5- z|Mhb$k!j&-Zwarbgp>^Y)nrhQ;QFSqw&7ZQeMkdaeYS5|z*8D49klKRpt?@mtm)Yotqf zw{y3Vj&=CGOg#n(PG+*2FcJ>1+co4(eZ-pK5F(|n$JWtWPgZ3xen}WYJESH*KTg6O zB44Jqm0|P<>e9mCA8Ab4Qsn(>+&O?1dd*fH{eo*ZSLo{VdabYN!Db*nX+v)!gus-I z7Tq+P0q%d0t&S@Sal7?d-Q!0O%){Yd@~yEbxIANYpE*!&eOIK0BBjoP%UZQ~`&+cm zGeZF%Vl$|(&0L`m29yzz!bh*Fzbc@NwSV1a$c;&@4SpZ__*{p*931J*qI%s}Gw*&) zHi}h^AKaE}{DmUv47ahYue5@(rAWNcnY@{HhbqhM6_iJU6|80_H*S|LQK0;vo+Ejp zm40q)XqKHCGGeqW7AY?lL7?)ov2Cdv>vr^ zhi4ouyx=Xw*W}m}F*|<~c`$l_@N#c0V;3u2SLa3tj5R*(h-kQEIOZtnVBMv6f&?yM zK|&a~DVn4{jaCF{b(Ox=(5Do9`9U;O4zz|v5TXc+R;u?Ng|F2YG+mvyv3tWjP`EwB zr^ZZ*k>_b&SMjh=NMD7Kgc*Pwf7%oim|)!msl93GCr&H)bTJ<+1={k~bli={^I z+kI*t28%+nv_Vua1F5P_3d&t4VYc3{L&$mHt141r3Dhjxl z^2MR?AAJ0tBeNY2q2yq&v&Qb?!IJ$-(8SbpF literal 0 HcmV?d00001 diff --git a/docs/user/app_getting_started.md b/docs/user/app_getting_started.md index a09bc71..9b0d424 100644 --- a/docs/user/app_getting_started.md +++ b/docs/user/app_getting_started.md @@ -67,6 +67,7 @@ Default settings allow you to configure labels, seeds, and steps for each axis o The **Custom Labels** tab provides options to configure a custom label range using the following parameters: `start`, `end`, `step`, `increment_letter`, and `label_type`. +![Custom Label Examples](../images/custom-label-examples.png) ![Add Floor Plan form part 3](../images/add-tile-axis-numalpha.png) ![Add Floor Plan form part 4](../images/add-tile-axis-roman.png) diff --git a/nautobot_floor_plan/forms.py b/nautobot_floor_plan/forms.py index b448d0d..79de743 100644 --- a/nautobot_floor_plan/forms.py +++ b/nautobot_floor_plan/forms.py @@ -18,14 +18,21 @@ ) from nautobot.dcim.models import Location, Rack, RackGroup -from nautobot_floor_plan import choices, models, utils -from nautobot_floor_plan.custom_validators import RangeValidator -from nautobot_floor_plan.label_converters import LabelToPositionConverter, PositionToLabelConverter +from nautobot_floor_plan import choices, models +from nautobot_floor_plan.utils import utils +from nautobot_floor_plan.utils.custom_validators import RangeValidator +from nautobot_floor_plan.utils.label_converters import LabelToPositionConverter, PositionToLabelConverter class FloorPlanForm(NautobotModelForm): """FloorPlan creation/edit form with support for custom axis label ranges.""" + CUSTOM_RANGES_HELP_TEXT = ( + "Enter custom label ranges in JSON format.
" + "Distance between start and end cannot exceed the size of the floor plan.
" + "Examples:
Click here for examples." + ) + location = DynamicModelChoiceField(queryset=Location.objects.all()) # X Axis Fields @@ -42,19 +49,7 @@ class FloorPlanForm(NautobotModelForm): x_custom_ranges = forms.JSONField( label="Custom Ranges for X Axis", required=False, - help_text=( - "Enter custom label ranges in JSON format.
" - "Distance between start and end cannot exceed the size of the floor plan.
" - "Examples:
" - '[{"start": "02A", "end": "02Z", "step": 1, "increment_letter": true, "label_type": "numalpha"},
' - '[{"start": "A", "end": "Z", "step": 1, "increment_letter": true, "label_type": "letters"},
' - '{"start": "A01", "end": "A15", "step": 1, "label_type": "alphanumeric"},
' - '{"start": "01", "end": "15", "step": 1, "label_type": "numbers"},
' - '{"start": "I", "end": "X", "step": 1, "label_type": "roman"},
' - '{"start": "α", "end": "ω", "step": 1, "label_type": "greek"},
' - '{"start": "1", "end": "15", "step": 1, "label_type": "hex"},
' - '{"start": "1", "end": "15", "step": 1, "label_type": "binary"}]' - ), + help_text=CUSTOM_RANGES_HELP_TEXT, ) # Y Axis Fields @@ -71,19 +66,7 @@ class FloorPlanForm(NautobotModelForm): y_custom_ranges = forms.JSONField( label="Custom Ranges for Y Axis", required=False, - help_text=( - "Enter custom label ranges in JSON format.
" - "Distance between start and end cannot exceed the size of the floor plan.
" - "Examples:
" - '[{"start": "02A", "end": "02Z", "step": 1, "increment_letter": true, "label_type": "numalpha"},
' - '[{"start": "A", "end": "Z", "step": 1, "increment_letter": true, "label_type": "letters"},
' - '{"start": "A01", "end": "A15", "step": 1, "label_type": "alphanumeric"},
' - '{"start": "01", "end": "15", "step": 1, "label_type": "numbers"},
' - '{"start": "I", "end": "X", "step": 1, "label_type": "roman"},
' - '{"start": "α", "end": "ω", "step": 1, "label_type": "greek"},
' - '{"start": "1", "end": "15", "step": 1, "label_type": "hex"},
' - '{"start": "1", "end": "15", "step": 1, "label_type": "binary"}]' - ), + help_text=CUSTOM_RANGES_HELP_TEXT, ) is_tile_movable = forms.BooleanField( required=False, diff --git a/nautobot_floor_plan/migrations/0008_add_axis_step.py b/nautobot_floor_plan/migrations/0008_add_axis_step.py index 89a98eb..464b1ec 100644 --- a/nautobot_floor_plan/migrations/0008_add_axis_step.py +++ b/nautobot_floor_plan/migrations/0008_add_axis_step.py @@ -2,7 +2,7 @@ from django.db import migrations, models -import nautobot_floor_plan.utils +import nautobot_floor_plan.utils.utils class Migration(migrations.Migration): @@ -14,11 +14,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name="floorplan", name="x_axis_step", - field=models.IntegerField(default=1, validators=[nautobot_floor_plan.utils.validate_not_zero]), + field=models.IntegerField(default=1, validators=[nautobot_floor_plan.utils.utils.validate_not_zero]), ), migrations.AddField( model_name="floorplan", name="y_axis_step", - field=models.IntegerField(default=1, validators=[nautobot_floor_plan.utils.validate_not_zero]), + field=models.IntegerField(default=1, validators=[nautobot_floor_plan.utils.utils.validate_not_zero]), ), ] diff --git a/nautobot_floor_plan/migrations/0009_add_custom_label_support.py b/nautobot_floor_plan/migrations/0009_add_custom_label_support.py index 61d77c4..afd1deb 100644 --- a/nautobot_floor_plan/migrations/0009_add_custom_label_support.py +++ b/nautobot_floor_plan/migrations/0009_add_custom_label_support.py @@ -3,7 +3,7 @@ import django.db.models.deletion from django.db import migrations, models -import nautobot_floor_plan.custom_validators +import nautobot_floor_plan.utils.custom_validators class Migration(migrations.Migration): @@ -20,7 +20,9 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="floorplan", name="x_axis_step", - field=models.IntegerField(default=1, validators=[nautobot_floor_plan.custom_validators.ValidateNotZero(0)]), + field=models.IntegerField( + default=1, validators=[nautobot_floor_plan.utils.custom_validators.ValidateNotZero(0)] + ), ), migrations.AlterField( model_name="floorplan", @@ -30,7 +32,9 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="floorplan", name="y_axis_step", - field=models.IntegerField(default=1, validators=[nautobot_floor_plan.custom_validators.ValidateNotZero(0)]), + field=models.IntegerField( + default=1, validators=[nautobot_floor_plan.utils.custom_validators.ValidateNotZero(0)] + ), ), migrations.AddField( model_name="floorplan", @@ -48,7 +52,7 @@ class Migration(migrations.Migration): ( "step", models.IntegerField( - default=1, validators=[nautobot_floor_plan.custom_validators.ValidateNotZero(0)] + default=1, validators=[nautobot_floor_plan.utils.custom_validators.ValidateNotZero(0)] ), ), ("increment_letter", models.BooleanField(default=True)), diff --git a/nautobot_floor_plan/models.py b/nautobot_floor_plan/models.py index 9a3f3e1..faa3e47 100644 --- a/nautobot_floor_plan/models.py +++ b/nautobot_floor_plan/models.py @@ -13,9 +13,9 @@ CustomAxisLabelsChoices, RackOrientationChoices, ) -from nautobot_floor_plan.custom_validators import ValidateNotZero -from nautobot_floor_plan.label_generator import FloorPlanLabelGenerator from nautobot_floor_plan.svg import FloorPlanSVG +from nautobot_floor_plan.utils.custom_validators import ValidateNotZero +from nautobot_floor_plan.utils.label_generator import FloorPlanLabelGenerator logger = logging.getLogger(__name__) diff --git a/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_create.html b/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_create.html index d2d4c3a..0640219 100644 --- a/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_create.html +++ b/nautobot_floor_plan/templates/nautobot_floor_plan/floorplan_create.html @@ -1,5 +1,6 @@ {% extends 'generic/object_create.html' %} {% load static %} + {% load form_helpers %} {% load seed_helpers %} @@ -18,21 +19,21 @@