
    h=                     :   d Z ddlZddlZddlZddlZddlmZ ddlmZmZm	Z	 ddl
Z
 ej        ej        d ej        d           ej                    g            ej        e          Z G d d	          Z G d
 d          Zd Zedk    r e             dS dS )aX  
GeoNames to Google Sheets Data Synchronizer
============================================

This script downloads country data from GeoNames.org and uploads it to a Google Sheets document.
Data source: https://download.geonames.org/export/dump/countryInfo.txt
Target: Google Sheets spreadsheet

Author: Claude Code Assistant
Created: 2025-01-13
    N)datetime)ListDictOptionalz)%(asctime)s - %(levelname)s - %(message)szgeonames_sync.log)levelformathandlersc                   B    e Zd ZdZd Zdee         fdZd	dedefdZ	dS )
GeoNamesDownloaderz2Downloads and processes country data from GeoNamesc                 "    d| _         g | _        d S )Nz9https://download.geonames.org/export/dump/countryInfo.txt)country_info_urldata)selfs    >/home/www/claudev.cz/jirka2/tabulka_data/geonames_to_sheets.py__init__zGeoNamesDownloader.__init__$   s     [			    returnc                    	 t                               d           t          j        | j        d          }|                                 |j                                                            d          }d}g }|D ]O}|	                    d          r$|s!d|v rt                               d|            <|                                sQ|                    d	          }t          |          d
k    ri d|d         d|d         d|d         d|d         d|d         d|d         d|d         d|d         d|d         d|d         d|d          d!|d"         d#|d$         d%|d&         d'|d(         d)|d*         d+|d,         |d-         t          |          d
k    r|d
         nd.d/}|                    |           Qt                               d0t          |           d1           || _        |S # t          j        $ r#}t                               d2|             d3}~wt          $ r#}t                               d4|             d3}~ww xY w)5z*Download country information from GeoNamesz)Downloading country data from GeoNames...   )timeout
F#ISOzHeader info: 	   
iso_alpha2r   
iso_alpha3   iso_numeric   	fips_code   country_name   capital   area_km2   
population   	continent   tld	   currency_code
   currency_name   phone   postal_code_format   postal_code_regex   	languages   
geoname_id       )
neighboursequivalent_fips_codezSuccessfully downloaded z
 countrieszError downloading data: NzError processing data: )loggerinforequestsgetr   raise_for_statustextstripsplit
