
    L$j                        d dl Zd dlmc mZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z" d	e#fd
Z$dde%d	e#fdZ&d	e#fdZ'd Z(d Z)d Z*d Z+d Z,d Z-d Z.dS )    N)datedatetime	timedeltatimezone)
TestClient)get_settings)init_dbreset_db_for_tests)app)AnalyticsPostSnapshotExternalPost)YOUTUBE_CHARTYOUTUBE_DAILY_TOTALSYOUTUBE_VIDEO_TABLEdetect_csv_typeparse_duration_secondsparse_numberparse_percentparse_youtube_chart_csvparse_youtube_daily_totals_csvparse_youtube_dateparse_youtube_video_table_csvread_csvreturnc                  2   dg} dgdz  dgz   }t          ddd          }t          |          D ]B\  }}|                     |t          |          z                                    d	|            Cd
                    |                               d          S )NzDatum,Aufrufe
      ;   i        )days,
	utf-8-sig)r   	enumerateappendr   	isoformatjoinencode)rowsvaluesstartoffsetviewss        X/home/agent/projects/AutoShorts_Dashboard/backend/tests/test_youtube_analytics_import.py	daily_csvr0      s    DTBY"Fq!E"6** O O	v 6 6 66AACCMMeMMNNNN99T??!!+...    views_offsetc                 F    dd| z    dd| z    d                     d          S )Nu   Videos,Videotitel,Veröffentlichungszeitpunkt des Videos,Dauer,Aufrufe,Wiedergabezeit (Stunden),Abonnenten,Impressionen,Klickrate der Impressionen (%)
Gesamt,Gesamt,,,329,0.31,-1,439,1.59
abc123,"Direct scam-warning hook, with comma","May 31, 2026",0:31,x   u@   ,0.12,2,180,3.20
xyz456,"Slow opening 😬","May 30, 2026",0:38,P   zT,0.03,-1,200,0.50
partial789,"Impressions only row","May 29, 2026",0:27,,,0,59,1.20
r$   r)   r2   s    r/   video_table_csvr8   "   sF    CFCU  13\0A  
 F;r1   c                  ,    d                     d          S )NuM   Datum,Videos,Videotitel,Veröffentlichungszeitpunkt des Videos,Dauer,Aufrufe
r$   r6    r1   r/   	chart_csvr;   +   s    [bbcnooor1   c                     t                      }d|_        | dz  |_        t          |          }t	          |           t          t                    S )Nz	sqlite://storage)r   database_urlstorage_rootr	   r
   r   r   )tmp_pathsettingsengines      r/   make_clientrC   /   sG    ~~H'H$y0HXFvc??r1   c                     t          t                                d         } t          |           }|t          k    }|st	          j        d|fd|t          f          dt          j                    v st	          j        t                    rt	          j	        t                    ndt	          j	        |           t	          j	        |          dt          j                    v st	          j        t                    rt	          j	        t                    nddz  }dd|iz  }t          t	          j        |                    d x} x}}t          t                                d         } t          |           }|t          k    }|st	          j        d|fd|t          f          dt          j                    v st	          j        t                    rt	          j	        t                    ndt	          j	        |           t	          j	        |          d	t          j                    v st	          j        t                    rt	          j	        t                    nd	dz  }dd|iz  }t          t	          j        |                    d x} x}}t          t                                d         } t          |           }|t          k    }|st	          j        d|fd|t          f          dt          j                    v st	          j        t                    rt	          j	        t                    ndt	          j	        |           t	          j	        |          d
