← back to Kravet Sheet Sync 2026 04 20

__pycache__/audit_last_30.cpython-314.pyc

80 lines

+
x
Yj;���Rt^RIt^RIt^RIt^RIt^RIt^RIt]PPRR4tRtRR.t
RtRtRCR	lt]!R
4t]!]4^8d]!R]!]4R24]!R
]!]4R24RtRRDRE.R.RFOR.RGOR.RHORRIRJ.RRKRL.R.RMO/tRt]Uu.uFp]!V4NK
	upt]!]4t]!R]44t]],
t]!R4]!R]24]!R]24]!R]24^RIHt]!4t]Fzt]R,Fjt ^RI!t!]!PD!RR ]!PD!R!R"] 44t#]!PD!R#R$]#4t#]!PD!R%R&]#4t#]]#;;,^,
uu&Kl	K|	]!R'4]PI4Fwt%t&]!R(]&R)
R(]%24K	]!R*4]F�t]R,'gR+MR,t']!R(]'R-]R.,R/
R0]R1,R2
R3]R4,R5]R6,R7]R8,R9]R:,R;,R<24]R,Ft ]!R=] R>,24K	K�	]PP!]])!R?R@4^RA7]!RB4R#uupi)Na]
Click-through audit of the last 30 Kravet products pushed to Shopify.

For each product, checks everything a human would see clicking through admin:
  - Title format (Pattern Color | Brand)
  - Status (ACTIVE / DRAFT / ARCHIVED)
  - Images (count, storefront URL, size > placeholder)
  - Variants: main DWKK-XXX + DWKK-XXX-Sample, price, cost
  - Metafields: manufacturer_sku (custom + dwc), color, width, compliance
  - SEO title & description
  - descriptionHtml length
  - Tags (incl. New Arrival)
  - Collection membership (New Arrivals)