startswithlenappendr   RequestExceptionerror	Exception)	r   responselinesheader_foundprocessed_datalinefieldscountry_dataes	            r   download_country_dataz(GeoNamesDownloader.download_country_data(   s   9	KKCDDD|D$92FFFH%%''' M''))//55E LN $8 $8??3'' ' <ETMM$:D$:$:;;;zz||  D))v;;"$$$$fQi$$fQi$ &vay$ $VAY	$
 'q	$ "6!9$ #F1I$ %fQi$ $VAY$ vay$ ($ ($  $ -fRj$ ,VBZ$  $VBZ!$" %fRj#$$ '-Rj>A&kkB>N>Nr

TV'$ $ $L* #)),777KKR3~3F3FRRRSSS&DI!!( 	 	 	LL7A77888 	 	 	LL6166777	s$   G?H IH//I<IIcountries_data.csvfilenamec                    | j         st          d          d| }	 t          |ddd          5 }| j         rc| j         d                                         }t	          j        ||          }|                                 |                    | j                    d	d	d	           n# 1 swxY w Y   t          	                    d
|            |S # t          $ r#}t                              d|             d	}~ww xY w)z Save downloaded data to CSV filez3No data to save. Run download_country_data() first.z)/home/www/claudev.cz/jirka2/tabulka_data/wr>   zutf-8)newlineencodingr   )
fieldnamesNzData saved to zError saving CSV: )r   
ValueErroropenkeyscsv
DictWriterwriteheader	writerowsrA   rB   rN   rM   )r   rY   filepathcsvfiler^   writerrV   s          r   save_to_csvzGeoNamesDownloader.save_to_csve   sS   y 	TRSSSIxII	hR'BBB 0g9 0!%1!2!2!4!4J ^G
KKKF&&((($$TY///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 KK333444O 	 	 	LL1a11222	s;   C A+B'C 'B++C .B+/!C 
C>C99C>N)rX   )
__name__
__module____qualname____doc__r   r   r   rW   strri    r   r   r   r   !   sp        <<  ;tDz ; ; ; ;z C 3      r   r   c                   F    e Zd ZdZdefdZd Zddee         dede	fd	Z
d
S )GoogleSheetsUploaderz'Handles uploading data to Google Sheetsspreadsheet_idc                 0    || _         d| _        d | _        d S )Nzgoogle_credentials.json)rr   credentials_fileservice)r   rr   s     r   r   zGoogleSheetsUploader.__init__~   s    , 9r   c                     	 t                               d           t                               d           dS # t          $ r(}t                               d|            Y d}~dS d}~ww xY w)z#Setup Google Sheets API credentialsz+Setting up Google Sheets API credentials...z>Google API credentials setup required - see setup instructionsTzError setting up credentials: NF)rA   rB   warningrN   rM   )r   rV   s     r   setup_credentialsz&GoogleSheetsUploader.setup_credentials   s{    	KKEFFFNN[\\\ 4 	 	 	LL=!==>>>55555	s   48 
A*A%%A*Sheet1r   
sheet_namer   c                    	 |                                  st                              d           dS t                              dt	          |           d           |st                              d           dS t          |d                                                   }|g}|D ]#|                    fd|D                        $t                              dt	          |           d	           t                              d
           dS # t          $ r(}t                              d|            Y d}~dS d}~ww xY w)zUpload data to Google SheetszFailed to setup credentialsFz
Uploading z rows to Google Sheets...zNo data to uploadr   c                 V    g | ]%}t                              |d                     &S )r>   )rn   rD   ).0headerrows     r   
<listcomp>z4GoogleSheetsUploader.upload_data.<locals>.<listcomp>   s/    NNNFs37762#6#677NNNr   z	Prepared z# rows (including header) for uploadz"Data upload completed successfullyTzError uploading data: N)
rx   rA   rM   rB   rJ   rw   listra   rK   rN   )r   r   rz   headersvaluesrV   r   s         @r   upload_dataz GoogleSheetsUploader.upload_data   s^   $	))++ :;;;uKKISYYIIIJJJ  2333u 47<<>>**GYF  P PNNNNgNNNOOOOKKTCKKTTTUUU KK<===4 	 	 	LL5!5566655555	s$   .D AD <BD 
EE  EN)ry   )rj   rk   rl   rm   rn   r   rx   r   r   boolr   ro   r   r   rq   rq   {   sv        11s    
  "& &T
 & &4 & & & & & &r   rq   c                     t                               d           d} 	 t                      }|                                }|                                }t                               d|            t          |           }|                    |          }|rt                               d           dS t                               d           dS # t          $ r#}t                               d|             d}~ww xY w)zMain execution functionz2Starting GeoNames to Google Sheets synchronization,1b4GKYaRVh_V3dN4Ok01EiUHdpoQxr0a_6ptoSZWsj_ozBackup CSV created: z'Synchronization completed successfully!z$Synchronization failed during uploadzSynchronization failed: N)	rA   rB   r   rW   ri   rq   r   rM   rN   )GOOGLE_SHEETS_ID
downloaderrU   csv_fileuploadersuccessrV   s          r   mainr      s   
KKDEEE F'))
!7799 ))++5855666 ((899&&|44 	AKKABBBBBLL?@@@@@   333444s   BC 3C 
C<C77C<__main__)rm   rC   rb   iologgingr   typingr   r   r   jsonbasicConfigINFOFileHandlerStreamHandler	getLoggerrj   rA   r   rq   r   ro   r   r   <module>r      sY  
 
  



 				        ' ' ' ' ' ' ' ' ' '   
,6/00    
	8	$	$X X X X X X X Xt? ? ? ? ? ? ? ?B  : zDFFFFF r   