diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..cffc198 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @MartaSien \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..3401052 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/linters/.mega-linter.yml b/.github/linters/.mega-linter.yml new file mode 100644 index 0000000..c45a956 --- /dev/null +++ b/.github/linters/.mega-linter.yml @@ -0,0 +1,16 @@ +# Configuration file for MegaLinter +# See all available variables at https://megalinter.io/configuration/ and in linters documentation +# ADD YOUR CUSTOM ENV VARIABLES HERE OR DEFINE THEM IN A FILE .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY +ENABLE_LINTERS: + - PYTHON_BLACK + - PYTHON_RUFF + - CSS_STYLELINT + - HTML_HTMLHINT + - MARKDOWN_MARKDOWNLINT + - YAML_PRETTIER +MARKDOWN_FILTER_REGEX_EXCLUDE: '(LICENSE\.md|docs/NEWS\.md)' +MARKDOWN_MARKDOWN_LINK_CHECK_DISABLE_ERRORS: true +PRE_COMMANDS: + - command: R --slave -e 'install.packages(c("lintr"))' + cwd: "root" +PRINT_ALL_FILES: false diff --git a/.github/workflows/megalinter.yml b/.github/workflows/megalinter.yml new file mode 100644 index 0000000..4dbceef --- /dev/null +++ b/.github/workflows/megalinter.yml @@ -0,0 +1,37 @@ +# MegaLinter GitHub Action configuration file +# More info at https://megalinter.io +name: MegaLinter + +on: + push: + branches: [master] + pull_request: + branches: [master] + +env: + MEGALINTER_CONFIG: .github/linters/.mega-linter.yml + +concurrency: + group: ${{ github.ref }}-${{ github.workflow }} + cancel-in-progress: true + +jobs: + megalinter: + name: MegaLinter + runs-on: ubuntu-latest + steps: + # Git Checkout + - name: Checkout Code + uses: actions/checkout@v4 + with: + token: ${{ secrets.PAT }} + + - name: MegaLinter + id: ml + # You can override MegaLinter flavor used to have faster performances + # More info at https://megalinter.io/flavors/ + uses: oxsecurity/megalinter/flavors/python@v8.0.0 + env: + VALIDATE_ALL_CODEBASE: true + GITHUB_TOKEN: ${{ secrets.PAT }} + # DISABLE: COPYPASTE,SPELL # Uncomment to disable copy-paste and spell checks diff --git a/.github/workflows/update-website.yml b/.github/workflows/update-website.yml new file mode 100644 index 0000000..8d11de4 --- /dev/null +++ b/.github/workflows/update-website.yml @@ -0,0 +1,55 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Update website + +on: + # Runs on pushes targeting the default branch + pull_request: + branches: ["master"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "update" + cancel-in-progress: false + +jobs: + # Run Python script to fetch REST API info + update: + runs-on: ubuntu-latest + permissions: + # Give the default GITHUB_TOKEN write permission to commit and push the + # added or changed files to the repository. + contents: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + # Push to protected branch + token: ${{ secrets.PAT }} + # Fetch all commits instead of a single, top one + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Generate files + run: python main.py + - name: Prepare deployment branch + run: | + git stash + git checkout gh-pages + git reset --hard origin/master + git stash pop + - name: Commit and push + uses: stefanzweifel/git-auto-commit-action@v7.1.0 + with: + commit_message: Update website + push_options: --force + branch: gh-pages diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f5855d3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +env +__pycache__ +.env \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..fe4b2e2 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +# HS3 Baza zasobów Dashboard + +Skrypt, który generuje podsumowanie [Bazy Wiedzy zasobów Hackerspace Trójmiasto](https://kb.hs3.pl/docs) w formie statycznej strony internetowej. + +## Uruchomienie połączenia z drukarką etykiet + +Potrzebne, by działał przycisk w kolumnie `print`. Po kliknięciu, nastąpi próba połączenia się z drukarką Brother PT-E550W, pod adresem IP zdefiniowanym w `PRINTER_IT`, w celu wydruku naklejki z kodem QR. + +```bash +uv venv --python 3.11 +source .venv.bin/activate +uv sync +fastapi dev --port 31337 labeler/adapter/fastapi_srv.py +export PRINTER_IT=192.168.0.147 +``` + +W razie problemów, spróbuj alternatywnych komend: +```bash +source .venv/Scripts/activate +uv run -- fastapi dev --port 31337 labeler/adapter/fastapi_srv.py +``` + +## Sposób działania + +1. Baza Wiedzy znajduje się na Discourse Hackerspace Trójmiasto i jest dostępna publicznie. Projekt wykorzystuje Discourse REST API do pobrania listy zasobów. +1. Lista zasobów zapisana jest w pliku csv `zasoby.csv`. +1. Skrypt tworzy statyczną stronę internetową na podstawie pliku `.csv`. +1. Strona jest hostowana przy pomocy GitHub Pages. + +## Możliwości generatora bazy zasobów csv + +- pobieranie listy wszystkich zasobów z wybranej kategorii +- pobieranie ID, tagów i treści posta każdego zasobu +- wyłuskanie z treści posta informacji: + - nazwa przedmiotu + - miejsce zamieszkania + - ilość + - opiekunowie +- oto jak powinien wyglądać ostateczny wpis: + +``` +ID, nazwa, miejsce, ilość, opiekunowie, tagi +``` + +## Automatyczna aktualizacja + +Żeby działały automatyczne aktualizacje przy użyciu GitHub Actions należy w sekretach dodać sekret o nazwie `PAT` którego wartością jest Personal Access Token z uprawnieniami do modyfikowania repozytorium. + +## Możliwości dashboard'u + +- filtrowanie bazy zasobów po tagach +- sortowanie alfabetyczne bazy zasobów po dowolnej kolumnie +- linki do zasobu na Discourse w ID zasobu +- łatwa zmiana ilości kolumn dashboardu + +## Co chcę dodać w przyszłości + +- wizualizacja statystyk z bazy zasobów +- generowanie drugiego pliku csv służącego do wygenerowania naklejek z kodem QR + +## Dokumentacja + +- [Discourse REST API](https://docs.discourse.org/) +- [hbrylkowski/labeling_bot](https://github.com/hbrylkowski/labeling_bot) diff --git a/fegen/discourse.py b/fegen/discourse.py index 216c11f..cf42b56 100644 --- a/fegen/discourse.py +++ b/fegen/discourse.py @@ -9,6 +9,13 @@ from dotenv import load_dotenv DISCOURSE_URL = "https://kb.hs3.pl" # Database is hosted here CATEGORY_ID = 9 # Database category ID +PLACES = [ + "cow-work", + "garage", + "lab", + "audiolab", + "server-room" +] class DiscourseDatabase(): def __init__(self): @@ -69,8 +76,7 @@ class DiscourseDatabase(): def get_place(self, topic): """Get place of a topic""" - places = ["cow-work", "garage", "lab"] - for place in places: + for place in PLACES: if place in topic["tags"]: return f'{place}' return "unknown" diff --git a/fegen/docs/index.html b/fegen/docs/index.html index dd1f24f..59ee207 100644 --- a/fegen/docs/index.html +++ b/fegen/docs/index.html @@ -85,17 +85,609 @@ - 179 + 747 - Sprzęt komp Desktop Dr Robotomy + Gra handheld "Crazy Brick" + + cow-work + + ['cow-work', 'video-game'] + + + + + + + + + + 745 + + Statyw na aparat + + unknown + + [] + + + + + + + + + + 735 + + STD17NF03L + + unknown + + [] + + + + + + + + + + 734 + + Szuflada z procesorami STM32 + + lab + + ['lab'] + + + + + + + + + + 732 + + Eksplodujące pudełko HS3 + + cow-work + + ['cow-work', 'projects'] + + + + + + + + + + 731 + + STM32F723 + + unknown + + [] + + + + + + + + + + 730 + + NUCLEO G431RB + + unknown + + [] + + + + + + + + + + 729 + + Nucleo Expansion Board Led Driver + + unknown + + [] + + + + + + + + + + 728 + + Nucleo Expansion Board MultiSensor + + unknown + + [] + + + + + + + + + + 285 + + Konsola do gier Sony PlayStation 2 Slim + kontroler Namco GunCon cow-work ['cow-work'] - + - + + + + + + + 480 + + Gitara elektryczna Blond TE-1 MN BB + + audiolab + + ['audiolab'] + + + + + + + + + + 481 + + Gitara elektryczna Blond STR-1H MN SFG + + audiolab + + ['audiolab'] + + + + + + + + + + 479 + + Guitalele Ever Play GT-WBK + + audiolab + + ['audiolab'] + + + + + + + + + + 456 + + Wzmacniacz gitarowy Roland Micro Cube + + audiolab + + ['audiolab'] + + + + + + + + + + 530 + + Discman SONY + + audiolab + + ['audiolab'] + + + + + + + + + + 531 + + Streamer LTO-4 HP M8609A + + server-room + + ['server-room'] + + + + + + + + + + 376 + + Drukarka 3D HEVO (Hypercube Evolution + + lab + + ['lab', '3d-print'] + + + + + + + + + + 699 + + Gra Blood Bowl z przyległościami + + cow-work + + ['cow-work', 'audiolab', 'boardgame', 'sticker-needed'] + + + + + + + + + + 720 + + Płytki ewaluacyjne STEVAL-VP318L1F +? + + lab + + ['lab'] + + + + + + + + + + 702 + + Wózek na tacki projektowe + + lab + + ['lab'] + + + + + + + + + + 719 + + Pudełko projektowe "Fala za Falą" + + lab + + ['lab', 'sticker-needed'] + + + + + + + + + + 703 + + Tacki projektowe + + lab + + ['lab', 'sticker-needed'] + + + + + + + + + + 414 + + Tester kabli RJ45, RJ11/12, BNC Lanberg + + lab + + ['lab'] + + + + + + + + + + 718 + + Zestaw nitonakrętek alu+stal G02910 + + lab + + ['lab'] + + + + + + + + + + 717 + + Gniazdo DC 5,5/2,5mm do druku - poziome + + lab + + ['lab', 'electronics'] + + + + + + + + + + 716 + + Konektor FPC 8-pin + + lab + + ['lab', 'electronics'] + + + + + + + + + + 715 + + Przełącznik DIP switch 2 tory + + lab + + ['lab', 'electronics'] + + + + + + + + + + 714 + + Przełącznik DIP switch 4 tory + + lab + + ['lab', 'electronics'] + + + + + + + + + + 713 + + Diody LED czerwone, błękitne + + lab + + ['lab', 'electronics'] + + + + + + + + + + 712 + + Złącze śrubowe ARK 3-pinowe + + lab + + ['lab', 'electronics'] + + + + + + + + + + 711 + + Złącze śrubowe ARK 2-pinowe + + lab + + ['lab', 'electronics'] + + + + + + + + + + 710 + + Złącze śrubowe ARK 4-pinowe + + lab + + ['lab', 'electronics'] + + + + + + + + + + 709 + + ESP-32 + + lab + + ['lab', 'electronics'] + + + + + + + + + + 708 + + Origami LED Matrix + + server-room + + ['projects', 'server-room'] + + + + + + + + + + 704 + + Tranzystor PNP bipolarny 50V + + lab + + ['lab', 'electronics'] + + + + + + + + + + 705 + + Tranzystor NPN bipolarny 45V + + lab + + ['lab', 'electronics'] + + + + + + + + + + 707 + + Przycisk monostabilny - tact switch + + lab + + ['lab', 'electronics'] + + + + + + + + + + 706 + + Tranzystor T482 BVBR11 + + lab + + ['lab', 'electronics'] + + + + @@ -107,7 +699,7 @@ lab - ['lab', 'sticker-needed'] + ['lab'] @@ -115,6 +707,134 @@ + + + 701 + + Celestia - edukacyjna ściana nocnego nieba + + server-room + + ['projects', 'server-room'] + + + + + + + + + + 538 + + Interfejs audio Line6 GX + + audiolab + + ['audiolab'] + + + + + + + + + + 388 + + Zasilacz 16A, 12V dc + + lab + + ['lab'] + + + + + + + + + + 700 + + Drukarka 3D Creality Ender do samodzielnego złożenia + + lab + + ['lab', 'sticker-needed'] + + + + + + + + + + 377 + + Drukarka 3D “Elegoo Neptune 4 Pro” + + lab + + ['lab', '3d-print'] + + + + + + + + + + 514 + + Pistolet do kleju na gorąco + + lab + + ['lab'] + + + + + + + + + + 698 + + Disco betoniarka + + garage + + ['garage', 'projects', 'sticker-needed'] + + + + + + + + + + 179 + + Sprzęt komp Desktop Dr Robotomy + + cow-work + + ['cow-work'] + + + + + + + 585 @@ -531,22 +1251,6 @@ - - - 514 - - Pistolet do kleju na gorąco - - lab - - ['lab'] - - - - - - - 560 @@ -611,61 +1315,13 @@ - - - 531 - - Streamer LTO-4 HP M8609A - - unknown - - ['server-room'] - - - - - - - - - - 285 - - Konsola do gier Sony PlayStation 2 Slim + kontroler Namco GunCon - - cow-work - - ['cow-work'] - - - - - - - - - - 456 - - Wzmacniacz gitarowy Roland Micro Cube - - unknown - - ['audiolab'] - - - - - - - 478 Gitara basowa Squier Precision Bass - unknown + audiolab ['audiolab'] @@ -675,54 +1331,6 @@ - - - 479 - - Guitalele Ever Play GT-WBK - - unknown - - ['audiolab'] - - - - - - - - - - 481 - - Gitara elektryczna Blond STR-1H MN SFG - - unknown - - ['audiolab'] - - - - - - - - - - 480 - - Gitara elektryczna Blond TE-1 MN BB - - unknown - - ['audiolab'] - - - - - - - 533 @@ -851,22 +1459,6 @@ - - - 538 - - Interfejs audio Line6 GX - - unknown - - ['audiolab', 'sticker-needed'] - - - - - - - 537 @@ -915,22 +1507,6 @@ - - - 377 - - Drukarka 3D “Elegoo Neptune 4 Pro” - - lab - - ['lab', '3d-print'] - - - - - - - 92 @@ -947,22 +1523,6 @@ - - - 530 - - Discman SONY - - unknown - - ['audiolab'] - - - - - - - 454 @@ -1001,7 +1561,7 @@ Wieża TECHNICS EH550 - kolumny głośnikowe - unknown + audiolab ['audiolab'] @@ -1033,7 +1593,7 @@ Magnetofon kasetowy Technics RS-B765 - unknown + audiolab ['audiolab'] @@ -1177,7 +1737,7 @@ Radio samochodowe Alpine - unknown + audiolab ['audiolab'] @@ -1241,7 +1801,7 @@ Radiomagnetofon przenośny Panasonic RQ-V77 - unknown + audiolab ['audiolab'] @@ -1337,7 +1897,7 @@ Quad Power Supply Cobrabid KB-60-01 - unknown + audiolab ['audiolab'] @@ -1353,7 +1913,7 @@ Lenco PA-45 Portable Sound System with Bluetooth - unknown + audiolab ['audiolab'] @@ -1369,7 +1929,7 @@ Głośnik gitarowy DIY - unknown + audiolab ['audiolab'] @@ -1497,7 +2057,7 @@ Switch Planet FSD-803 - unknown + audiolab ['audiolab'] @@ -1513,7 +2073,7 @@ Switch ES-3208P - unknown + audiolab ['audiolab'] @@ -1529,7 +2089,7 @@ Access Point TP-Link - unknown + audiolab ['audiolab'] @@ -1545,7 +2105,7 @@ Mikrofon T-Bone SC-300 - unknown + audiolab ['audiolab'] @@ -1561,7 +2121,7 @@ Uchwyty biurkowe do mikrofonu/kamery - unknown + audiolab ['audiolab'] @@ -1577,7 +2137,7 @@ Bongosy - unknown + audiolab ['audiolab'] @@ -1593,7 +2153,7 @@ Dalekopis Lorenz LO133 Automatik - unknown + audiolab ['audiolab'] @@ -1625,7 +2185,7 @@ Soundbar Dell AX510 - unknown + audiolab ['audiolab'] @@ -1641,7 +2201,7 @@ Głośniki komputerowe Creative Inspire T3100 - unknown + audiolab ['audiolab'] @@ -1673,7 +2233,7 @@ Pegasus & Co - unknown + audiolab ['audiolab'] @@ -1769,7 +2329,7 @@ Aparat fotograficzny Agat 18K - unknown + audiolab ['audiolab'] @@ -1785,7 +2345,7 @@ Aparat fotograficzny Nikon Coolpix L26 - unknown + audiolab ['audiolab'] @@ -1801,7 +2361,7 @@ Aparat fotograficzny Hitachi HDC-761E - unknown + audiolab ['audiolab'] @@ -1817,7 +2377,7 @@ Aparat fotograficzny Konica Minolta - unknown + audiolab ['audiolab'] @@ -1833,7 +2393,7 @@ Odtwarzacz przenośny Philips - unknown + audiolab ['audiolab'] @@ -1849,7 +2409,7 @@ Komputer AiO POS CHD8700 - unknown + audiolab ['audiolab'] @@ -1865,7 +2425,7 @@ Tuner Technics ST-600L - unknown + audiolab ['audiolab'] @@ -1913,7 +2473,7 @@ Wzmacniacz gitarowy Peavey Rage 258 - unknown + audiolab ['audiolab'] @@ -1929,7 +2489,7 @@ Słuchawki Creative Aurvana Live! - unknown + audiolab ['audiolab'] @@ -1945,7 +2505,7 @@ Słuchawki Sennheiser HD25 - unknown + audiolab ['audiolab'] @@ -1961,7 +2521,7 @@ Mikrofon Grundig GDM 312 - unknown + audiolab ['audiolab'] @@ -1977,7 +2537,7 @@ Looper Ditto TC Electronic - unknown + audiolab ['audiolab'] @@ -1993,7 +2553,7 @@ Mikser Behringer MX400 Micromix - unknown + audiolab ['audiolab'] @@ -2009,7 +2569,7 @@ Korg Volca Keys - unknown + audiolab ['audiolab'] @@ -2025,7 +2585,7 @@ Korg Volca Sample - unknown + audiolab ['audiolab'] @@ -2041,7 +2601,7 @@ Korg Volca Mix - unknown + audiolab ['audiolab'] @@ -2057,7 +2617,7 @@ Korg Volca Bass - unknown + audiolab ['audiolab'] @@ -2073,7 +2633,7 @@ Korg Volca Modular - unknown + audiolab ['audiolab'] @@ -2089,7 +2649,7 @@ Yamaha DD-10 Drum Machine - unknown + audiolab ['audiolab'] @@ -2105,7 +2665,7 @@ Wzmacniacz zintegrowany Technics SU-810 - unknown + audiolab ['audiolab'] @@ -2121,7 +2681,7 @@ Mikrofon Rode NT1-A - unknown + audiolab ['audiolab'] @@ -2137,7 +2697,7 @@ Obudowa komputerowa Chieftec Tower of BBL (but SMOL) - unknown + audiolab ['audiolab'] @@ -2169,7 +2729,7 @@ Głośniki LG CMS4340F - unknown + audiolab ['audiolab'] @@ -2185,7 +2745,7 @@ Wzmacniacz DIY 12V DC - unknown + audiolab ['audiolab'] @@ -2201,7 +2761,7 @@ Obudowa komputerowa Chieftec Tower of BBL - unknown + audiolab ['audiolab'] @@ -2217,7 +2777,7 @@ Głośniki DIY d33p w00f - unknown + audiolab ['audiolab'] @@ -2233,7 +2793,7 @@ A8 Wireless Sound Transmitter/Receiver - unknown + audiolab ['audiolab'] @@ -2281,7 +2841,7 @@ Kable Audio Jack-Jack Mono - unknown + audiolab ['audiolab'] @@ -2441,7 +3001,7 @@ Głośniki Loewe L82 A - unknown + audiolab ['audiolab'] @@ -2457,7 +3017,7 @@ Komputer Sun Ultra 45 Workstation 500s XVR2500 ULTRAsparc IIIi - unknown + audiolab ['audiolab'] @@ -2809,7 +3369,7 @@ Głośniki Creative GigaWorks T20 MultiMedia Speaker 28W MF1545 - unknown + audiolab ['audiolab'] @@ -2899,29 +3459,13 @@ - - - 414 - - Tester kabli RJ45, RJ11/12, BNC Lanberg - - lab - - ['lab'] - - - - - - - 416 Switch zarządzalny MikroTik CRS309-1G-8S+IN 1x1GbE 8x10GbE SFP+ RS232 PoE - unknown + server-room ['server-room'] @@ -3379,22 +3923,6 @@ - - - 388 - - Zasilacz 16A, 12V dc - - lab - - ['lab'] - - - - - - - 387 @@ -3555,22 +4083,6 @@ - - - 376 - - Drukarka 3D HEVO (Hypercube Evolution - - lab - - ['lab'] - - - - - - - 372 @@ -6952,23 +7464,31 @@