Emits a pass/fail summary + detailed issue list per product.
N�SHOPIFY_ADMIN_TOKEN�zPhttps://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json�sshzroot@45.61.58.125z%gid://shopify/Collection/167327760435c���\P!\RVR2.,RRRR7p\P!\
P!VP44Uu.uFq"'gKVNK	up#uupi)zLPGPASSWORD=DW2024! psql -h 127.0.0.1 -U dw_admin -d dw_unified --csv -t -c "�"T)�capture_output�text�check)�
subprocess�run�SSH�csv�reader�io�StringIO�stdout)�sql�r�rows&  �-kravet-sheet-sync-2026-04-20/audit_last_30.py�pgrsj�����s�
V�WZ�V[�[\�]�_�_��$�d�	4�A��:�:�b�k�k�!�(�(�&;�<�D�<�C��C�C�<�D�D��Ds�!	A8�/A8c	��\P!RTRT;'g//4P4p\PP\VRRRR\/R7p\P!\PPV^R7P44pRV9d\VR,4hVR	,#)
�query�	variables�POSTzContent-Typezapplication/jsonzX-Shopify-Access-Token)�data�method�headers)�timeout�errorsr)�json�dumps�encode�urllib�request�Request�URL�TOKEN�loads�urlopen�read�RuntimeError)�q�v�body�req�ds&&   r�gqlr1!s���	
���W�Q�{�1�7�7��3�	4�	;�	;�	=�D������s��F�� 2�3K�E�R�	�	T�C�
�j�j����'�'��B�'�7�<�<�>�?�A��1�}�L��8��5�5��V�9��a?
  SELECT dw_sku, shopify_product_id, mfr_sku, pattern_name, color_name, brand, imported_at::text
    FROM kravet_catalog
   WHERE dw_sku LIKE 'DWKK-%'
     AND imported_at IS NOT NULL
     AND imported_at >= now() - INTERVAL '2 days'
     AND shopify_product_id LIKE 'gid://%'
   ORDER BY imported_at DESC
   LIMIT 30
znote: only z% rows with imported_at in last 2 daysz

auditing z products ...
a�query($id:ID!){
  product(id:$id){
    id title handle status vendor productType tags createdAt
    descriptionHtml
    seo{ title description }
    images(first:10){ nodes{ url width height } }
    media(first:10){ nodes{ status mediaContentType } }
    variants(first:10){ nodes{
      id sku title price
      inventoryItem{ unitCost{ amount } tracked }
    }}
    metafields(first:80){ nodes{ namespace key value } }
    collections(first:50){ nodes{ id title handle } }
  }
}�manufacturer_sku�width�brand�content�prop_65�ca_tb117�
collectionc�t	aa�Vworr4rV\\RV/4R,pV'g
RSRRRR./#.pRVR,9dVPR	4R
VR,P49dVPR4VR,R8wdVPR
VR,R24VR,R,p	VR,R,p
V
Uu.uFq�P	R4R8XgKVNK	pp\V	4^8XdVPR4V'dVP\V4R24VR,R,p
\
V3RlV
4R4p\
V3RlV
4R4pV'gVPR4MsVR,P	R4;'g/P	R4pV'gVPR4\VR,4^8:dVPR4V'gVPR!4M*VR,R"8wdVPR#VR,R$24VR%,R,Uu0uFq�R&,VR',3kK	upo.p\P4FYwpp\;QJdV3R(lV4F'gKR)M	R*M!V3R(lV44'dKHVPV4K[	V'dVPR+V24VR,,R,'gVPR-4VR,,R.,'gVPR/4VR0,'d\VR0,4^�8d8TPR1\VP	R04;'gR24R324R4VR5,9dVPR64\;QJd*R7VR8,R,4F'gKR)M	R*M!R7VR8,R,44pV'gVPR94RSR:VPR;4R<,RVR,RVR,R\V	4R\V
4R%\VR%,R,4RV/#uupi TPR 4EL�;iuupi)=�id�product�dw_sku�status�	NOT_FOUND�issueszproduct missing on Shopify�|�titleztitle missing ' | Brand' suffix�	wallpaperz&title contains banned word 'wallpaper'�ACTIVEzstatus=z (expected ACTIVE)�images�nodes�media�FAILEDz	NO imagesz
 FAILED media�variantsc3�F<"�TFqR,S8XgKVx�K	R#5i)�skuN���.0r-r=s& �r�	<genexpr>�check.<locals>.<genexpr>ts����5�B�q�E�(�f�"4���B�s�!�
!Nc3�L<"�TFqR,SR28XgKVx�K	R#5i)rKz-SampleNrLrMs& �rrOrPus#����C�b��e�H�6�(�'�0B�$B�1�1�b�s�$�
$zmain variant DWKK-XXX missing�
inventoryItem�unitCost�amountzmain variant has no cost�pricezmain price <= 0zmain price unparseablezSample variant missingz4.25z
Sample price=z (expected 4.25)�
metafields�	namespace�keyc3�,<"�TF	qS9x�K	R#5i�NrL)rN�alt�haves& �rrOrP�s����/�$�3�$�;�$�s�TFzmissing concepts: �seozno SEO title�descriptionzno SEO description�descriptionHtmlzthin description (rz chars)zNew Arrival�tagsz'New Arrival' tag missingc3�@"�TFqR,\8Hx�K	R#5i)r;N)�NEW_ARRIVALS_GID)rN�cs& rrOrP�s���Y�?X�!�D�'�%5�5�?X�s��collectionsznot in New Arrivals collection�pid_num�/�����)r1�Q�append�lower�get�len�next�float�
REQ_META_ALTS�items�any�split)r�pid�mfr�pat�col�brn�imported�pr@�imgsrG�m�failed_media�vs�main�sample�cost�missing_concepts�concept�alts�in_new_arrivalsr=r\s&                    @@rr	r	Ws����03�-�F�C�c���A��c�{��I�&�A���&�(�K��D`�Ca�b�b�
�F��!�G�*���
�
�7�8��a��j�&�&�(�(��
�
�>�?�	��{�h���
�
���(��}�,>�?�@�
�X�;�w��D�
�g�J�w��E�$�D�u�!���h��8�(C�A�A�u�L�D�
�4�y�A�~��
�
�k�"���
�
��\�*�+�=�9�:�
�:��w�	�B��5�B�5�t�<�D�
�C�b�C�T�
J�F���
�
�5�6��_�%�)�)�*�5�;�;��@�@��J����M�M�4�5�	8��T�'�]�#�q�(�&�-�-�8I�*J���
�
�.�/�	���F�	"��
�
�
�f�W�o�%6�6F�G�H�12�,���0H�I�0H�1�{�^�Q�u�X�&�0H�I�D���&�,�,�.�
����s�/�$�/�s�s�s�/�$�/�/�/��#�#�G�,�/���
�
�*�+;�*<�=�>�
�U�8�G����
�
�n�%��U�8�M�"�"��
�
�*�+�
�
���3�q�):�';�#<�s�#B��
�
�*�3�q�u�u�5F�/G�/M�/M�2�+N�*O�w�W�X��A�f�I�%��
�
�1�2��c�Y�q��?O�PW�?X�Y�c�c�c�Y�q��?O�PW�?X�Y�Y�O���
�
�6�7�	�&��3�9�9�S�>�"�%���7���!�H�+��#�d�)��C��G��c�!�L�/�'�2�3��&�	�	��iE��$	8��
�
�6�7��Js�R�,R�(R�R5�R2c#�F"�TFqR,'dK^x�K	R#5i)r@NrL)rNrs& rrOrO�s���2�w�!��k�k�A�A�w�s�!�
!z=== AUDIT SUMMARY ===z
  total:  z
  pass:   z
  fail:   )�Counterr@z=\S+z=Xz
\(\d+ chars\)z	(N chars)z'[^']+'z'X'z\[.*\]z[...]z
=== ISSUE HISTOGRAM ===z  �3dz
=== PER-PRODUCT ===u✓u✗� r=�15sz [r>�8sz] rEzimg rIzv rVzmf  'rB:N�2N�'z	       ! :N�xNzaudit_last_30.json�w)�indentz
wrote audit_last_30.jsonrZ)�customr3)�dwcr3))�globalr4)r�r4)�specsr4))r��Brand)r�r5)r�r5)r�r5))r��Content)r��material)r��composition)r�zProp-65)r��prop_65_text)r�zCA-TB117)r��
ca_tb117_text))r��
Collection)r��collection_name)r��collection_text)r�r9)*�__doc__r r
�urllib.requestr#rr
�sys�os�environrkr'r&rrbrr1�rowsrl�printrhror	�results�total�sum�pass_�failrdr��histr�i�re�sub�canon�most_common�issue�count�mark�dump�open)rs0r�<module>r�s���� 6�5�5��j�j�n�n�*�2�.��V��
����8��E��
�	�	���t�9�r�>�	�K��D�	�{�"G�
H�I���C��I�;�o�.�/���(�8�:T�U��U��f�
�`�
�/�1J�K��0�2L�M��H��
�R�j"�
"�T��5��8�T�
"��	�G����2�w�2�2���u�}������
�5�'����
�5�'����
�4�&��� ��y��	�A�
�x�[�[������w��b�f�f�-=�{�A�&N�O�����z�5�%�0�����y�'�5�1���U��q���
�
��!�#��$�$�&�L�E�5�	�B�u�R�j��5�'�
"�#�'����	�A��(���5��D�	�B�t�f�A�a��k�#�&�b��8��R�(8��1�X�;�-�t�A�j�M�?�Z\�]^�_k�]l�\m�mr�st�u|�s}�B�tC�sD�DE�F�G�
�x�[�[��
�	�!�D�'��#�$��
��	�	�'�4�,�S�1�!�<��"�$��E#s�'I?