t          j                    v st	          j        t                    rt	          j	        t                    nd
dz  }dd|iz  }t          t	          j        |                    d x} x}}d S )Nr   ==)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py6)sr   r   )py0py2py4py6zassert %(py8)spy8r   r   )r   r0   r   r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr8   r   r;   r   )@py_assert1@py_assert3@py_assert5@py_format7@py_format9s        r/   test_detect_youtube_csv_typesrY   8   s   #IKK003L?344L48LLLLLLLLLLL48LLLLLLLLLLLLL?LLLLL?LLLLLL3LLLL4LLLLLLLLLLL8LLLLLL8LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL#O$5$566q9Q?9::Q:>QQQQQQQQQQQ:>QQQQQQQQQQQQQ?QQQQQ?QQQQQQ9QQQQ:QQQQQQQQQQQ>QQQQQQ>QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ#IKK003E?344E4EEEEEEEEEE4EEEEEEEEEEEE?EEEEE?EEEEEE3EEEE4EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEr1   c            	         d} t          |           }|j        } |            }d}||k    }|st          j        d|fd||f          dt	          j                    v st          j        t                     rt          j        t                     ndt          j        |           t          j        |          t          j        |          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x} x}x}x}x}}d	} t          |           }|j        } |            }d	}||k    }|st          j        d|fd||f          dt	          j                    v st          j        t                     rt          j        t                     ndt          j        |           t          j        |          t          j        |          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x} x}x}x}x}}d
} t          |           }d}||k    }|st          j        d|fd||f          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |           t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j	        |
                    d x} x}x}}d} t          |           }d}||k    }|st          j        d|fd||f          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |           t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j	        |
                    d x} x}x}}d} t          |           }d}||k    }|st          j        d|fd||f          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |           t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j	        |
                    d x} x}x}}d} t          |           }d}||k    }|st          j        d|fd||f          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |           t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j	        |
                    d x} x}x}}d S )NzMay 31, 2026z
