mirror of
https://github.com/gethomepage/homepage.git
synced 2026-02-08 00:40:52 +08:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e96e406560 | ||
|
|
f4f54cea60 | ||
|
|
06595ef107 | ||
|
|
91b9aa479a | ||
|
|
08cde2f597 | ||
|
|
0ce175cda5 | ||
|
|
7f1de58e71 | ||
|
|
f729290e96 | ||
|
|
4974cd96b6 | ||
|
|
4450a6e1d0 | ||
|
|
ac11efc5c7 | ||
|
|
3c005d239e |
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -35,8 +35,8 @@ What type of change does your PR introduce to Homepage?
|
||||
## Checklist:
|
||||
|
||||
- [ ] If applicable, I have added corresponding documentation changes.
|
||||
- [ ] If applicable, I have added or updated tests for new features and bug fixes.
|
||||
- [ ] If applicable, I have reviewed the [feature / enhancement](https://gethomepage.dev/more/development/#new-feature-guidelines) and / or [service widget guidelines](https://gethomepage.dev/more/development/#service-widget-guidelines).
|
||||
- [ ] I have checked that all code style checks pass using [pre-commit hooks](https://gethomepage.dev/more/development/#code-formatting-with-pre-commit-hooks) and [linting checks](https://gethomepage.dev/more/development/#code-linting).
|
||||
- [ ] If applicable, I have added or updated tests for new features and bug fixes (see [testing](https://gethomepage.dev/widgets/authoring/getting-started/#testing)).
|
||||
- [ ] If applicable, I have reviewed the [feature / enhancement](https://gethomepage.dev/widgets/authoring/getting-started/#new-feature-guidelines) and / or [service widget guidelines](https://gethomepage.dev/widgets/authoring/getting-started/#service-widget-guidelines).
|
||||
- [ ] I have checked that all code style checks pass using [pre-commit hooks](https://gethomepage.dev/widgets/authoring/getting-started/#code-formatting-with-pre-commit-hooks) and [linting checks](https://gethomepage.dev/widgets/authoring/getting-started/#code-linting).
|
||||
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
|
||||
- [ ] In the description above I have disclosed the use of AI tools in the coding of this PR.
|
||||
|
||||
50
.github/workflows/docs-publish.yml
vendored
50
.github/workflows/docs-publish.yml
vendored
@@ -9,7 +9,9 @@ on:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
jobs:
|
||||
pre-commit:
|
||||
@@ -35,44 +37,34 @@ jobs:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: 3.x
|
||||
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
||||
- uses: actions/cache@v5
|
||||
with:
|
||||
key: mkdocs-material-${{ env.cache_id }}
|
||||
path: .cache
|
||||
restore-keys: |
|
||||
mkdocs-material-
|
||||
python-version-file: ".python-version"
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v7
|
||||
- run: sudo apt-get install pngquant
|
||||
- run: pip install mkdocs-material mkdocs-redirects "mkdocs-material[imaging]"
|
||||
- name: Test Docs Build
|
||||
run: MKINSIDERS=false mkdocs build
|
||||
run: uv run --frozen zensical build --clean
|
||||
deploy:
|
||||
name: Build & Deploy Docs
|
||||
if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
|
||||
runs-on: ubuntu-latest
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
needs:
|
||||
- pre-commit
|
||||
steps:
|
||||
- uses: actions/configure-pages@v5
|
||||
- uses: actions/checkout@v6
|
||||
- name: Configure Git Credentials
|
||||
run: |
|
||||
git config user.name github-actions[bot]
|
||||
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: 3.x
|
||||
- run: echo "cache_id=${{github.sha}}" >> $GITHUB_ENV
|
||||
- uses: actions/cache@v5
|
||||
with:
|
||||
key: mkdocs-material-${{ env.cache_id }}
|
||||
path: .cache
|
||||
restore-keys: |
|
||||
mkdocs-material-
|
||||
python-version-file: ".python-version"
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v7
|
||||
- run: sudo apt-get install pngquant
|
||||
- run: pip install git+https://${GH_TOKEN}@github.com/benphelps/mkdocs-material-insiders.git
|
||||
- run: pip install mkdocs-redirects "mkdocs-material[imaging]"
|
||||
- name: Docs Deploy
|
||||
run: MKINSIDERS=true mkdocs gh-deploy --force
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||
- name: Build Docs
|
||||
run: uv run --frozen zensical build --clean
|
||||
- uses: actions/upload-pages-artifact@v4
|
||||
with:
|
||||
path: site
|
||||
- uses: actions/deploy-pages@v4
|
||||
id: deployment
|
||||
|
||||
4
.github/workflows/test.yml
vendored
4
.github/workflows/test.yml
vendored
@@ -13,13 +13,13 @@ jobs:
|
||||
matrix:
|
||||
shard: [1, 2, 3, 4]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 20
|
||||
cache: pnpm
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -46,7 +46,7 @@ next-env.d.ts
|
||||
# IDEs
|
||||
/.idea/
|
||||
|
||||
# MkDocs documentation
|
||||
# Zensical documentation
|
||||
site*/
|
||||
.cache/
|
||||
|
||||
|
||||
1
.python-version
Normal file
1
.python-version
Normal file
@@ -0,0 +1 @@
|
||||
3.13
|
||||
@@ -16,6 +16,8 @@
|
||||
<p align="center">
|
||||
<a href="https://github.com/gethomepage/homepage/actions/workflows/docker-publish.yml"><img alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/gethomepage/homepage/docker-publish.yml"></a>
|
||||
|
||||
<a href="https://codecov.io/gh/gethomepage/homepage"><img src="https://codecov.io/gh/gethomepage/homepage/graph/badge.svg?token=7SKFL4D9K7"/></a>
|
||||
|
||||
<a href="https://crowdin.com/project/gethomepage" target="_blank"><img src="https://badges.crowdin.net/gethomepage/localized.svg"></a>
|
||||
|
||||
<a href="https://discord.gg/k4ruYNrudu"><img alt="Discord" src="https://img.shields.io/discord/1019316731635834932"></a>
|
||||
@@ -154,16 +156,16 @@ This is a [Next.js](https://nextjs.org/) application, see their documentation fo
|
||||
|
||||
The homepage documentation is available at [https://gethomepage.dev/](https://gethomepage.dev/).
|
||||
|
||||
Homepage uses Material for MkDocs for documentation. To run the documentation locally, first install the dependencies:
|
||||
Homepage uses Zensical for documentation. To run the documentation locally, first install the dependencies:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
uv sync
|
||||
```
|
||||
|
||||
Then run the development server:
|
||||
|
||||
```bash
|
||||
mkdocs serve # or build, to build the static site
|
||||
uv run zensical serve # or build, to build the static site
|
||||
```
|
||||
|
||||
# Support & Suggestions
|
||||
|
||||
@@ -5,7 +5,7 @@ description: Jellyfin Widget Configuration
|
||||
|
||||
Learn more about [Jellyfin](https://github.com/jellyfin/jellyfin).
|
||||
|
||||
You can create an API key from inside Jellyfin at `Settings > Advanced > Api Keys`.
|
||||
You can create an API key from inside the Jellyfin Administration Dashboard under `Advanced > API Keys`.
|
||||
|
||||
As of v0.6.11 the widget supports fields `["movies", "series", "episodes", "songs"]`. These blocks are disabled by default but can be enabled with the `enableBlocks` option, and the "Now Playing" feature (enabled by default) can be disabled with the `enableNowPlaying` option.
|
||||
|
||||
@@ -17,7 +17,7 @@ As of v0.6.11 the widget supports fields `["movies", "series", "episodes", "song
|
||||
```yaml
|
||||
widget:
|
||||
type: jellyfin
|
||||
url: http://jellyfin.host.or.ip
|
||||
url: http://jellyfin.host.or.ip:port
|
||||
key: apikeyapikeyapikeyapikeyapikey
|
||||
version: 2 # optional, default is 1
|
||||
enableBlocks: true # optional, defaults to false
|
||||
|
||||
@@ -12,7 +12,7 @@ Allowed fields: no configurable fields for this widget.
|
||||
```yaml
|
||||
widget:
|
||||
type: tautulli
|
||||
url: http://tautulli.host.or.ip
|
||||
url: http://tautulli.host.or.ip:port
|
||||
key: apikeyapikeyapikeyapikeyapikey
|
||||
enableUser: true # optional, defaults to false
|
||||
showEpisodeNumber: true # optional, defaults to false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "homepage",
|
||||
"version": "1.10.0",
|
||||
"version": "1.10.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"preinstall": "npx only-allow pnpm",
|
||||
|
||||
@@ -1152,11 +1152,11 @@
|
||||
"artists": "Kunstenaars"
|
||||
},
|
||||
"arcane": {
|
||||
"containers": "Containers",
|
||||
"images": "Images",
|
||||
"image_updates": "Image Updates",
|
||||
"images_unused": "Unused",
|
||||
"environment_required": "Environment ID Required"
|
||||
"containers": "Houers",
|
||||
"images": "Beelde",
|
||||
"image_updates": "Beeldopdaterings",
|
||||
"images_unused": "Ongebruik",
|
||||
"environment_required": "Omgewings-ID Vereis"
|
||||
},
|
||||
"dockhand": {
|
||||
"running": "Lopend",
|
||||
|
||||
@@ -108,14 +108,14 @@
|
||||
"songs": "Piosenki"
|
||||
},
|
||||
"jellyfin": {
|
||||
"playing": "Playing",
|
||||
"transcoding": "Transcoding",
|
||||
"playing": "Odtwarza",
|
||||
"transcoding": "Transkoduje",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "No Active Streams",
|
||||
"movies": "Movies",
|
||||
"series": "Series",
|
||||
"episodes": "Episodes",
|
||||
"songs": "Songs"
|
||||
"no_active": "Brak aktywnych strumieni",
|
||||
"movies": "Filmy",
|
||||
"series": "Seriale",
|
||||
"episodes": "Odcinki",
|
||||
"songs": "Piosenki"
|
||||
},
|
||||
"esphome": {
|
||||
"offline": "Offline",
|
||||
@@ -716,8 +716,8 @@
|
||||
"volumeAvailable": "Dostępne"
|
||||
},
|
||||
"dispatcharr": {
|
||||
"channels": "Channels",
|
||||
"streams": "Streams"
|
||||
"channels": "Kanały",
|
||||
"streams": "Strumienie"
|
||||
},
|
||||
"mylar": {
|
||||
"series": "Seriale",
|
||||
@@ -1152,11 +1152,11 @@
|
||||
"artists": "Wykonawcy"
|
||||
},
|
||||
"arcane": {
|
||||
"containers": "Containers",
|
||||
"images": "Images",
|
||||
"image_updates": "Image Updates",
|
||||
"images_unused": "Unused",
|
||||
"environment_required": "Environment ID Required"
|
||||
"containers": "Kontenery",
|
||||
"images": "Obrazy",
|
||||
"image_updates": "Aktualizacje obrazów",
|
||||
"images_unused": "Nieużywane",
|
||||
"environment_required": "Wymagane ID środowiska"
|
||||
},
|
||||
"dockhand": {
|
||||
"running": "Działające",
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
"http_status": "HTTP stavový kód",
|
||||
"error": "Chyba",
|
||||
"response": "Odpoveď",
|
||||
"down": "Down",
|
||||
"down": "Nedostupné",
|
||||
"up": "Beží",
|
||||
"not_available": "Nedostupné"
|
||||
},
|
||||
@@ -108,18 +108,18 @@
|
||||
"songs": "Skladby"
|
||||
},
|
||||
"jellyfin": {
|
||||
"playing": "Playing",
|
||||
"transcoding": "Transcoding",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "No Active Streams",
|
||||
"movies": "Movies",
|
||||
"series": "Series",
|
||||
"episodes": "Episodes",
|
||||
"songs": "Songs"
|
||||
"playing": "Prehráva sa",
|
||||
"transcoding": "Prebieha prekódovanie",
|
||||
"bitrate": "Prenosová rýchlosť",
|
||||
"no_active": "Žiadne aktívne vysielania",
|
||||
"movies": "Filmov",
|
||||
"series": "Seriálov",
|
||||
"episodes": "Epizód",
|
||||
"songs": "Skladieb"
|
||||
},
|
||||
"esphome": {
|
||||
"offline": "Offline",
|
||||
"offline_alt": "Offline",
|
||||
"offline": "Nedostupné",
|
||||
"offline_alt": "Nedostupné",
|
||||
"online": "Online",
|
||||
"total": "Celkom",
|
||||
"unknown": "Neznáme"
|
||||
@@ -154,7 +154,7 @@
|
||||
"uptime": "Dostupnosť",
|
||||
"maxDown": "Max. sťahovanie",
|
||||
"maxUp": "Max. nahrávanie",
|
||||
"down": "Down",
|
||||
"down": "Nedostupné",
|
||||
"up": "Beží",
|
||||
"received": "Prijaté",
|
||||
"sent": "Odoslané",
|
||||
@@ -180,7 +180,7 @@
|
||||
"tautulli": {
|
||||
"playing": "Playing",
|
||||
"transcoding": "Transcoding",
|
||||
"bitrate": "Bitrate",
|
||||
"bitrate": "Prenosová rýchlosť",
|
||||
"no_active": "No Active Streams",
|
||||
"plex_connection_error": "Skontroluj spojenie s Plex"
|
||||
},
|
||||
@@ -429,7 +429,7 @@
|
||||
"version": "Verzia",
|
||||
"status": "Stav",
|
||||
"up": "Online",
|
||||
"down": "Offline"
|
||||
"down": "Nedostupné"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Prečítané",
|
||||
@@ -450,7 +450,7 @@
|
||||
"cpu": "CPU",
|
||||
"load": "Záťaž",
|
||||
"wait": "Čakajte, prosím",
|
||||
"temp": "TEMP",
|
||||
"temp": "TEPL",
|
||||
"_temp": "Teplota",
|
||||
"warn": "Upozornení",
|
||||
"uptime": "BEŽÍ",
|
||||
@@ -491,13 +491,13 @@
|
||||
"51-day": "Mierne mrholenie",
|
||||
"51-night": "Slabé mrholenie",
|
||||
"53-day": "Mrholenie",
|
||||
"53-night": "Drizzle",
|
||||
"53-night": "Mrholenie",
|
||||
"55-day": "Silné mrholenie",
|
||||
"55-night": "Silné mrholenie",
|
||||
"56-day": "Mierne mrazivé mrholenie",
|
||||
"56-night": "Light Freezing Drizzle",
|
||||
"56-night": "Jemné mrznúce mrholenie",
|
||||
"57-day": "Mrazivé mrholenie",
|
||||
"57-night": "Freezing Drizzle",
|
||||
"57-night": "Mrznúce mrholenie",
|
||||
"61-day": "Slabý dážď",
|
||||
"61-night": "Slabý dážď",
|
||||
"63-day": "Dážď",
|
||||
@@ -542,14 +542,14 @@
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"up": "Beží",
|
||||
"pending": "Čakajúce",
|
||||
"down": "Down",
|
||||
"down": "Nedostupné",
|
||||
"ok": "Ok"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "Nový",
|
||||
"up": "Beží",
|
||||
"grace": "V dodatočnej lehote",
|
||||
"down": "Down",
|
||||
"down": "Nedostupné",
|
||||
"paused": "Pozastavené",
|
||||
"status": "Stav",
|
||||
"last_ping": "Poslendný ping",
|
||||
@@ -675,7 +675,7 @@
|
||||
"memory": "Využitie pamäte",
|
||||
"wanStatus": "Stav WAN",
|
||||
"up": "Beží",
|
||||
"down": "Down",
|
||||
"down": "Nedostupné",
|
||||
"temp": "Temp",
|
||||
"disk": "Využitie disku",
|
||||
"wanIP": "IP adresa WAN"
|
||||
@@ -776,8 +776,8 @@
|
||||
"targets_total": "Cieľov spolu"
|
||||
},
|
||||
"gatus": {
|
||||
"up": "Sites Up",
|
||||
"down": "Sites Down",
|
||||
"up": "Dostupné stránky",
|
||||
"down": "Nedostupné stránky",
|
||||
"uptime": "Dostupnosť"
|
||||
},
|
||||
"ghostfolio": {
|
||||
@@ -799,7 +799,7 @@
|
||||
},
|
||||
"whatsupdocker": {
|
||||
"monitoring": "Monitoring",
|
||||
"updates": "Updates"
|
||||
"updates": "Aktualizácie"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
@@ -872,7 +872,7 @@
|
||||
"uptime": "Dostupnosť",
|
||||
"cpuLoad": "Záťaž CPU priem. (5m)",
|
||||
"up": "Beží",
|
||||
"down": "Down",
|
||||
"down": "Nedostupné",
|
||||
"bytesTx": "Prenesených",
|
||||
"bytesRx": "Prijaté"
|
||||
},
|
||||
@@ -881,13 +881,13 @@
|
||||
"uptime": "Dostupnosť",
|
||||
"lastDown": "Posledný čas nedostupnosti",
|
||||
"downDuration": "Trvanie nedostupnosti",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"sitesUp": "Dostupné stránky",
|
||||
"sitesDown": "Nedostupné stránky",
|
||||
"paused": "Pozastavené",
|
||||
"notyetchecked": "Neskontrolované",
|
||||
"up": "Beží",
|
||||
"seemsdown": "Javí sa nedostupný",
|
||||
"down": "Down",
|
||||
"down": "Nedostupné",
|
||||
"unknown": "Neznáme"
|
||||
},
|
||||
"calendar": {
|
||||
@@ -1023,17 +1023,17 @@
|
||||
"last_seen": "Last Seen",
|
||||
"status": "Stav",
|
||||
"online": "Online",
|
||||
"offline": "Offline"
|
||||
"offline": "Nedostupné"
|
||||
},
|
||||
"beszel": {
|
||||
"name": "Name",
|
||||
"systems": "Systems",
|
||||
"up": "Beží",
|
||||
"down": "Down",
|
||||
"down": "Nedostupné",
|
||||
"paused": "Pozastavené",
|
||||
"pending": "Čakajúce",
|
||||
"status": "Stav",
|
||||
"updated": "Updated",
|
||||
"updated": "Aktualizované",
|
||||
"cpu": "CPU",
|
||||
"memory": "RAM",
|
||||
"disk": "Disk",
|
||||
@@ -1078,7 +1078,7 @@
|
||||
"disconnected": "Odpojené",
|
||||
"updateStatus": "Update",
|
||||
"update_yes": "Dostupné",
|
||||
"update_no": "Up to Date",
|
||||
"update_no": "Aktuálne",
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
@@ -1097,7 +1097,7 @@
|
||||
"total": "Celkom",
|
||||
"running": "Beží",
|
||||
"stopped": "Zastavené",
|
||||
"down": "Down",
|
||||
"down": "Nedostupné",
|
||||
"unhealthy": "Nezdravý",
|
||||
"unknown": "Neznáme",
|
||||
"servers": "Servery",
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
},
|
||||
"resources": {
|
||||
"cpu": "İşlemci",
|
||||
"mem": "MEM",
|
||||
"mem": "Bellek",
|
||||
"total": "Toplam",
|
||||
"free": "Boş",
|
||||
"used": "Kullanımda",
|
||||
@@ -80,7 +80,7 @@
|
||||
"unhealthy": "Sağlıksız",
|
||||
"not_found": "Bulunamadı",
|
||||
"exited": "Kapandı",
|
||||
"partial": "Parçalı"
|
||||
"partial": "Kısmi"
|
||||
},
|
||||
"ping": {
|
||||
"error": "Hata",
|
||||
@@ -93,14 +93,14 @@
|
||||
"http_status": "HTTPS durumu",
|
||||
"error": "Hata",
|
||||
"response": "Yanıt",
|
||||
"down": "Çalışmayan",
|
||||
"down": "İndirme",
|
||||
"up": "Çalışıyor",
|
||||
"not_available": "Uygun değil"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Oynatılıyor",
|
||||
"transcoding": "Dönüştürülüyor",
|
||||
"bitrate": "Bit Oranı",
|
||||
"bitrate": "Bit Hızı",
|
||||
"no_active": "Etkin akış yok",
|
||||
"movies": "Filmler",
|
||||
"series": "Diziler",
|
||||
@@ -108,14 +108,14 @@
|
||||
"songs": "Şarkılar"
|
||||
},
|
||||
"jellyfin": {
|
||||
"playing": "Playing",
|
||||
"transcoding": "Transcoding",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "No Active Streams",
|
||||
"movies": "Movies",
|
||||
"series": "Series",
|
||||
"episodes": "Episodes",
|
||||
"songs": "Songs"
|
||||
"playing": "Oynatılıyor",
|
||||
"transcoding": "Dönüştürülüyor",
|
||||
"bitrate": "Bit Hızı",
|
||||
"no_active": "Aktif Yayın Yok",
|
||||
"movies": "Filmler",
|
||||
"series": "Diziler",
|
||||
"episodes": "Bölümler",
|
||||
"songs": "Şarkılar"
|
||||
},
|
||||
"esphome": {
|
||||
"offline": "Çevrimdışı",
|
||||
@@ -135,8 +135,8 @@
|
||||
"flood": {
|
||||
"download": "İndirme",
|
||||
"upload": "Yükleme",
|
||||
"leech": "Tüketici",
|
||||
"seed": "Sağlayıcı"
|
||||
"leech": "İndirilen",
|
||||
"seed": "Gönderilen"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "Abonelikler",
|
||||
@@ -152,10 +152,10 @@
|
||||
"connectionStatusDisconnected": "Bağlı değil",
|
||||
"connectionStatusConnected": "Bağlı",
|
||||
"uptime": "Çalışma Süresi",
|
||||
"maxDown": "Max. Indirme",
|
||||
"maxUp": "Max. Gönderme",
|
||||
"down": "Çalışmayan",
|
||||
"up": "Çalışıyor",
|
||||
"maxDown": "Maks. İndirme",
|
||||
"maxUp": "Maks. Gönderme",
|
||||
"down": "İndirme",
|
||||
"up": "Yükleme",
|
||||
"received": "Alınan",
|
||||
"sent": "Gönderilen",
|
||||
"externalIPAddress": "Harici IP",
|
||||
@@ -180,7 +180,7 @@
|
||||
"tautulli": {
|
||||
"playing": "Oynatılıyor",
|
||||
"transcoding": "Dönüştürülüyor",
|
||||
"bitrate": "Bit Oranı",
|
||||
"bitrate": "Bit Hızı",
|
||||
"no_active": "Etkin akış yok",
|
||||
"plex_connection_error": "Plex Bağlantısı Kontrol Ediliyor"
|
||||
},
|
||||
@@ -209,20 +209,20 @@
|
||||
},
|
||||
"rutorrent": {
|
||||
"active": "Etkin",
|
||||
"upload": "Yükleme",
|
||||
"upload": "Gönderme",
|
||||
"download": "İndirme"
|
||||
},
|
||||
"transmission": {
|
||||
"download": "İndirme",
|
||||
"upload": "Yükleme",
|
||||
"leech": "Tüketici",
|
||||
"seed": "Sağlayıcı"
|
||||
"upload": "Gönderme",
|
||||
"leech": "İndirilen",
|
||||
"seed": "Gönderilen"
|
||||
},
|
||||
"qbittorrent": {
|
||||
"download": "İndirme",
|
||||
"upload": "Yükleme",
|
||||
"leech": "Tüketici",
|
||||
"seed": "Sağlayıcı"
|
||||
"upload": "Gönderme",
|
||||
"leech": "İndirilen",
|
||||
"seed": "Gönderilen"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "İşlemci Kullanımı",
|
||||
@@ -234,9 +234,9 @@
|
||||
},
|
||||
"deluge": {
|
||||
"download": "İndirme",
|
||||
"upload": "Yükleme",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
"upload": "Gönderme",
|
||||
"leech": "İndirilen",
|
||||
"seed": "Gönderilen"
|
||||
},
|
||||
"develancacheui": {
|
||||
"cachehitbytes": "Önbellek İsabetli Byte",
|
||||
@@ -244,14 +244,14 @@
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "İndirme",
|
||||
"upload": "Yükleme",
|
||||
"leech": "Tüketici",
|
||||
"seed": "Sağlayıcı"
|
||||
"upload": "Gönderme",
|
||||
"leech": "İndirilen",
|
||||
"seed": "Gönderilen"
|
||||
},
|
||||
"sonarr": {
|
||||
"wanted": "İstendi",
|
||||
"queued": "Kuyrukta",
|
||||
"series": "Seriler",
|
||||
"series": "Diziler",
|
||||
"queue": "Kuyruk",
|
||||
"unknown": "Bilinmeyen"
|
||||
},
|
||||
@@ -286,10 +286,10 @@
|
||||
"pending": "Bekleyen",
|
||||
"approved": "Onaylı",
|
||||
"available": "Uygun",
|
||||
"issues": "Open Issues"
|
||||
"issues": "Açık Sorunlar"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
"pending": "Beklemede",
|
||||
"processing": "İşleniyor",
|
||||
"approved": "Onaylı",
|
||||
"available": "Uygun"
|
||||
@@ -307,7 +307,7 @@
|
||||
"gravity": "Gravity"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Queries",
|
||||
"queries": "Sorgular",
|
||||
"blocked": "Engellenen",
|
||||
"filtered": "Filtrelendi",
|
||||
"latency": "Gecikme"
|
||||
@@ -448,9 +448,9 @@
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "İşlemci",
|
||||
"load": "Load",
|
||||
"load": "Yük",
|
||||
"wait": "Lütfen bekleyin",
|
||||
"temp": "TEMP",
|
||||
"temp": "Sıcaklık",
|
||||
"_temp": "Sıcaklık",
|
||||
"warn": "Uyarı",
|
||||
"uptime": "ÇALIŞIYOR",
|
||||
@@ -463,7 +463,7 @@
|
||||
"read": "Okundu",
|
||||
"write": "Yazma",
|
||||
"gpu": "GPU",
|
||||
"mem": "Hafıza",
|
||||
"mem": "Bellek",
|
||||
"swap": "Swap"
|
||||
},
|
||||
"quicklaunch": {
|
||||
@@ -543,7 +543,7 @@
|
||||
"up": "Çalışıyor",
|
||||
"pending": "Bekleyen",
|
||||
"down": "Çalışmayan",
|
||||
"ok": "Ok"
|
||||
"ok": "Tamam"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "Yeni",
|
||||
@@ -598,7 +598,7 @@
|
||||
"signalStrength": "Sağlamlık",
|
||||
"signalQuality": "Kalite",
|
||||
"symbolQuality": "Kalite",
|
||||
"networkRate": "Bit Oranı",
|
||||
"networkRate": "Bit Hızı",
|
||||
"clientIP": "Alıcı"
|
||||
},
|
||||
"scrutiny": {
|
||||
@@ -611,13 +611,13 @@
|
||||
"total": "Toplam"
|
||||
},
|
||||
"pangolin": {
|
||||
"orgs": "Orgs",
|
||||
"sites": "Sites",
|
||||
"resources": "Resources",
|
||||
"targets": "Targets",
|
||||
"traffic": "Traffic",
|
||||
"in": "In",
|
||||
"out": "Out"
|
||||
"orgs": "Kuruluşlar",
|
||||
"sites": "Siteler",
|
||||
"resources": "Kaynaklar",
|
||||
"targets": "Hedefler",
|
||||
"traffic": "Trafik",
|
||||
"in": "Gelen",
|
||||
"out": "Giden"
|
||||
},
|
||||
"peanut": {
|
||||
"battery_charge": "Pil Yüzdesi",
|
||||
@@ -676,7 +676,7 @@
|
||||
"wanStatus": "WAN Durumu",
|
||||
"up": "Çalışıyor",
|
||||
"down": "Çalışmayan",
|
||||
"temp": "Temp",
|
||||
"temp": "Sıcaklık",
|
||||
"disk": "Disk Kullanımı",
|
||||
"wanIP": "WAN IP"
|
||||
},
|
||||
@@ -697,7 +697,7 @@
|
||||
"down": "Çalışmayan site",
|
||||
"uptime": "Çalışma süresi",
|
||||
"incident": "Olay",
|
||||
"m": "m"
|
||||
"m": "dk"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Diziler",
|
||||
@@ -716,8 +716,8 @@
|
||||
"volumeAvailable": "Uygun"
|
||||
},
|
||||
"dispatcharr": {
|
||||
"channels": "Channels",
|
||||
"streams": "Streams"
|
||||
"channels": "Kanallar",
|
||||
"streams": "Akışlar"
|
||||
},
|
||||
"mylar": {
|
||||
"series": "Diziler",
|
||||
@@ -771,12 +771,12 @@
|
||||
"nodes": "Düğümler"
|
||||
},
|
||||
"prometheus": {
|
||||
"targets_up": "Hedef Çalışıyor",
|
||||
"targets_up": "Çalışan Hedef",
|
||||
"targets_down": "Çalışmayan hedef",
|
||||
"targets_total": "Toplam Hedef"
|
||||
},
|
||||
"gatus": {
|
||||
"up": "Sites Up",
|
||||
"up": "Çalışan Siteler",
|
||||
"down": "Çalışmayan site",
|
||||
"uptime": "Çalışma süresi"
|
||||
},
|
||||
@@ -784,7 +784,7 @@
|
||||
"gross_percent_today": "Bugün",
|
||||
"gross_percent_1y": "Bir yıl",
|
||||
"gross_percent_max": "Tüm zaman",
|
||||
"net_worth": "Net Worth"
|
||||
"net_worth": "Net Değer"
|
||||
},
|
||||
"audiobookshelf": {
|
||||
"podcasts": "Podcast",
|
||||
@@ -805,13 +805,13 @@
|
||||
"books": "Kitaplar",
|
||||
"authors": "Yazarlar",
|
||||
"categories": "Kategoriler",
|
||||
"series": "Seriler"
|
||||
"series": "Diziler"
|
||||
},
|
||||
"booklore": {
|
||||
"libraries": "Libraries",
|
||||
"books": "Books",
|
||||
"reading": "Reading",
|
||||
"finished": "Finished"
|
||||
"libraries": "Kütüphaneler",
|
||||
"books": "Kitaplar",
|
||||
"reading": "Okunuyor",
|
||||
"finished": "Bitti"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadCount": "Kuyruk",
|
||||
@@ -820,7 +820,7 @@
|
||||
"downloadSpeed": "Hız"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Seriler",
|
||||
"seriesCount": "Diziler",
|
||||
"totalFiles": "Dosyalar"
|
||||
},
|
||||
"azuredevops": {
|
||||
@@ -865,7 +865,7 @@
|
||||
"total": "Toplam",
|
||||
"running": "Çalışıyor",
|
||||
"stopped": "Durdu",
|
||||
"passed": "Passed",
|
||||
"passed": "Başarılı",
|
||||
"failed": "Başarısız"
|
||||
},
|
||||
"openwrt": {
|
||||
@@ -874,7 +874,7 @@
|
||||
"up": "Çalışıyor",
|
||||
"down": "Çalışmayan",
|
||||
"bytesTx": "İletilen",
|
||||
"bytesRx": "Received"
|
||||
"bytesRx": "Alınan"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Durum",
|
||||
@@ -924,7 +924,7 @@
|
||||
},
|
||||
"gitea": {
|
||||
"notifications": "Bildirimler",
|
||||
"issues": "Issues",
|
||||
"issues": "Sorunlar",
|
||||
"pulls": "Değişiklik İstekleri",
|
||||
"repositories": "Depolar"
|
||||
},
|
||||
@@ -1006,21 +1006,21 @@
|
||||
"lubelogger": {
|
||||
"vehicle": "Taşıt",
|
||||
"vehicles": "Taşıtlar",
|
||||
"serviceRecords": "Service Records",
|
||||
"serviceRecords": "Servis Kayıtları",
|
||||
"reminders": "Hatırlatıcılar",
|
||||
"nextReminder": "Sonraki hatırlatıcı",
|
||||
"none": "None"
|
||||
"none": "Hiçbiri"
|
||||
},
|
||||
"vikunja": {
|
||||
"projects": "Etkin projeler",
|
||||
"tasks7d": "Bitişi Bu Hafta Olan Görevler",
|
||||
"tasksOverdue": "Overdue Tasks",
|
||||
"tasksInProgress": "Tasks In Progress"
|
||||
"tasksOverdue": "Gecikmiş Görevler",
|
||||
"tasksInProgress": "Devam Eden Görevler"
|
||||
},
|
||||
"headscale": {
|
||||
"name": "Ad",
|
||||
"address": "Adres",
|
||||
"last_seen": "Last Seen",
|
||||
"last_seen": "Son Görülme",
|
||||
"status": "Durum",
|
||||
"online": "Çevrimiçi",
|
||||
"offline": "Çevrimdışı"
|
||||
@@ -1031,21 +1031,21 @@
|
||||
"up": "Çalışıyor",
|
||||
"down": "Çalışmayan",
|
||||
"paused": "Durduruldu",
|
||||
"pending": "Pending",
|
||||
"pending": "Beklemede",
|
||||
"status": "Durum",
|
||||
"updated": "Güncellendi",
|
||||
"cpu": "İşlemci",
|
||||
"memory": "Bellek",
|
||||
"disk": "Disk",
|
||||
"disk": "Depolama",
|
||||
"network": "NET"
|
||||
},
|
||||
"argocd": {
|
||||
"apps": "Uygulamalar",
|
||||
"synced": "Synced",
|
||||
"outOfSync": "Out Of Sync",
|
||||
"synced": "Senkron",
|
||||
"outOfSync": "Senkron Değil",
|
||||
"healthy": "Sağlıklı",
|
||||
"degraded": "Degraded",
|
||||
"progressing": "Progressing",
|
||||
"degraded": "Sorunlu",
|
||||
"progressing": "Uygulanıyor",
|
||||
"missing": "Eksik",
|
||||
"suspended": "Askıya Alındı"
|
||||
},
|
||||
@@ -1053,22 +1053,22 @@
|
||||
"loading": "Yükleniyor"
|
||||
},
|
||||
"gitlab": {
|
||||
"groups": "Groups",
|
||||
"issues": "Issues",
|
||||
"merges": "Merge Requests",
|
||||
"projects": "Projects"
|
||||
"groups": "Gruplar",
|
||||
"issues": "Sorunlar",
|
||||
"merges": "Birleştirme İstekleri",
|
||||
"projects": "Projeler"
|
||||
},
|
||||
"apcups": {
|
||||
"status": "Durum",
|
||||
"load": "Load",
|
||||
"bcharge": "Battery Charge",
|
||||
"load": "Yük",
|
||||
"bcharge": "Pil Yüzdesi",
|
||||
"timeleft": "Kalan zaman"
|
||||
},
|
||||
"karakeep": {
|
||||
"bookmarks": "Yer imleri",
|
||||
"favorites": "Gözdeler",
|
||||
"archived": "Archived",
|
||||
"highlights": "Highlights",
|
||||
"archived": "Arşivlenen",
|
||||
"highlights": "Öne Çıkanlar",
|
||||
"lists": "Listeler",
|
||||
"tags": "Etiketler"
|
||||
},
|
||||
@@ -1090,8 +1090,8 @@
|
||||
"other": "Diğer"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
"serviceErrors": "Hizmet Sorunları",
|
||||
"hostErrors": "Sunucu Sorunları"
|
||||
},
|
||||
"komodo": {
|
||||
"total": "Toplam",
|
||||
@@ -1101,8 +1101,8 @@
|
||||
"unhealthy": "Sağlıksız",
|
||||
"unknown": "Bilinmeyen",
|
||||
"servers": "Sunucular",
|
||||
"stacks": "Stacks",
|
||||
"containers": "Containers"
|
||||
"stacks": "Yığınlar",
|
||||
"containers": "Konteynerler"
|
||||
},
|
||||
"filebrowser": {
|
||||
"available": "Uygun",
|
||||
@@ -1120,11 +1120,11 @@
|
||||
"STARTED": "Başladı",
|
||||
"STOPPED": "Durdu",
|
||||
"NEW_ARRAY": "Yeni dizi",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"RECON_DISK": "Disk Yeniden Oluşturuluyor",
|
||||
"DISABLE_DISK": "Disk devre dışı",
|
||||
"SWAP_DSBL": "Swap devre dışı",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"INVALID_EXPANSION": "Geçersiz Genişletme",
|
||||
"PARITY_NOT_BIGGEST": "Parity En Büyük Disk Değil",
|
||||
"TOO_MANY_MISSING_DISKS": "Çok fazla disk eksik",
|
||||
"NEW_DISK_TOO_SMALL": "Yeni disk çok küçük",
|
||||
"NO_DATA_DISKS": "Veri diski yok",
|
||||
@@ -1139,37 +1139,37 @@
|
||||
"poolFree": "{{pool}} boş"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
"num_plans": "Planlar",
|
||||
"num_success_30": "Başarılılar",
|
||||
"num_failure_30": "Başarısızlıklar",
|
||||
"num_success_latest": "Başarılı",
|
||||
"num_failure_latest": "Başarısız",
|
||||
"bytes_added_30": "Eklenen Veri"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
"songs": "Şarkılar",
|
||||
"time": "Zaman",
|
||||
"artists": "Sanatçılar"
|
||||
},
|
||||
"arcane": {
|
||||
"containers": "Containers",
|
||||
"images": "Images",
|
||||
"image_updates": "Image Updates",
|
||||
"images_unused": "Unused",
|
||||
"environment_required": "Environment ID Required"
|
||||
"containers": "Konteynerler",
|
||||
"images": "İmajlar",
|
||||
"image_updates": "İmaj Güncellemeleri",
|
||||
"images_unused": "Kullanılmayan İmajlar",
|
||||
"environment_required": "Ortam Kimliği Gerekli"
|
||||
},
|
||||
"dockhand": {
|
||||
"running": "Running",
|
||||
"stopped": "Stopped",
|
||||
"cpu": "CPU",
|
||||
"memory": "Memory",
|
||||
"images": "Images",
|
||||
"volumes": "Volumes",
|
||||
"events_today": "Events Today",
|
||||
"pending_updates": "Pending Updates",
|
||||
"stacks": "Stacks",
|
||||
"paused": "Paused",
|
||||
"total": "Total",
|
||||
"environment_not_found": "Environment Not Found"
|
||||
"running": "Çalışan",
|
||||
"stopped": "Durdurulan",
|
||||
"cpu": "İşlemci",
|
||||
"memory": "Bellek",
|
||||
"images": "İmajlar",
|
||||
"volumes": "Birimler",
|
||||
"events_today": "Bugünkü Olaylar",
|
||||
"pending_updates": "Bekleyen Güncellemeler",
|
||||
"stacks": "Yığınlar",
|
||||
"paused": "Duraklatılan",
|
||||
"total": "Toplam",
|
||||
"environment_not_found": "Ortam Bulunamadı"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1059,10 +1059,10 @@
|
||||
"projects": "项目"
|
||||
},
|
||||
"apcups": {
|
||||
"status": "Status",
|
||||
"load": "Load",
|
||||
"bcharge": "Battery Charge",
|
||||
"timeleft": "Time Left"
|
||||
"status": "状态",
|
||||
"load": "负载",
|
||||
"bcharge": "电池电量",
|
||||
"timeleft": "剩余供电时间"
|
||||
},
|
||||
"karakeep": {
|
||||
"bookmarks": "书签",
|
||||
|
||||
8
pyproject.toml
Normal file
8
pyproject.toml
Normal file
@@ -0,0 +1,8 @@
|
||||
[project]
|
||||
name = "homepage-docs"
|
||||
version = "1.0.0"
|
||||
description = "Documentation for the Homepage project"
|
||||
requires-python = ">=3.13"
|
||||
dependencies = [
|
||||
"zensical>=0.0.21",
|
||||
]
|
||||
@@ -1,47 +0,0 @@
|
||||
Babel==2.12.1
|
||||
backrefs==5.9
|
||||
cairocffi==1.7.1
|
||||
CairoSVG==2.7.1
|
||||
certifi==2023.7.22
|
||||
cffi==1.17.1
|
||||
cfgv==3.4.0
|
||||
charset-normalizer==3.2.0
|
||||
click==8.1.7
|
||||
colorama==0.4.6
|
||||
cssselect2==0.7.0
|
||||
defusedxml==0.7.1
|
||||
distlib==0.3.9
|
||||
filelock==3.17.0
|
||||
ghp-import==2.1.0
|
||||
identify==2.6.7
|
||||
idna==3.4
|
||||
Jinja2==3.1.2
|
||||
Markdown==3.4.4
|
||||
MarkupSafe==2.1.3
|
||||
mergedeep==1.3.4
|
||||
mkdocs==1.6.0
|
||||
mkdocs-get-deps==0.2.0
|
||||
mkdocs-material==9.6.18
|
||||
mkdocs-material-extensions==1.3.1
|
||||
mkdocs-redirects==1.2.1
|
||||
nodeenv==1.9.1
|
||||
packaging==23.1
|
||||
paginate==0.5.6
|
||||
pathspec==0.11.2
|
||||
pillow==10.4.0
|
||||
platformdirs==3.10.0
|
||||
pre-commit==3.5.0
|
||||
pycparser==2.22
|
||||
Pygments==2.16.1
|
||||
pymdown-extensions==10.3
|
||||
python-dateutil==2.8.2
|
||||
PyYAML==6.0.1
|
||||
pyyaml_env_tag==0.1
|
||||
regex==2023.8.8
|
||||
requests==2.31.0
|
||||
six==1.16.0
|
||||
tinycss2==1.4.0
|
||||
urllib3==2.0.5
|
||||
virtualenv==20.29.2
|
||||
watchdog==3.0.0
|
||||
webencodings==0.5.1
|
||||
@@ -339,7 +339,7 @@ describe("pages/index Index routing + SWR branches", () => {
|
||||
localStorage.setItem("hash", "old-hash");
|
||||
|
||||
const fetchSpy = vi.fn(async () => ({ ok: true }));
|
||||
// eslint-disable-next-line no-global-assign
|
||||
|
||||
fetch = fetchSpy;
|
||||
|
||||
let reloadSpy;
|
||||
|
||||
@@ -277,7 +277,7 @@ describe("components/quicklaunch", () => {
|
||||
const fetchSpy = vi.fn(async () => ({
|
||||
json: async () => ["test", ["test 1", "test 2", "test 3", "test 4", "test 5"]],
|
||||
}));
|
||||
// eslint-disable-next-line no-global-assign
|
||||
|
||||
fetch = fetchSpy;
|
||||
|
||||
renderWithProviders(<Wrapper />, {
|
||||
@@ -315,7 +315,6 @@ describe("components/quicklaunch", () => {
|
||||
|
||||
expect(input).toHaveValue("test 1");
|
||||
|
||||
// eslint-disable-next-line no-global-assign
|
||||
fetch = originalFetch;
|
||||
});
|
||||
|
||||
|
||||
@@ -32,7 +32,13 @@ vi.mock("@headlessui/react", async () => {
|
||||
const ctx = useContext(ListboxContext);
|
||||
const content = typeof children === "function" ? children({ active: false }) : children;
|
||||
return (
|
||||
<div role="option" data-provider={value?.name} onClick={() => ctx?.onChange?.(value)} {...props}>
|
||||
<div
|
||||
role="option"
|
||||
data-provider={value?.name}
|
||||
aria-selected={ctx?.value === value}
|
||||
onClick={() => ctx?.onChange?.(value)}
|
||||
{...props}
|
||||
>
|
||||
{content}
|
||||
</div>
|
||||
);
|
||||
@@ -166,7 +172,7 @@ describe("components/widgets/search", () => {
|
||||
const fetchSpy = vi.fn(async () => ({
|
||||
json: async () => ["hel", ["hello", "help", "helm", "helium", "held"]],
|
||||
}));
|
||||
// eslint-disable-next-line no-global-assign
|
||||
|
||||
fetch = fetchSpy;
|
||||
|
||||
renderWithProviders(<Search options={{ provider: ["google"], showSearchSuggestions: true, target: "_self" }} />, {
|
||||
@@ -192,7 +198,7 @@ describe("components/widgets/search", () => {
|
||||
expect(openSpy).toHaveBeenCalledWith("https://www.google.com/search?q=hello", "_self");
|
||||
|
||||
openSpy.mockRestore();
|
||||
// eslint-disable-next-line no-global-assign
|
||||
|
||||
fetch = originalFetch;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -6,7 +6,7 @@ export function formatApiCall(url, args) {
|
||||
if (key === "url") {
|
||||
value = value.replace(/\/+$/, ""); // remove trailing slashes
|
||||
}
|
||||
return value || "";
|
||||
return value?.toString() || "";
|
||||
};
|
||||
|
||||
return url.replace(find, replace).replace(find, replace);
|
||||
|
||||
@@ -24,7 +24,8 @@ export default function Component({ service }) {
|
||||
const { data: images, error: imagesError } = useWidgetAPI(widget, "images");
|
||||
const { data: updates, error: updatesError } = useWidgetAPI(widget, "updates");
|
||||
|
||||
const error = containersError ?? imagesError ?? updatesError;
|
||||
const error =
|
||||
containersError ?? imagesError ?? updatesError ?? containers?.detail ?? images?.detail ?? updates?.detail;
|
||||
if (error) {
|
||||
return <Container service={service} error={error} />;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,16 @@ describe("widgets/arcane/component", () => {
|
||||
expect(screen.getByText("arcane.environment_required")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("shows an error when API calls return detail errors", () => {
|
||||
useWidgetAPI.mockImplementation(() => ({ data: { detail: "Specific API error" }, error: undefined }));
|
||||
|
||||
renderWithProviders(<Component service={{ widget: { type: "arcane", env: "prod" } }} />, {
|
||||
settings: { hideErrors: false },
|
||||
});
|
||||
|
||||
expect(screen.getByText("Specific API error")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("renders placeholders while loading data", () => {
|
||||
useWidgetAPI.mockImplementation(() => ({ data: undefined, error: undefined }));
|
||||
|
||||
|
||||
139
uv.lock
generated
Normal file
139
uv.lock
generated
Normal file
@@ -0,0 +1,139 @@
|
||||
version = 1
|
||||
revision = 1
|
||||
requires-python = ">=3.13"
|
||||
|
||||
[[package]]
|
||||
name = "click"
|
||||
version = "8.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "deepmerge"
|
||||
version = "2.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a8/3a/b0ba594708f1ad0bc735884b3ad854d3ca3bdc1d741e56e40bbda6263499/deepmerge-2.0.tar.gz", hash = "sha256:5c3d86081fbebd04dd5de03626a0607b809a98fb6ccba5770b62466fe940ff20", size = 19890 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/2d/82/e5d2c1c67d19841e9edc74954c827444ae826978499bde3dfc1d007c8c11/deepmerge-2.0-py3-none-any.whl", hash = "sha256:6de9ce507115cff0bed95ff0ce9ecc31088ef50cbdf09bc90a09349a318b3d00", size = 13475 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "homepage-docs"
|
||||
version = "1.0.0"
|
||||
source = { virtual = "." }
|
||||
dependencies = [
|
||||
{ name = "zensical" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "zensical", specifier = ">=0.0.21" }]
|
||||
|
||||
[[package]]
|
||||
name = "markdown"
|
||||
version = "3.10.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/b7/b1/af95bcae8549f1f3fd70faacb29075826a0d689a27f232e8cee315efa053/markdown-3.10.1.tar.gz", hash = "sha256:1c19c10bd5c14ac948c53d0d762a04e2fa35a6d58a6b7b1e6bfcbe6fefc0001a", size = 365402 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/59/1b/6ef961f543593969d25b2afe57a3564200280528caa9bd1082eecdd7b3bc/markdown-3.10.1-py3-none-any.whl", hash = "sha256:867d788939fe33e4b736426f5b9f651ad0c0ae0ecf89df0ca5d1176c70812fe3", size = 107684 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pygments"
|
||||
version = "2.19.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pymdown-extensions"
|
||||
version = "10.20.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "markdown" },
|
||||
{ name = "pyyaml" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/1e/6c/9e370934bfa30e889d12e61d0dae009991294f40055c238980066a7fbd83/pymdown_extensions-10.20.1.tar.gz", hash = "sha256:e7e39c865727338d434b55f1dd8da51febcffcaebd6e1a0b9c836243f660740a", size = 852860 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/40/6d/b6ee155462a0156b94312bdd82d2b92ea56e909740045a87ccb98bf52405/pymdown_extensions-10.20.1-py3-none-any.whl", hash = "sha256:24af7feacbca56504b313b7b418c4f5e1317bb5fea60f03d57be7fcc40912aa0", size = 268768 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyyaml"
|
||||
version = "6.0.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 },
|
||||
{ url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 },
|
||||
{ url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159 },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626 },
|
||||
{ url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613 },
|
||||
{ url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115 },
|
||||
{ url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 },
|
||||
{ url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 },
|
||||
{ url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 },
|
||||
{ url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814 },
|
||||
{ url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809 },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454 },
|
||||
{ url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355 },
|
||||
{ url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175 },
|
||||
{ url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228 },
|
||||
{ url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194 },
|
||||
{ url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 },
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 },
|
||||
{ url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108 },
|
||||
{ url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641 },
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901 },
|
||||
{ url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261 },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272 },
|
||||
{ url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923 },
|
||||
{ url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 },
|
||||
{ url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zensical"
|
||||
version = "0.0.21"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "click" },
|
||||
{ name = "deepmerge" },
|
||||
{ name = "markdown" },
|
||||
{ name = "pygments" },
|
||||
{ name = "pymdown-extensions" },
|
||||
{ name = "pyyaml" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/8a/50/2655b5f72d0c72f4366be580f5e2354ff05280d047ea986fe89570e44589/zensical-0.0.21.tar.gz", hash = "sha256:c13563836fa63a3cabeffd83fe3a770ca740cfa5ae7b85df85d89837e31b3b4a", size = 3819731 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/98/90710d232cb35b633815fa7b493da542391b89283b6103a5bb4ae9fc0dd9/zensical-0.0.21-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:67404cc70c330246dfb7269bcdb60a25be0bb60a212a09c9c50229a1341b1f84", size = 12237120 },
|
||||
{ url = "https://files.pythonhosted.org/packages/97/fb/4280b3781157e8f051711732192f949bf29beeafd0df3e33c1c8bf9b7a1a/zensical-0.0.21-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:d4fd253ccfbf5af56434124f13bac01344e456c020148369b18d8836b6537c3c", size = 12118047 },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/b3/b7f85ae9cf920cf9f17bf157ae6c274919477148feb7716bf735636caa0e/zensical-0.0.21-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:440e40cdc30a29bf7466bcd6f43ed7bd1c54ea3f1a0fefca65619358b481a5bc", size = 12473440 },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/ac/1dc6e98f79ed19b9f103c88a0bd271f9140565d7d26b64bc1542b3ef6d91/zensical-0.0.21-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:368e832fc8068e75dc45cab59379db4cefcd81eb116f48d058db8fb7b7aa8d14", size = 12412588 },
|
||||
{ url = "https://files.pythonhosted.org/packages/bd/76/16a580f6dd32b387caa4a41615451e7dddd1917a2ff2e5b08744f41b4e11/zensical-0.0.21-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4ab962d47f9dd73510eed168469326c7a452554dfbfdb9cdf85efc7140244df", size = 12749438 },
|
||||
{ url = "https://files.pythonhosted.org/packages/95/30/4baaa1c910eee61db5f49d0d45f2e550a0027218c618f3dd7f8da966a019/zensical-0.0.21-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b846d53dfce007f056ff31848f87f3f2a388228e24d4851c0cafdce0fa204c9b", size = 12514504 },
|
||||
{ url = "https://files.pythonhosted.org/packages/76/77/931fccae5580b94409a0448a26106f922dcfa7822e7b93cacd2876dd63a8/zensical-0.0.21-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:daac1075552d230d52d621d2e4754ba24d5afcaa201a7a991f1a8d57e320c9de", size = 12647832 },
|
||||
{ url = "https://files.pythonhosted.org/packages/5b/82/3cf75de64340829d55c87c36704f4d1d8c952bd2cdc8a7bc48cbfb8ab333/zensical-0.0.21-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:7b380f545adb6d40896f9bd698eb0e1540ed4258d35b83f55f91658d0fdae312", size = 12678537 },
|
||||
{ url = "https://files.pythonhosted.org/packages/77/91/6f4938dceeaa241f78bbfaf58a94acef10ba18be3468795173e3087abeb6/zensical-0.0.21-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:5c2227fdab64616bea94b40b8340bafe00e2e23631cc58eeea1e7267167e6ac5", size = 12822164 },
|
||||
{ url = "https://files.pythonhosted.org/packages/a2/4e/a9c9d25ef0766f767db7b4f09da68da9b3d8a28c3d68cfae01f8e3f9e297/zensical-0.0.21-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2e0f5154d236ed0f98662ee68785b67e8cd2138ea9d5e26070649e93c22eeee0", size = 12785632 },
|
||||
{ url = "https://files.pythonhosted.org/packages/8d/76/8627548f6d00e676009a129be49bb22ca2aa3c938df9b642eea18c381c98/zensical-0.0.21-cp310-abi3-win32.whl", hash = "sha256:0b72e1f8a880c130cbd52335e3bc5dff666291cec40eaf09061d5d7a5a9f8068", size = 11832998 },
|
||||
{ url = "https://files.pythonhosted.org/packages/c1/9a/7767cfcf70a2022b2b4d49c48f022fde3feb3d3360ac084c111e75df96cf/zensical-0.0.21-cp310-abi3-win_amd64.whl", hash = "sha256:eec08ff6fa335c11b81599032aaeda91c65d31ef03b97aa9239074bf19963a98", size = 12033476 },
|
||||
]
|
||||
Reference in New Issue
Block a user