#!/usr/bin/env python3 """ Inicjalizacja bazy danych Prawicowy Dashboard. Uruchom raz: python3 init_db.py Wypełnia DB danymi z aktualnych wartości hardcoded w JS. """ import os, sys sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from app import app, db, User, RssSource, Politician, PartyMember, SiteSetting with app.app_context(): db.create_all() # ── USERS ────────────────────────────────────────────────────────────── if not User.query.first(): u = User(username='admin', email='admin@dashboard.local', is_admin=True) u.set_password('admin123') db.session.add(u) print('Użytkownik: admin / admin123 ← ZMIEŃ HASŁO!') # ── USTAWIENIA ───────────────────────────────────────────────────────── settings = [ ('site_title', 'Prawicowy Dashboard — Wielka Polska wróci, pogonimy Rudego', 'Tytuł strony widoczny w zakładce przeglądarki i nagłówku'), ('site_subtitle', 'Agregator prawicowych mediów', 'Podtytuł/opis strony'), ('ticker_speed', '75', 'Prędkość górnego tickera (sekundy na pełen cykl — mniejsza = szybciej)'), ('news_filter', 'Tusk', 'Słowo kluczowe do filtrowania dolnego paska newsów'), ('radio_maryja_url', 'http://51.68.135.155:80/stream', 'URL strumienia Radio Maryja'), ] for key, val, desc in settings: if not SiteSetting.query.filter_by(key=key).first(): db.session.add(SiteSetting(key=key, value=val, description=desc)) # ── ŹRÓDŁA RSS ───────────────────────────────────────────────────────── rss = [ # main sources ('republika', 'Dorzeczy.pl', 'https://dorzeczy.pl/feed', '📺', 'https://telewizjarepublika.pl', 'src-republika', 'dot-republika', 'main', 1), ('wpolsce', 'Niezależna.pl', 'https://niezalezna.pl/feed', '🎙', 'https://wpolsce.tv', 'src-wpolsce', 'dot-wpolsce', 'main', 2), ('trwam', 'Radio Maryja / Trwam', 'https://www.radiomaryja.pl/feed/', '⛪', 'https://trwam.pl', 'src-trwam', 'dot-trwam', 'main', 3), # opposition ('opozycja_tvp', 'TVP Info', 'https://tvp.info/feed', '📡', 'https://tvpinfo.pl', 'src-opozycja', 'dot-tvp', 'opposition', 10), ('opozycja_tvp', 'TVP Info (backup)', 'https://www.tvp.info/rss', '📡', 'https://tvpinfo.pl', 'src-opozycja', 'dot-tvp', 'opposition', 11), ('opozycja_tvn', 'TVN24', 'https://tvn24.pl/wiadomosci-z-kraju,3.xml', '📺', 'https://tvn24.pl', 'src-opozycja', 'dot-tvn', 'opposition', 12), ('opozycja_wyborcza', 'Gazeta Wyborcza', 'https://rss.wyborcza.pl/wyborcza.rss', '📰', 'https://wyborcza.pl', 'src-opozycja', 'dot-wyborcza', 'opposition', 13), ] for group_id, name, url, icon, website, css, dot, cat, order in rss: exists = RssSource.query.filter_by(group_id=group_id, url=url).first() if not exists: db.session.add(RssSource(group_id=group_id, name=name, url=url, icon=icon, website=website, css_class=css, dot_id=dot, category=cat, active=True, order=order)) # ── POLITYCY (ticker górny + sidebar) ────────────────────────────────── pols = [ ('Karol Nawrocki', 'Kandydat na Prezydenta RP', 'img/nawrocki.jpg', 'Polska nie jest niczyją kolonią. Jestem człowiekiem wolnym.', 'pis', True, True, 'nawrocki', 1), ('Jarosław Kaczyński','Prezes PiS', 'img/kaczynski.jpg', 'Będziemy bronić polskich rodzin, bo rodzina jest wszystkim.', 'pis', True, True, 'kaczynski', 2), ('Mateusz Morawiecki','b. Premier RP', 'img/morawiecki.jpg', 'Polska jest gotowa na każde wyzwanie — gospodarcze i militarne.', 'pis', True, False, None, 3), ('Zbigniew Ziobro', 'b. Minister Sprawiedliwości', 'img/ziobro.jpg', 'Prawo musi stać po stronie ofiar, nie chronić przestępców.', 'pis', True, True, 'ziobro', 4), ('Mariusz Błaszczak', 'Poseł PiS, b. Minister Obrony', 'img/blaszczak.jpg', 'Bezpieczeństwo Polski jest naszym absolutnym priorytetem.', 'pis', True, True, 'blaszczak', 5), ('Przemysław Czarnek','Poseł PiS, b. Minister Edukacji', 'img/czarnek.jpg', 'Rodzina i naród — fundamenty, których bronić będziemy zawsze.', 'pis', True, True, 'czarnek', 6), ('Beata Szydło', 'Eurodeputowana, b. Premier', 'img/szydlo.jpg', 'Przyszłość Polski należy do tych, którzy jej wiernie służą.', 'pis', True, False, None, 7), ('Donald Trump', 'Prezydent USA (47.)', 'img/trump.jpg', 'Poland is one of the greatest allies the United States has ever had.', 'inne', True, True, 'trump', 8), ('Jacek Sasin', 'Poseł PiS, b. Wicepremier', 'img/sasin.jpg', 'Polska energetyka to polska suwerenność i bezpieczeństwo.', 'pis', True, False, None, 9), ('Joachim Brudziński','Poseł PiS, b. Minister MSWiA', 'img/brudzinski.jpg', 'Polska silna w Europie, Polska silna w NATO — to nasz cel.', 'pis', True, False, None, 10), ('Mariusz Kamiński', 'Poseł PiS', 'img/kaminski.jpg', 'Służyłem Polsce uczciwie. Historia to oceni.', 'pis', True, False, None, 11), ('Anna Fotyga', 'Eurodeputowana PiS', 'img/fotyga.jpg', 'Polska musi mieć silny głos w polityce zagranicznej Europy.', 'pis', True, False, None, 12), ('Ryszard Czarnecki', 'Europoseł PiS', 'img/czarnecki.jpg', 'Europa potrzebuje silnych państw narodowych, nie federacji.', 'pis', True, False, None, 13), ('Marek Suski', 'Poseł PiS', 'img/suski.jpg', 'PiS zawsze stoi po stronie zwykłych Polaków.', 'pis', True, False, None, 14), ] for name, role, img, quote, party, ticker, sidebar, popup, order in pols: if not Politician.query.filter_by(name=name).first(): db.session.add(Politician(name=name, role=role, img_path=img, quote=quote, party=party, ticker_visible=ticker, sidebar_visible=sidebar, popup_key=popup, order=order, active=True)) # ── KKP — KONFEDERACJA KORONY POLSKIEJ ───────────────────────────────── kkp = [ # is_leader=True dict(party_slug='kkp', section='', name='Grzegorz Braun', role='Lider KKP · Poseł na Sejm RP X kadencji', img_url='https://api.sejm.gov.pl/sejm/term10/MP/34/photo', married=True, children=5, religious=True, is_leader=True, order=0, desc_type='fail', description='Doktor filozofii, który publicznie kwestionuje fakty naukowe i historyczne. ' 'Zasłynął ugaszeniem gaśnicą proszkową chanukowej menory w Sejmie (grudzień 2023) — ' 'czyn potępiony przez wszystkie kluby poselskie i Prezydium Sejmu. ' 'Regularnie głosi teorie spiskowe o "wielkim resecie", odmawiał uznania, że Niemcy ' 'wywołały II Wojnę Światową, negował skuteczność szczepień. Wielokrotnie ukarany ' 'przez Marszałka Sejmu.'), # Section 1 dict(party_slug='kkp', section='⚡ Posłowie Konfederacji Korony Polskiej', name='Roman Fritz', role='Poseł KKP X kadencji', img_url='https://api.sejm.gov.pl/sejm/term10/MP/81/photo', married=True, children=1, religious=True, is_leader=False, order=1, desc_type='fail', description='Działacz związany ze środowiskami nacjonalistycznymi. W Sejmie głównie ' 'nieobecny w debacie merytorycznej — sławą zawdzięcza bycie fotografowanym ' 'obok Brauna. Brak widocznego dorobku legislacyjnego.'), dict(party_slug='kkp', section='⚡ Posłowie Konfederacji Korony Polskiej', name='Włodzimierz Skalik', role='Poseł KKP X kadencji', img_url='https://api.sejm.gov.pl/sejm/term10/MP/340/photo', married=True, children=2, religious=True, is_leader=False, order=2, desc_type='fail', description='Polityk o mało wyrazistym profilu, znany przede wszystkim ze współpracy ' 'z Braunem. Jego aktywność sejmowa ogranicza się głównie do głosowań ' 'partyjnych — brak własnych inicjatyw ustawodawczych.'), dict(party_slug='kkp', section='⚡ Posłowie Konfederacji Korony Polskiej', name='Sławomir Zawiślak', role='Poseł KKP X kadencji · Były poseł PiS', img_url='https://api.sejm.gov.pl/sejm/term10/MP/446/photo', married=True, children=3, religious=True, is_leader=False, order=3, desc_type='fail', description='Polityczny wędrowiec — były poseł PiS, który przeszedł do KKP. ' 'Słynie z gwałtownych zwrotów ideologicznych. Trudno wskazać spójny ' 'dorobek legislacyjny łączący jego kolejne wcielenia partyjne.'), # Section 2 — events dict(party_slug='kkp', section='🔎 Kontrowersyjne dokonania lidera (wybór)', name='Gaśnica na menorę', role='Sejm RP, grudzień 2023', img_url='', initials='🧯', bg_color='#7c0000', married=False, children=0, religious=False, is_leader=False, order=4, desc_type='fail', description='Podczas uroczystości chanukowych w Sejmie Braun ugasił zapalony świecznik ' 'gaśnicą proszkową. Czyn potępiony przez Marszałka, wszystkie kluby i ambasadę USA. ' 'Braun stracił diety i wynagrodzenie na 3 miesiące.'), dict(party_slug='kkp', section='🔎 Kontrowersyjne dokonania lidera (wybór)', name='"Niemcy nie wywołały II WŚ"', role='Wywiad telewizyjny, 2022', img_url='', initials='📺', bg_color='#7c0000', married=False, children=0, religious=False, is_leader=False, order=5, desc_type='fail', description='W nagraniu z 2022 r. Braun zakwestionował powszechnie uznany fakt ' 'historyczny o odpowiedzialności Niemiec za wybuch II Wojny Światowej. ' 'Historycy, IPN i organizacje kombatanckie wyrazili zdecydowany sprzeciw.'), dict(party_slug='kkp', section='🔎 Kontrowersyjne dokonania lidera (wybór)', name='Teorie spiskowe o szczepionkach', role='Kampania antycovidowa, 2020–2023', img_url='', initials='💉', bg_color='#7c0000', married=False, children=0, religious=False, is_leader=False, order=6, desc_type='fail', description='Aktywnie propagował dezinformację medyczną — twierdzenia o mikroczipach ' 'w szczepionkach, "eksperymencie genetycznym" i planowanym ludobójstwie. ' 'Treści zdementowane przez WHO, EMA i polskie instytucje medyczne.'), ] for d in kkp: if not PartyMember.query.filter_by(party_slug='kkp', name=d['name']).first(): db.session.add(PartyMember(**d, active=True)) # ── KONFEDERACJA WIN ──────────────────────────────────────────────────── konf = [ dict(party_slug='konfederacja', section='', name='Sławomir Mentzen', role='Prezes KORWiN · Lider Konfederacji WiN', img_url='https://api.sejm.gov.pl/sejm/term10/MP/241/photo', married=True, children=3, religious=False, is_leader=True, order=0, desc_type='merit', description='Doktor nauk ekonomicznych (UMK Toruń, rozprawa obroniona z wyróżnieniem). ' 'Licencjonowany doradca podatkowy i makler papierów wartościowych. ' 'Właściciel kancelarii doradztwa podatkowego. Zna 5 języków obcych. ' 'Autor bestsellerowej książki "Tak źle, jak myślisz, nie jest". ' 'Lider Konfederacji w wyborach 2023 — partia zdobyła 7,2% głosów i 18 mandatów.'), # Section 1 – leadership dict(party_slug='konfederacja', section='🏛 Kierownictwo Konfederacji', name='Krzysztof Bosak', role='Wicemarszałek Sejmu RP · Ruch Narodowy', img_url='https://api.sejm.gov.pl/sejm/term10/MP/33/photo', married=True, children=4, religious=True, is_leader=False, order=1, desc_type='merit', description='Wicemarszałek Sejmu X kadencji. Absolwent SGH (ekonomia). ' 'Poseł od 2005 r. (z przerwami). Kandydat na Prezydenta RP w 2020 — 6,78% w I turze. ' 'Uznawany za jednego z najlepiej przygotowanych merytorycznie parlamentarzystów.'), dict(party_slug='konfederacja', section='🏛 Kierownictwo Konfederacji', name='Konrad Berkowicz', role='Poseł KORWiN · Wiceprzewodniczący', img_url='https://api.sejm.gov.pl/sejm/term10/MP/16/photo', married=True, children=2, religious=False, is_leader=False, order=2, desc_type='merit', description='Prawnik (Uniwersytet Śląski). Prowadzi własną kancelarię prawną. ' 'Aktywny obrońca wolności słowa i praw przedsiębiorców. ' 'Jeden z twarzy Konfederacji w mediach — merytorycznie przygotowany.'), dict(party_slug='konfederacja', section='🏛 Kierownictwo Konfederacji', name='Stanisław Tyszka', role='Poseł · Wiceprzewodniczący', img_url='https://api.sejm.gov.pl/sejm/term10/MP/401/photo', married=True, children=3, religious=True, is_leader=False, order=3, desc_type='merit', description='Absolwent Wydziału Prawa UW. Poseł od VI kadencji (2007). ' 'Były Wicemarszałek Sejmu VIII kadencji (jako lider Kukiz\'15). ' 'Ponad 15 lat w Sejmie. Konsekwentny obrońca polskiej suwerenności.'), dict(party_slug='konfederacja', section='🏛 Kierownictwo Konfederacji', name='Przemysław Wipler', role='Poseł KORWiN · Sekretarz', img_url='https://api.sejm.gov.pl/sejm/term10/MP/424/photo', married=True, children=1, religious=False, is_leader=False, order=4, desc_type='merit', description='Absolwent Szkoły Głównej Handlowej (finanse). ' 'Przez wiele lat pracował w sektorze prywatnym (consulting, doradztwo). ' 'Ceniony ekspert ds. podatkowych i ekonomicznych w komisjach sejmowych.'), # Section 2 – MPs dict(party_slug='konfederacja', section='📋 Posłowie Konfederacji WiN', name='Karina Bosak', role='Posłanka Ruchu Narodowego', img_url='https://api.sejm.gov.pl/sejm/term10/MP/32/photo', married=True, children=4, religious=True, is_leader=False, order=5, desc_type='merit', description='Prawniczka i działaczka społeczna. Prowadzi sprawy z prawa rodzinnego. ' 'Aktywna publicystka. Żona Krzysztofa Bosaka.'), dict(party_slug='konfederacja', section='📋 Posłowie Konfederacji WiN', name='Bartłomiej Pejo', role='Poseł KORWiN', img_url='https://api.sejm.gov.pl/sejm/term10/MP/285/photo', married=True, children=2, religious=False, is_leader=False, order=6, desc_type='merit', description='Przedsiębiorca z wieloletnim doświadczeniem biznesowym. ' 'Zwolennik radykalnego obniżenia podatków i deregulacji. ' 'Wnosi perspektywę prywatnego sektora do prac komisji sejmowych.'), dict(party_slug='konfederacja', section='📋 Posłowie Konfederacji WiN', name='Michał Wawer', role='Poseł KORWiN · Rzecznik Prasowy', img_url='https://api.sejm.gov.pl/sejm/term10/MP/412/photo', married=True, children=2, religious=False, is_leader=False, order=7, desc_type='merit', description='Prawnik, publicysta i bloger. Absolwent prawa (UW). ' 'Twarz Konfederacji w mediach — doskonale przygotowany merytorycznie.'), dict(party_slug='konfederacja', section='📋 Posłowie Konfederacji WiN', name='Andrzej Zapałowski', role='Poseł · Ekspert ds. Bezpieczeństwa', img_url='https://api.sejm.gov.pl/sejm/term10/MP/443/photo', married=True, children=2, religious=True, is_leader=False, order=8, desc_type='merit', description='Pułkownik rezerwy, doktor nauk politycznych. Wykładowca akademicki ' 'w zakresie bezpieczeństwa narodowego i geopolityki. Autor kilku książek ' 'o bezpieczeństwie wschodniej flanki NATO.'), dict(party_slug='konfederacja', section='📋 Posłowie Konfederacji WiN', name='Witold Tumanowicz', role='Poseł Ruchu Narodowego', img_url='https://api.sejm.gov.pl/sejm/term10/MP/399/photo', married=True, children=2, religious=True, is_leader=False, order=9, desc_type='merit', description='Działacz narodowy i społeczny z Łodzi. Aktywny uczestnik prac komisji ' 'ds. samorządu i polityki regionalnej.'), ] for d in konf: if not PartyMember.query.filter_by(party_slug='konfederacja', name=d['name']).first(): db.session.add(PartyMember(**d, active=True)) db.session.commit() print('Baza danych zainicjalizowana pomyślnie.') print(f' Ustawienia: {SiteSetting.query.count()}') print(f' Źródła RSS: {RssSource.query.count()}') print(f' Politycy: {Politician.query.count()}') print(f' Posłowie: {PartyMember.query.count()}') print(f' Użytkownicy: {User.query.count()}')