2026-05-31rE   )zg%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}.isoformat
}()
} == %(py11)sr   )rG   rH   rI   rJ   rK   py11zassert %(py13)spy13
2026-05-08z0.31ףp=
?z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr   rG   rH   rI   py7assert %(py9)spy9z1.59q=
ףp?r   z1:02>   r   z0:01:02)r   r'   rL   rM   rN   rO   rP   rQ   rR   rS   r   r   r   )rT   rU   rV   @py_assert7@py_assert10@py_assert9@py_format12@py_format14@py_assert6@py_format8@py_format10s              r/   &test_parse_helpers_for_youtube_exportsrn   >   s   ,In--I-7I7799I\I9\IIIIIIIIII9\IIIIIIIIIIIIIIIIIIIIIIInIIII-IIII7IIII9IIII\IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII*Gl++G+5G5577G<G7<GGGGGGGGGG7<GGGGGGGGGGGGGGGGGGGGGGGlGGGG+GGGG5GGGG7GGGG<GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG'<'4'4''''''''''4''''''''''''<'''''<''''''''''''''4'''''''''''''''''''''''''''''(=  (D( D(((((((((( D((((((((((((=(((((=(((((((((( ((((D((((((((((((((((((((((((((((("(/!&))/R/)R//////////)R////////////!/////!//////&////)////R/////////////////////////////"+2!),,22,2222222222,222222222222!22222!222222)2222,22222222222222222222222222222222222r1   c                  ^   t          t                                } | j        }|t          k    }|st	          j        d|fd|t          f          dt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |          dt          j                    v st	          j        t                    rt	          j	        t                    nddz  }dd|iz  }t          t	          j        |                    d x}}| j        }d}||k    }|st	          j        d|fd	||f          dt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |          t	          j	        |          d
z  }dd|iz  }t          t	          j        |                    d x}x}}d | j        D             }t          |          }d}||k    }	|	st	          j        d|	fd||f          dt          j                    v st	          j        t                    rt	          j	        t                    ndt	          j	        |          t	          j	        |          t	          j	        |          dz  }dd|iz  }
t          t	          j        |
                    d x}x}x}	}| j        }|j        } |            }	d}|	|k    }|st	          j        d|fd|	|f          dt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |          t	          j	        |          t	          j	        |	          t	          j	        |          dz  }
dd|
iz  }t          t	          j        |                    d x}x}x}	x}}t#          t%                                }|j        }|t&          k    }|st	          j        d|fd|t&          f          dt          j                    v st	          j        |          rt	          j	        |          ndt	          j	        |          dt          j                    v st	          j        t&                    rt	          j	        t&                    nddz  }dd|iz  }t          t	          j        |                    d x}}|j        }d}||k    }|st	          j        d|fd	||f          dt          j                    v st	          j        |          rt	          j	        |          ndt	          j	        |          t	          j	        |          d
z  }dd|iz  }t          t	          j        |                    d x}x}}d}|j        d         }||v }|slt	          j        d|fd||f          t	          j	        |          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}}d S ) NrE   z5%(py2)s
{%(py2)s = %(py0)s.detected_type
} == %(py4)sdailyr   rG   rH   rI   assert %(py6)srJ      )z1%(py2)s
{%(py2)s = %(py0)s.row_count
} == %(py5)srG   rH   py5assert %(py7)sra   c              3   &   K   | ]}|d          V  dS )r.   Nr:   .0rows     r/   	<genexpr>z@test_parse_daily_totals_and_header_only_chart.<locals>.<genexpr>K   s&      22s7|222222r1   I  r_   sumr`   rb   rc   r]   )zn%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.date_range_start
}.isoformat
}()
} == %(py9)s)rG   rH   rI   rJ   rc   zassert %(py11)sr[   chartr   r   zHeader-only)in)z%(py1)s in %(py4)spy1rI   )r   r0   detected_typer   rL   rM   rN   rO   rP   rQ   rR   rS   	row_countr*   r~   date_range_startr'   r   r;   r   warnings)rq   rT   rU   @py_format5rW   @py_assert4@py_format6rl   rk   rV   rm   @py_assert8rf   ri   r   @py_assert0@py_assert2s                    r/   -test_parse_daily_totals_and_header_only_chartr   G   s   *9;;77E6"66666666666"6666666666666566666566666666666666666"666666"6666666666666666666666666666? b ?b          ?b            5     5      ?    b                           22uz222932229c92c99999999992c99999999999939999939999992999929999c99999999999999999999999999999!=!+=++--==-==========-============5=====5======!====+====-===================================#IKK00E/-//////////-////////////5/////5/////////////////-/////-///////////////////////////?a?a?a55?a-EN1--=-----------=------=----------------------------------r1   c                     t          t                                } | j        }|t          k    }|st	          j        d|fd|t          f          dt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |          dt          j                    v st	          j        t                    rt	          j	        t                    nddz  }dd|iz  }t          t	          j        |                    d x}}| j        d         }d	}||k    }|slt	          j        d|fd
||f          t	          j	        |          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}}| j        d         }d}||k    }|slt	          j        d|fd
||f          t	          j	        |          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}}| j        d         }d}| }||k    }|slt	          j        d|fd||f          t	          j	        |          t	          j	        |          dz  }dd|iz  }	t          t	          j        |	                    d x}x}x}}| j        d         }d}||k    }|slt	          j        d|fd
||f          t	          j	        |          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}}| j        d         }d}||k    }|slt	          j        d|fd
||f          t	          j	        |          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}}| j        }t          |          }
d}|
|k    }|st	          j        d|fd|
|f          dt          j                    v st	          j        t                    rt	          j	        t                    nddt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |          t	          j	        |
          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}
x}}d | j        D             }t          |          }|sddt          j                    v st	          j        t                    rt	          j	        t                    ndt	          j	        |          t	          j	        |          dz  }t          t	          j        |                    d x}}d  | j        D             }t          |          }|sddt          j                    v st	          j        t                    rt	          j	        t                    ndt	          j	        |          t	          j	        |          dz  }t          t	          j        |                    d x}}d S )!NrE   rp   parsedr   rr   rs   rJ   r.   r}   z%(py1)s == %(py4)sr   watch_time_hoursr^   subscribers_delta   )z%(py1)s == -%(py4)srw   ra   impressionsi  impression_ctr_pctrd      )zJ%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.rows
})
} == %(py8)slen)rG   r   py3rv   rK   zassert %(py10)spy10c              3   B   K   | ]}|d          dk    o	|d         du V  dS )external_post_id
partial789r.   Nr:   ry   s     r/   r|   z@test_parse_video_table_total_and_partial_rows.<locals>.<genexpr>\   s<      ggTWs%&,6O3w<4;Oggggggr1   ,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anyc              3      K   | ]}d |v V  	dS )zpartial snapshot without viewsNr:   rz   warnings     r/   r|   z@test_parse_video_table_total_and_partial_rows.<locals>.<genexpr>]   s(      ZZw/7:ZZZZZZr1   )r   r8   r   r   rL   rM   rN   rO   rP   rQ   rR   rS   	total_rowr*   r   r   r   )r   rT   rU   r   rW   r   r   rV   r   rl   r   rf   rk   rX   @py_format11s                  r/   -test_parse_video_table_total_and_partial_rowsr   S   s:   *?+<+<==F6#66666666666#6666666666666666666666666666666666666#666666#6666666666666666666666666666G$++$++++++++++$+++++$+++++++++++++++++++++++++++++++./747/47777777777/477777/77774777777777777777777777777777/06Q6QB60B66666666660B6666606666Q66666666666666666666666666666M*1c1*c1111111111*c11111*1111c111111111111111111111111111019T91T99999999991T9999919999T999999999999999999999999999{ 3{ q q          q            3     3             v     v      {        q                             gg[a[fgggg3gggggggggggggggg3ggggg3gggggggggggggggggggggggggggggggZZ&/ZZZZ3ZZZZZZZZZZZZZZZZ3ZZZZZ3ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZr1   c           
         t          |           }|                    ddddddt                      dffddt                      dffdd	t	                      dffg
          }|j        }d}||k    }|st          j        d|fd||f          dt          j	                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |          dz  }t          j        |j                  dz   d|iz  }t          t          j        |                    d x}x}}|                                }|d         }	d}|	|k    }
|
slt          j        d|
fd|	|f          t          j        |	          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}	x}
}|d         }	d}|	|k    }
|
slt          j        d|
fd|	|f          t          j        |	          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}	x}
}|d         }	d}|	|k    }
|
slt          j        d|
fd|	|f          t          j        |	          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}	x}
}d |d         D             }t#          |          }|sddt          j	                    v st          j
        t"                    rt          j        t"                    ndt          j        |          t          j        |          dz  }t          t          j        |                    d x}}|                    d                                           }|d!         d"         }	d#}|	|k    }
|
slt          j        d|
fd|	|f          t          j        |	          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}	x}
}|d!         d$         }	d}|	|k    }
|
slt          j        d|
fd|	|f          t          j        |	          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}	x}
}|d%         }t'          |          }d}||k    }|st          j        d|fd&||f          d't          j	                    v st          j
        t&                    rt          j        t&                    nd't          j        |          t          j        |          t          j        |          d(z  }d)d*|iz  }t          t          j        |                    d x}x}x}}|d+         }	|	s:d,d-t          j        |	          iz  }t          t          j        |                    d }	|                    d.                                          d/         }|d0         d1         }	d2}|	|k    }
|
slt          j        d|
fd|	|f          t          j        |	          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}	x}
}d3 |D             }	h d4}|	|k    }
|
slt          j        d|
fd|	|f          t          j        |	          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}	x}
}d S )5N!/api/analytics/import/youtube-csvyoutube2026-06-06T10:00:00+00:00providersnapshot_atfileszGesamtwerte.csvtext/csvTabellendaten.csvzDiagrammdaten.csvdatar      rE   z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sresponseru   z
>assert %(py7)sra   created_daily_metricsrt   r   r   rs   rJ   created_snapshotsr   created_postsc              3      K   | ]}d |v V  	dS )ztotal row views=329Nr:   r   s     r/   r|   zRtest_youtube_csv_import_creates_normalized_records_and_insights.<locals>.<genexpr>p   s(      SSG$/SSSSSSr1   r   r   r   rr   z/api/analytics/overviewkpisviews_last_28_daysr}   total_views_latestdaily_viewsr_   r   r`   rb   rc   insightszassert %(py1)sr   z/api/analytics/videositemsr   r.   r4   c                     h | ]
}|d          S )r   r:   )rz   items     r/   	<setcomp>zRtest_youtube_csv_import_creates_normalized_records_and_insights.<locals>.<setcomp>z   s    888D#$888r1   >   abc123xyz456r   )rC   postr0   r8   r;   status_coderL   rM   rN   rO   rP   rQ   _format_assertmsgtextrR   rS   jsonr   getr   )r@   clientr   rT   r   rU   r   rl   payloadr   r   r   rW   overviewrk   rV   rm   @py_format2videoss                      r/   ?test_youtube_csv_import_creates_normalized_records_and_insightsr   `   s   ""F{{+#4OPP()++zBC*O,=,=zJK*IKKDE
   H 5353&555555555355555555555585555585555555555355555555555555555555555555555555mmooG*+1r1+r1111111111+r11111+1111r111111111111111111111111111&',1,'1,,,,,,,,,,'1,,,,,',,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,?#(q(#q((((((((((#q(((((#((((q(((((((((((((((((((((((((((SSwz?RSSSS3SSSSSSSSSSSSSSSS3SSSSS3SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSzz34499;;HF018S81S88888888881S8888818888S888888888888888888888888888F018S81S88888888881S8888818888S888888888888888888888888888&-3&''-2-'2----------'2------------3-----3------&----'----2-----------------------------JZZ/005577@F!9W$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$88888^<^<^<^^8<^^^^^^^^^^^8<^^^^^^8^^^^<^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^r1   c           	      
   t          |           }|                    ddddddt                      dffg          }|j        }d	}||k    }|st	          j        d
|fd||f          dt          j                    v st	          j        |          rt	          j	        |          ndt	          j	        |          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}}|                    ddddddt                      dffg          }|j        }d	}||k    }|st	          j        d
|fd||f          dt          j                    v st	          j        |          rt	          j	        |          ndt	          j	        |          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}}|                                d         }	d}|	|k    }
|
slt	          j        d
|
fd|	|f          t	          j	        |	          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}	x}
}d |                                d         D             }t          |          }|sddt          j                    v st	          j        t                    rt	          j	        t                    ndt	          j	        |          t	          j	        |          dz  }t          t	          j        |                    d x}}|                    ddddddt          d          dffg          }|j        }d	}||k    }|st	          j        d
|fd||f          d t          j                    v st	          j        |          rt	          j	        |          nd t	          j	        |          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}}|                                d         }	d!}|	|k    }
|
slt	          j        d
|
fd|	|f          t	          j	        |	          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}	x}
}|                    d"                                          }|d#         }t          |          }d$}||k    }|st	          j        d
|fd%||f          d&t          j                    v st	          j        t                    rt	          j	        t                    nd&t	          j	        |          t	          j	        |          t	          j	        |          d'z  }d(d)|iz  }t          t	          j        |                    d x}x}x}}|d#         d*         }|d+         }	d}|	|k    }
|
slt	          j        d
|
fd|	|f          t	          j	        |	          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}	x}
}|d,         }	d-}|	|k    }
|
slt	          j        d
|
fd|	|f          t	          j	        |	          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}	x}
}d S ).Nr   r   r   r   r   r   r   r   r   rE   r   firstru   rw   ra   z2026-06-06T11:00:00+00:00dupr   r   r   r   rs   rJ   c              3      K   | ]}d |v V  	dS )zduplicate file hash skippedNr:   r   s     r/   r|   z_test_duplicate_file_hash_is_skipped_and_second_changed_import_creates_deltas.<locals>.<genexpr>   s(      ^^G,7^^^^^^r1   r   r   r   rr   z2026-06-07T10:00:00+00:00   r7   secondr   z/api/analytics/videos/abc123	snapshots   r_   r   r`   rb   rc   views_deltatrendrising)rC   r   r8   r   rL   rM   rN   rO   rP   rQ   rR   rS   r   r   r   r   )r@   r   r   rT   r   rU   r   rl   r   r   r   r   rW   r   detailrk   rV   rm   latests                      r/   Ltest_duplicate_file_hash_is_skipped_and_second_changed_import_creates_deltasr   }   s)   ""FKK+#4OPP-/@/@*MNO   E
 ########################5#####5#####################################
+++#4OPP-/@/@*MNO   C
 ?!c!?c!!!!!!!!!!?c!!!!!!!!!!!!3!!!!!3!!!!!!?!!!!c!!!!!!!!!!!!!!!!!!!!!!!!!!!88::)*/a/*a//////////*a/////*////a///////////////////////////^^sxxzzR\G]^^^^3^^^^^^^^^^^^^^^^3^^^^^3^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^[[+#4OPP-B/O/O/OQ[\]^   F
 $$$$$$$$$$$$$$$$$$$$$$$$6$$$$$6$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$;;==,-22-2222222222-22222-2222222222222222222222222222222ZZ677<<>>Fk"(3"##(q(#q((((((((((#q((((((((((((3(((((3(((((("((((#((((q(((((((((((((((((((((((((((((K $F- &B& B&&&&&&&&&& B&&&&& &&&&B&&&&&&&&&&&&&&&&&&&&&&&&&&&'?&h&?h&&&&&&&&&&?h&&&&&?&&&&h&&&&&&&&&&&&&&&&&&&&&&&&&&&&&r1   )r   )/builtinsrN   _pytest.assertion.rewrite	assertionrewriterL   r   r   r   r   fastapi.testclientr   app.core.configr   app.db.sessionr	   r
   app.mainr   app.models.corer   r   "app.services.analytics_youtube_csvr   r   r   r   r   r   r   r   r   r   r   r   bytesr0   intr8   r;   rC   rY   rn   r   r   r   r   r:   r1   r/   <module>r      s                 8 8 8 8 8 8 8 8 8 8 8 8 ) ) ) ) ) ) ( ( ( ( ( ( 6 6 6 6 6 6 6 6       ? ? ? ? ? ? ? ?                            /5 / / / / # e    p5 p p p p  F F F3 3 3	. 	. 	.
[ 
[ 
[_ _ _:' ' ' ' 'r1   