← back to Elitis Price 2026

exec/__pycache__/ws3b_bucketB.cpython-314.pyc

42 lines

+
�Sj����Rt^RIt^RIt^RIt^RIt^RIt^RIt]PP^]PP]
44]PP^]PP]PP]
4R44^RIt
]PP]PP]
4R4t]PP]R4t]PP]R4tRtRt]R8XEd�]!4wtttR	]P.9gR
]P.9d�]!R4]!R]!]424]!R
]!]424]!R]!]4R24]!R4]F5t]!R]R,:R]R,:R]R,R]R,24K7	]!R4]Ft]!R]:24K	]P8!^4]
P:!4t^;t;t t!]],t"]#!]"4F�wt$t]
PJ!]R,4]9d] ^,
t K/]
PL!]4t']'R8Xd]^,
tM*]'PQR4'd]!^,
t!M	] ^,
t ]$^,^,^8XgK�]!R]$^,R]!]"4R]R] R ]!2
4K�	]!R!]R] R ]!R"]!]4R#]!]4R$]!]4R%2
4R#R#)&u�WS3b - Bucket B recovery: build the staging colorways whose pattern did NOT
exact-match the catalog only because of ACCENT / CASE / SPACING drift
(e.g. 'Eclat'->'Éclat', 'Panthere'->'Panthère', 'Colosse frutier'->'fruitier').

Strategy (cheaper than re-scraping, per FOLLOWUP_scrape_403.md):
  1. Normalize both sides: casefold + strip accents (NFKD) + collapse whitespace.
  2. Exact-normalized match  -> HIGH confidence -> build.
  3. difflib close match >=0.90 -> FUZZY (single-char typos) -> build, logged FUZZY.
  4. else -> leave for the /elitis scrape (Bucket A / D).

Reuses ws3_drafts.create_one (same DRAFT + Needs-Image + variant recipe). $0.
Steve-approved via AskUserQuestion 2026-07-11 (option C).N�libz..zelitis_catalog.jsonzOUT_577_staging_join.csvc���\P!RT;'gR4pRPRV44pRPVP4P	44#)�NFKD�c3�b"�TF%p\P!V4'dK!Vx�K'	R#5i)N)�unicodedata�	combining)�.0�cs& �A/Users/macstudio3/Projects/elitis-price-2026/exec/ws3b_bucketB.py�	<genexpr>�norm.<locals>.<genexpr> s���=�1�a�K�$9�$9�!�$<���1�s�/�
/� )r�	normalize�join�casefold�split)�ss&r�normrsL�����f�a�g�g�2�.�A�
���=�1�=�=�A��8�8�A�J�J�L�&�&�(�)�)�c�8�\P!\\44p\	\
P!\\444p\RV44p/pVF4pVP\VR,4.4PV4K6	\	VP44p...r�pVEFCp	V	R,p
W�9dK\V
4pVPV4pRp
V'g\P!W�^RR7pV'dKW>^,,pR\P !RW�^,4P#4R
R	V^,2p
MVPV
4K�VF�pVPR
4'dKRV	R,RVR,RV	R,R
V	R
,RVR,RVR,RVR,RVR,RV
RV
/
pV
R8XdTMTPV4K�	EKF	Wg\%\V443#)c3�2"�TF
qR,x�K	R#5i)�pattern_nameN�)r	�es& rr� build_bucketB.<locals>.<genexpr>'s���4��1�~�&�&��s�r�pattern�HIGHg�������?)�n�cutoffzFUZZY:Nz.2f�:�
on_shopify�list_sku�unit�retail�mfr_sku�color�
color_name�width�product_type�_conf�	_list_pat)�json�load�open�CAT�list�csv�
DictReader�SJ�set�
setdefaultr�append�keys�get�difflib�get_close_matches�SequenceMatcher�ratio�sorted)�cat�sj�
exact_pats�cat_by_normr�	norm_keys�high�fuzzy�miss�r�pat�nk�ents�conf�close�tgts                r�
build_bucketBrM$s���
�)�)�D��I�
�C�	
�c�n�n�T�"�X�&�	'�B��4��4�4�J��K�
�����t�A�n�$5�6��;�B�B�1�E���[�%�%�'�(�I��B���D�
���	�l�����
�#�Y�����r�"������-�-�b�q��N�E��"��8�,���� 7� 7��b��(� K� Q� Q� S�TW�X�XY�Z_�`a�Zb�Yc�d�����C� ���A��u�u�\�"�"���A�j�M�9�a��6G��QR�SY�QZ��!�H�+�y�!�I�,���<����7��^�Q�~�5F��QU��S�	�C��V�^�T��6�6�s�;���2��s�4�y�)�)�)r�__main__z--reportz--buildz0Bucket B recovery (accent/case/spacing + fuzzy):z&  HIGH  (normalized exact) colorways: z'  FUZZY (>=0.90 close)      colorways: z'  still-missing distinct patterns    : z -> route to scrapez$
  -- FUZZY joins (eyeball these) --z    r+z -> rz  [r*z]  r%z,
  -- still missing (Bucket A / D scrape) --�OK�FAILz  ...�/z ok=z skip=z fail=zWS3b DONE: ok=z (high=z fuzzy=z still-missing=�)))�__doc__�sys�osr1r,rr9�path�insert�dirname�__file__r�
ws3_drafts�W�ROOTr/r3rrM�__name__rCrDrE�argv�print�len�t�p�exit�seen_dw�seen�n_ok�n_skip�n_fail�allt�	enumerate�i�dw_sku�
create_one�st�
startswithrrr�<module>rps���=��	�
����������2�7�7�?�?�8�,�-�������2�7�7�<�<������� 9�5�A�B��	�w�w�|�|�B�G�G�O�O�H�-�t�4���g�g�l�l�4�.�/���W�W�\�\�$�2�3��*�#*�L�z��%���D�%���S�X�X���#�(�(�!:�
�@�A�
�6�s�4�y�k�B�C�
�7��E�
�|�D�E�
�7��D�	�{�BU�V�W�
�5�6��A��D��;��*�$�q��|�.>�c�!�G�*��S�QR�S\�Q]�P^�_�`��
�=�>��A��D���,��������
�9�9�;�D���D��6�F��%�<�D��$����1��8�8�A�i�L�!�T�)��a�K�F��
�\�\�!�_��
��:��A�I�D�
�]�]�6�
"�
"��a�K�F��a�K�F�
��E�R�<�1���E�!�A�#��a��D�	�{�$�t�f�F�6�(�&���Q�R� �
�N�4�&��v�h�f�V�H�=��t�9�+�W�S��Z�L���D�	�{�!�M�N�Ar