1010import datetime
1111import argparse
1212from pathlib import Path
13+ from dotenv import load_dotenv
14+
15+ # Ladda miljövariabler från .env-fil
16+ load_dotenv ()
1317
1418def check_required_env_vars ():
1519 """Kontrollera att alla nödvändiga miljövariabler är satta"""
@@ -60,42 +64,42 @@ def configure_aws_cli():
6064 print ("✓ AWS CLI konfigurerad" )
6165 return True
6266
63- def upload_sfs_folder (output_base_dir = "" ):
64- """Ladda upp SFS-mappen till Cloudflare R2"""
67+ def upload_html_site (output_base_dir = "" ):
68+ """Ladda upp hela HTML-siten (eli/ + index-sidor) till Cloudflare R2"""
6569 bucket_name = os .getenv ('CLOUDFLARE_R2_BUCKET_NAME' )
6670 account_id = os .getenv ('CLOUDFLARE_R2_ACCOUNT_ID' )
6771 endpoint_url = f"https://{ account_id } .r2.cloudflarestorage.com"
68-
72+
6973 # Kontrollera att mappen finns
7074 if not Path (output_base_dir ).exists ():
7175 print (f"Error: Mappen { output_base_dir } finns inte. Kör först HTML-export." )
7276 return False
73-
74- # Räkna HTML- filer som ska laddas upp
77+
78+ # Räkna filer som ska laddas upp
7579 html_files = list (Path (output_base_dir ).rglob ('*.html' ))
76- file_count = len (html_files )
77- print (f"Laddar upp { output_base_dir } -mappen ({ file_count } HTML-filer)..." )
78-
80+ css_files = list (Path (output_base_dir ).rglob ('*.css' ))
81+ js_files = list (Path (output_base_dir ).rglob ('*.js' ))
82+ file_count = len (html_files ) + len (css_files ) + len (js_files )
83+ print (f"Laddar upp HTML-siten från { output_base_dir } ({ len (html_files )} HTML, { len (css_files )} CSS, { len (js_files )} JS-filer)..." )
84+
7985 cmd = [
80- 'aws' , 's3' , 'sync' , f'{ output_base_dir } /' , f's3://{ bucket_name } /sfs/ ' ,
86+ 'aws' , 's3' , 'sync' , f'{ output_base_dir } /' , f's3://{ bucket_name } /' ,
8187 '--endpoint-url' , endpoint_url ,
8288 '--delete' ,
8389 '--cache-control' , 'public, max-age=3600' ,
84- '--content-type' , 'text/html' ,
8590 '--exclude' , '*.md' ,
8691 '--exclude' , '.DS_Store' ,
87- '--include' , '*.html' ,
8892 '--cli-read-timeout' , '0' ,
8993 '--cli-connect-timeout' , '60'
9094 ]
9195
9296 env = os .environ .copy ()
9397 env ['AWS_DEFAULT_REGION' ] = 'us-east-1'
94-
98+
9599 try :
96100 print (f"Kör kommando: { ' ' .join (cmd )} " )
97101 result = subprocess .run (cmd , env = env , check = True , capture_output = True , text = True )
98- print (f"✓ { output_base_dir } -mappen uppladdad ({ file_count } HTML- filer)" )
102+ print (f"✓ HTML-siten uppladdad ({ file_count } filer)" )
99103
100104 # Visa AWS CLI output om det finns
101105 if result .stdout .strip ():
@@ -108,54 +112,82 @@ def upload_sfs_folder(output_base_dir=""):
108112
109113 return True
110114 except subprocess .CalledProcessError as e :
111- print (f"Error vid uppladdning av { output_base_dir } -mappen : { e } " )
115+ print (f"Error vid uppladdning av HTML-siten : { e } " )
112116 if e .stderr :
113117 print (f"Stderr: { e .stderr } " )
114118 if e .stdout :
115119 print (f"Stdout: { e .stdout } " )
116120 return False
117121
118- def upload_index_pages (output_base_dir = "" ):
122+ def upload_index_pages (output_base_dir = "" , json_input_dir = None ):
119123 """Ladda upp index-sidor till Cloudflare R2"""
120124 bucket_name = os .getenv ('CLOUDFLARE_R2_BUCKET_NAME' )
121125 account_id = os .getenv ('CLOUDFLARE_R2_ACCOUNT_ID' )
122126 endpoint_url = f"https://{ account_id } .r2.cloudflarestorage.com"
123-
127+
124128 # Hitta JSON-filerna för att generera index-sidor
125- json_input_dir = "sfs_json" # Standard JSON-mapp
129+ if json_input_dir is None :
130+ # Försök hitta JSON-mappen automatiskt
131+ possible_paths = ["../sfs-jsondata" , "sfs_json" , "data/sfs_json" ]
132+ json_input_dir = None
133+ for path in possible_paths :
134+ if Path (path ).exists ():
135+ json_input_dir = path
136+ break
137+
138+ if json_input_dir is None :
139+ print (f"Varning: Kunde inte hitta JSON-mappen. Hoppar över index-sidor." )
140+ print (f"Prövade sökvägarna: { ', ' .join (possible_paths )} " )
141+ return True # Inte ett kritiskt fel
142+
126143 if not Path (json_input_dir ).exists ():
127- print (f"Error : JSON-mappen { json_input_dir } finns inte." )
128- return False
144+ print (f"Varning : JSON-mappen { json_input_dir } finns inte. Hoppar över index-sidor ." )
145+ return True # Inte ett kritiskt fel
129146
130147 # Generera index-sidor i output_base_dir
131148 print (f"Genererar index-sidor i { output_base_dir } ..." )
149+ print (f"Använder JSON-katalog: { json_input_dir } " )
150+
151+ # Konvertera till absoluta sökvägar
152+ json_input_abs = str (Path (json_input_dir ).resolve ())
153+ output_base_abs = str (Path (output_base_dir ).resolve ())
132154
133155 # Skapa index.html (30 senaste)
134- index_file = Path (output_base_dir ) / "index.html"
135- latest_file = Path (output_base_dir ) / "latest.html"
156+ index_file = Path (output_base_abs ) / "index.html"
157+ latest_file = Path (output_base_abs ) / "latest.html"
136158
137159 try :
138160 # Kör populate_index_pages.py för att skapa index-sidor
139- subprocess .run ([
161+ result1 = subprocess .run ([
140162 'python' , 'exporters/html/populate_index_pages.py' ,
141- '--input' , json_input_dir ,
163+ '--input' , json_input_abs ,
142164 '--output' , str (index_file ),
143165 '--limit' , '30'
144166 ], check = True , capture_output = True , text = True )
145167
146- subprocess .run ([
168+ result2 = subprocess .run ([
147169 'python' , 'exporters/html/populate_index_pages.py' ,
148- '--input' , json_input_dir ,
170+ '--input' , json_input_abs ,
149171 '--output' , str (latest_file ),
150172 '--limit' , '10'
151173 ], check = True , capture_output = True , text = True )
152174
153175 print (f"✓ Index-sidor genererade: { index_file } , { latest_file } " )
154176
177+ # Visa output från populate_index_pages.py om det finns
178+ if result1 .stdout .strip ():
179+ print ("Output från index.html-generering:" )
180+ print (result1 .stdout .strip ())
181+ if result2 .stdout .strip ():
182+ print ("Output från latest.html-generering:" )
183+ print (result2 .stdout .strip ())
184+
155185 except subprocess .CalledProcessError as e :
156186 print (f"Error vid generering av index-sidor: { e } " )
157187 if e .stderr :
158188 print (f"Stderr: { e .stderr } " )
189+ if e .stdout :
190+ print (f"Stdout: { e .stdout } " )
159191 return False
160192
161193 # Kontrollera att index-filerna nu finns
@@ -271,13 +303,19 @@ def main():
271303 formatter_class = argparse .RawDescriptionHelpFormatter ,
272304 epilog = """
273305Exempel:
274- python upload_to_r2.py --output-base-dir /path/to/export # Ladda upp från specifik mapp
306+ python upload_to_r2.py --output-base-dir output/html_site # Ladda upp från output/html_site
307+ python upload_to_r2.py --output-base-dir output/html_site --json-dir ../sfs-jsondata # Med JSON-mapp
275308 """
276309 )
277310 parser .add_argument (
278311 '--output-base-dir' ,
279- default = '' ,
280- help = 'Baskatalog som innehåller HTML-filerna att ladda upp'
312+ default = 'output/html_site' ,
313+ help = 'Baskatalog som innehåller HTML-filerna (eli/, index.html, etc.)'
314+ )
315+ parser .add_argument (
316+ '--json-dir' ,
317+ default = None ,
318+ help = 'Sökväg till JSON-mappen (för att generera index-sidor)'
281319 )
282320
283321 args = parser .parse_args ()
@@ -305,19 +343,19 @@ def main():
305343 # Utför uppladdningar
306344 print ()
307345 success = True
308-
309- # Skapa korrekt sökväg till sfs-mappen
310- sfs_path = str (Path (args .output_base_dir ) / "sfs" ) if args .output_base_dir else "sfs"
311346
312- if not upload_sfs_folder (sfs_path ):
347+ # Generera och ladda upp index-sidor först
348+ if not upload_index_pages (args .output_base_dir , args .json_dir ):
313349 success = False
314-
315- if not upload_index_pages (args .output_base_dir ):
350+
351+ # Ladda upp hela HTML-siten (eli/ + index-sidor)
352+ if not upload_html_site (args .output_base_dir ):
316353 success = False
317-
354+
355+ # Ladda upp sammanfattning
318356 if not upload_summary ():
319357 success = False
320-
358+
321359 print ()
322360 if success :
323361 print ("✓ Alla filer har laddats upp till Cloudflare R2!" )
0 commit comments