1414# Importera funktioner från de specifika nedladdningsmodulerna
1515from riksdagen_api import fetch_document_ids , download_documents as download_riksdagen_documents
1616from rkrattsbaser_api import (
17- fetch_document_by_rkrattsbaser ,
18- save_document_from_rkrattsbaser ,
17+ fetch_document_by_rkrattsbaser ,
18+ save_document_from_rkrattsbaser ,
1919 convert_riksdagen_id_to_rkrattsbaser_format ,
2020 download_documents as download_rkrattsbaser_documents
2121)
@@ -28,84 +28,85 @@ def download_test_docs():
2828 """
2929 test_docs_file = "data/test-doc-ids.json"
3030 output_dir = "data/testdocs"
31-
31+
3232 print ("=== Laddar ner testdokument ===" )
33-
33+
3434 # Kontrollera att filen med test-dokument-ID:n finns
3535 if not os .path .exists (test_docs_file ):
3636 print (f"✗ Filen { test_docs_file } hittades inte." )
3737 return False
38-
38+
3939 try :
4040 # Läs test-dokument-ID:n från JSON-filen (med kommentarstöd)
4141 with open (test_docs_file , 'r' , encoding = 'utf-8' ) as f :
4242 content = f .read ()
43-
43+
4444 # Ta bort /* */ kommentarer
4545 content = re .sub (r'/\*.*?\*/' , '' , content , flags = re .DOTALL )
4646 # Ta bort // kommentarer (endast från början av rad eller efter whitespace)
4747 content = re .sub (r'^\s*//.*$' , '' , content , flags = re .MULTILINE )
4848 content = re .sub (r'\s+//.*$' , '' , content , flags = re .MULTILINE )
49-
49+
5050 test_docs = json .loads (content )
51-
51+
5252 if not test_docs :
5353 print ("Inga testdokument att ladda ner." )
5454 return True
55-
55+
5656 print (f"Hittade { len (test_docs )} testdokument att ladda ner" )
5757 print (f"Sparar i katalog: { output_dir } " )
58-
58+
5959 # Skapa katalog om den inte finns
6060 os .makedirs (output_dir , exist_ok = True )
61-
61+
6262 successful_downloads = 0
6363 failed_downloads = 0
64-
64+
6565 # Ladda ner varje testdokument
6666 for i , doc_info in enumerate (test_docs , 1 ):
6767 document_id = doc_info .get ("document_id" )
6868 comment = doc_info .get ("comment" , "" )
69-
69+
7070 if not document_id :
7171 print (f"⚠ Dokument { i } saknar document_id, hoppar över" )
7272 failed_downloads += 1
7373 continue
74-
74+
7575 print (f"[{ i } /{ len (test_docs )} ] { document_id } " )
7676 if comment :
7777 print (f" Kommentar: { comment } " )
7878
7979 # Konvertera dokument-ID till rätt format för Regeringskansliet
8080 converted_id = convert_riksdagen_id_to_rkrattsbaser_format (document_id )
81-
81+
8282 # Ladda ner dokumentet från Regeringskansliet
8383 document_data = fetch_document_by_rkrattsbaser (converted_id )
8484 if document_data :
8585 rkrattsbaser_dir = os .path .join (output_dir , "rkrattsbaser" )
86- success = save_document_from_rkrattsbaser (document_id , document_data , rkrattsbaser_dir )
86+ success = save_document_from_rkrattsbaser (
87+ document_id , document_data , rkrattsbaser_dir )
8788 else :
8889 success = False
89-
90+
9091 if success :
9192 successful_downloads += 1
9293 else :
9394 failed_downloads += 1
94-
95+
9596 # Kort paus mellan nedladdningar
9697 time .sleep (0.5 )
97-
98+
9899 # Sammanfattning
99100 print ("\n === Sammanfattning testdokument ===" )
100101 print (f"Totalt testdokument: { len (test_docs )} " )
101102 print (f"Lyckade nedladdningar: { successful_downloads } " )
102103 print (f"Misslyckade nedladdningar: { failed_downloads } " )
103-
104+
104105 if successful_downloads > 0 :
105106 print (f"Testdokument sparade i: { os .path .abspath (output_dir )} " )
106-
107+
107108 return failed_downloads == 0
108-
109+
109110 except json .JSONDecodeError as e :
110111 print (f"✗ Fel vid parsing av { test_docs_file } : { e } " )
111112 return False
@@ -118,17 +119,29 @@ def main():
118119 """
119120 Huvudfunktion som koordinerar hämtning av dokument-ID:n och nedladdning av dokument.
120121 """
121- parser = argparse .ArgumentParser (description = 'Ladda ner SFS-dokument från Regeringskansliets söktjänst eller Riksdagens öppna API' )
122- parser .add_argument ('--ids' , default = 'all' ,
123- help = 'Kommaseparerad lista med dokument-ID:n att ladda ner, eller "all" för att hämta alla från Riksdagen (default: all)' )
122+ parser = argparse .ArgumentParser (
123+ description = 'Ladda ner SFS-dokument från Regeringskansliets söktjänst eller Riksdagens öppna API' )
124+ parser .add_argument (
125+ '--ids' ,
126+ default = 'all' ,
127+ help = 'Kommaseparerad lista med dokument-ID:n att ladda ner, eller "all" för att hämta alla från Riksdagen (default: all)' )
124128 parser .add_argument ('--out' , default = 'sfs_docs' ,
125129 help = 'Mapp att spara nedladdade dokument i (default: sfs_docs)' )
126- parser .add_argument ('--source' , choices = ['riksdagen' , 'rkrattsbaser' ], default = 'rkrattsbaser' ,
127- help = 'Välj källa för nedladdning: riksdagen (HTML) eller rkrattsbaser (JSON via Elasticsearch) (default: rkrattsbaser)' )
128- parser .add_argument ('--year' , type = int ,
129- help = 'Filtrera dokument för specifikt årtal (t.ex. 2025 för sfs-2025-xxx). Fungerar endast med --ids all och --source riksdagen' )
130- parser .add_argument ('--test-docs' , action = 'store_true' ,
131- help = 'Ladda ner testdokument från data/test-doc-ids.json till data/testdocs' )
130+ parser .add_argument (
131+ '--source' ,
132+ choices = [
133+ 'riksdagen' ,
134+ 'rkrattsbaser' ],
135+ default = 'rkrattsbaser' ,
136+ help = 'Välj källa för nedladdning: riksdagen (HTML) eller rkrattsbaser (JSON via Elasticsearch) (default: rkrattsbaser)' )
137+ parser .add_argument (
138+ '--year' ,
139+ type = int ,
140+ help = 'Filtrera dokument för specifikt årtal (t.ex. 2025 för sfs-2025-xxx). Fungerar endast med --ids all och --source riksdagen' )
141+ parser .add_argument (
142+ '--test-docs' ,
143+ action = 'store_true' ,
144+ help = 'Ladda ner testdokument från data/test-doc-ids.json till data/testdocs' )
132145
133146 args = parser .parse_args ()
134147
@@ -141,7 +154,7 @@ def main():
141154 print (f"Källa: { args .source } " )
142155 if args .year :
143156 print (f"Filtrerar för år: { args .year } " )
144-
157+
145158 # Hämta dokument-ID:n
146159 if args .ids == 'all' :
147160 document_ids = fetch_document_ids (args .year )
@@ -153,30 +166,32 @@ def main():
153166 # Varning om --year används med specifika IDs
154167 if args .year :
155168 print ("⚠ --year parameter ignoreras när specifika dokument-ID:n anges med --ids." )
156-
169+
157170 if not document_ids :
158171 print ("Inga dokument-ID:n hittades. Avslutar." )
159172 return
160-
173+
161174 # Skapa katalog för nedladdade författningar
162175 output_dir = args .out
163176 print (f"\n Laddar ner författningar till katalogen: { output_dir } " )
164177
165178 # Ladda ner författningar baserat på källa
166179 if args .source == 'riksdagen' :
167- successful_downloads , failed_downloads = download_riksdagen_documents (document_ids , output_dir )
180+ successful_downloads , failed_downloads = download_riksdagen_documents (
181+ document_ids , output_dir )
168182 elif args .source == 'rkrattsbaser' :
169- successful_downloads , failed_downloads = download_rkrattsbaser_documents (document_ids , output_dir )
170-
183+ successful_downloads , failed_downloads = download_rkrattsbaser_documents (
184+ document_ids , output_dir )
185+
171186 # Sammanfattning
172187 print ("\n === Sammanfattning ===" )
173188 print (f"Totalt dokument-ID:n: { len (document_ids )} " )
174189 print (f"Lyckade nedladdningar: { successful_downloads } " )
175190 print (f"Misslyckade nedladdningar: { failed_downloads } " )
176-
191+
177192 if successful_downloads > 0 :
178193 print (f"Författningar sparade i katalogen: { os .path .abspath (output_dir )} " )
179194
180195
181196if __name__ == "__main__" :
182- main ()
197+ main ()
0 commit comments