disfactory-notification

Month: 2025-07

2025-07-02

github2 20:10:52

`<https://github.com/Disfactory/Disfactory/commit/3d0b9a8f53e5ffa7a7afe22be721be4fc8860fd3|3d0b9a8f>` - feat(review-app): add project-independent configuration and usage support `<https://github.com/Disfactory/Disfactory/commit/651e5701bfea63dc021186efecef6cc889849e16|651e5701>` - refactor: extract zeabur script as standalone action `<https://github.com/Disfactory/Disfactory/commit/f9d301cbf013b4aaa4fff1e08d89a0c31ca1f752|f9d301cb>` - fix(log): redirect all log output to stderr for better error handling `<https://github.com/Disfactory/Disfactory/commit/22a6405b09d4efcea98e53bf1b48cba80ec09287|22a6405b>` - fix: full sha image reference `<https://github.com/Disfactory/Disfactory/commit/f2082368f974445b7ab5a2d3f805ed4d8fc84de4|f2082368>` - style: strip trailing spaces `<https://github.com/Disfactory/Disfactory/commit/43193213f14e4324b8a8b0d3bfafcf6f840291fb|43193213>` - fix: try expanding sha in the script `<https://github.com/Disfactory/Disfactory/commit/5a7ace6fce1b7487df93f4c9e8a158f2dd3e1dab|5a7ace6f>` - fix: try fixing workflow outputs `<https://github.com/Disfactory/Disfactory/commit/09e1533ce2c4f430809a6436babaa7ad015b49fa|09e1533c>` - feat: update github workflow action reference `<https://github.com/Disfactory/Disfactory/commit/238da4b0e53fb387f0e6238cc763e8d9af2c7119|238da4b0>` - docs: update README of zeabur review app action `<https://github.com/Disfactory/Disfactory/commit/bc56a628482844b3124bc4af6f2e8e9cd991b9a2|bc56a628>` - chore: remove zeabur-review-app-action from repo `<https://github.com/Disfactory/Disfactory/commit/f6ed374bb58d7b13fcdfa5b624bd671213964ddc|f6ed374b>` - Merge pull request #675 from Disfactory/chore/make-zeabur-deploy-script-project-independent

github2 20:10:52

`<https://github.com/Disfactory/Disfactory/commit/3d0b9a8f53e5ffa7a7afe22be721be4fc8860fd3|3d0b9a8f>` - feat(review-app): add project-independent configuration and usage support `<https://github.com/Disfactory/Disfactory/commit/651e5701bfea63dc021186efecef6cc889849e16|651e5701>` - refactor: extract zeabur script as standalone action `<https://github.com/Disfactory/Disfactory/commit/f9d301cbf013b4aaa4fff1e08d89a0c31ca1f752|f9d301cb>` - fix(log): redirect all log output to stderr for better error handling `<https://github.com/Disfactory/Disfactory/commit/22a6405b09d4efcea98e53bf1b48cba80ec09287|22a6405b>` - fix: full sha image reference `<https://github.com/Disfactory/Disfactory/commit/f2082368f974445b7ab5a2d3f805ed4d8fc84de4|f2082368>` - style: strip trailing spaces `<https://github.com/Disfactory/Disfactory/commit/43193213f14e4324b8a8b0d3bfafcf6f840291fb|43193213>` - fix: try expanding sha in the script `<https://github.com/Disfactory/Disfactory/commit/5a7ace6fce1b7487df93f4c9e8a158f2dd3e1dab|5a7ace6f>` - fix: try fixing workflow outputs `<https://github.com/Disfactory/Disfactory/commit/09e1533ce2c4f430809a6436babaa7ad015b49fa|09e1533c>` - feat: update github workflow action reference `<https://github.com/Disfactory/Disfactory/commit/238da4b0e53fb387f0e6238cc763e8d9af2c7119|238da4b0>` - docs: update README of zeabur review app action `<https://github.com/Disfactory/Disfactory/commit/bc56a628482844b3124bc4af6f2e8e9cd991b9a2|bc56a628>` - chore: remove zeabur-review-app-action from repo `<https://github.com/Disfactory/Disfactory/commit/f6ed374bb58d7b13fcdfa5b624bd671213964ddc|f6ed374b>` - Merge pull request #675 from Disfactory/chore/make-zeabur-deploy-script-project-independent

github2 20:23:17

<https://github.com/Disfactory/Disfactory/pull/660|#660 Support multiple image upload backends with ImageBB and automatic fallback>

This PR implements a comprehensive solution for multiple image upload backends to address Imgur API being blocked in Taiwan. ## Problem The current implementation only supports Imgur for image uploads, which is problematic because: • Imgur's API is blocked in Taiwan • No fallback mechanism when external services fail • Frontend handles image upload, limiting backend control ## Solution ### :wrench: New Multi-Backend Image Upload Service Created `api/services/image_upload.py` with: • *Abstract backend interface* for pluggable upload providers • *ImgurBackend* - Enhanced existing Imgur support with better error handling • *ImageBBBackend* - New backend supporting ImageBB API as Imgur alternative • *LocalBackend* - Fallback local storage when external services fail • *ImageUploadService* - Orchestrates backends with automatic failover ### :rocket: New Direct Upload API Endpoint Added `POST /factories/{id}/images/upload` supporting: • Direct multipart file uploads (no more frontend pre-upload) • All existing metadata: GPS coordinates, datetime, contact info • Automatic backend selection with graceful fallback • Same response format as existing endpoint ### :gear: Enhanced Configuration # Existing Imgur support DISFACTORY_IMGUR_CLIENT_ID=your_imgur_client_id # New ImageBB support DISFACTORY_IMAGEBB_API_KEY=your_imagebb_api_key Service automatically detects available backends and provides fallback order: *Imgur → ImageBB → Local Storage* ### :arrows_counterclockwise: Backward Compatibility • Existing `/factories/{id}/images` URL-based endpoint unchanged • Legacy `upload_image` task enhanced to use new multi-backend service • All existing functionality preserved • No database schema changes required ### :test_tube: Comprehensive Testing • Unit tests for all backend implementations • Integration tests for new file upload endpoint • Mock validation confirms service logic • Management commands for testing and maintenance ### :books: Documentation &amp; Tools • Complete user guide with API examples • Migration guide for frontend developers • Enhanced `reupload` management command with dry-run support • New `test_image_upload` command for service validation ## Usage Examples ### Frontend Integration (New Direct Upload) const formData = new FormData(); formData.append('image', imageFile); formData.append('nickname', 'Reporter'); formData.append('Latitude', '23.5'); fetch(`/api/factories/${factoryId}/images/upload`, { method: 'POST', body: formData }); ### Backend Service Usage from api.services.image_upload import ImageUploadService service = ImageUploadService() result = service.upload_image(image_buffer) # Automatically tries Imgur → ImageBB → Local with detailed logging ## Benefits :white_check_mark: *Reliability*: Multiple providers ensure upload success even when services are blocked :white_check_mark: *Flexibility*: Easy to add new backends (Cloudinary, AWS S3, etc.) :white_check_mark: *Control*: Backend handles uploads with better error handling and logging :white_check_mark: *Compatibility*: Existing integrations continue working unchanged :white_check_mark: *Monitoring*: Detailed logging shows which backend succeeded/failed This implementation ensures robust image upload functionality regardless of regional service restrictions while maintaining full backward compatibility. Fixes <https://github.com/Disfactory/Disfactory/issues/659|#659>. Warning Firewall rules blocked me from connecting to one or more addresses #### I tried to connect to the following addresses, but was blocked by firewall rules: • `<http://esm.ubuntu.com|esm.ubuntu.com>` • Triggering command: `/usr/lib/apt/methods/https ` (dns block) If you need me to access, download, or install something from one of these locations, you can either: • Configure <https://gh.io/copilot/actions-setup-steps|Actions setup steps> to set up my environment, which run before the firewall is enabled • Add the appropriate URLs or hosts to my <https://gh.io/copilot/firewall-config|firewall allow list> --- :speech_balloon: Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click <https://survey.alchemer.com/s3/8343779/Copilot-Coding-agent|here> to start the survey.

github2 20:23:17

<https://github.com/Disfactory/Disfactory/pull/660|#660 Support multiple image upload backends with ImageBB and automatic fallback>

This PR implements a comprehensive solution for multiple image upload backends to address Imgur API being blocked in Taiwan. ## Problem The current implementation only supports Imgur for image uploads, which is problematic because: • Imgur's API is blocked in Taiwan • No fallback mechanism when external services fail • Frontend handles image upload, limiting backend control ## Solution ### :wrench: New Multi-Backend Image Upload Service Created `api/services/image_upload.py` with: • *Abstract backend interface* for pluggable upload providers • *ImgurBackend* - Enhanced existing Imgur support with better error handling • *ImageBBBackend* - New backend supporting ImageBB API as Imgur alternative • *LocalBackend* - Fallback local storage when external services fail • *ImageUploadService* - Orchestrates backends with automatic failover ### :rocket: New Direct Upload API Endpoint Added `POST /factories/{id}/images/upload` supporting: • Direct multipart file uploads (no more frontend pre-upload) • All existing metadata: GPS coordinates, datetime, contact info • Automatic backend selection with graceful fallback • Same response format as existing endpoint ### :gear: Enhanced Configuration # Existing Imgur support DISFACTORY_IMGUR_CLIENT_ID=your_imgur_client_id # New ImageBB support DISFACTORY_IMAGEBB_API_KEY=your_imagebb_api_key Service automatically detects available backends and provides fallback order: *Imgur → ImageBB → Local Storage* ### :arrows_counterclockwise: Backward Compatibility • Existing `/factories/{id}/images` URL-based endpoint unchanged • Legacy `upload_image` task enhanced to use new multi-backend service • All existing functionality preserved • No database schema changes required ### :test_tube: Comprehensive Testing • Unit tests for all backend implementations • Integration tests for new file upload endpoint • Mock validation confirms service logic • Management commands for testing and maintenance ### :books: Documentation &amp; Tools • Complete user guide with API examples • Migration guide for frontend developers • Enhanced `reupload` management command with dry-run support • New `test_image_upload` command for service validation ## Usage Examples ### Frontend Integration (New Direct Upload) const formData = new FormData(); formData.append('image', imageFile); formData.append('nickname', 'Reporter'); formData.append('Latitude', '23.5'); fetch(`/api/factories/${factoryId}/images/upload`, { method: 'POST', body: formData }); ### Backend Service Usage from api.services.image_upload import ImageUploadService service = ImageUploadService() result = service.upload_image(image_buffer) # Automatically tries Imgur → ImageBB → Local with detailed logging ## Benefits :white_check_mark: *Reliability*: Multiple providers ensure upload success even when services are blocked :white_check_mark: *Flexibility*: Easy to add new backends (Cloudinary, AWS S3, etc.) :white_check_mark: *Control*: Backend handles uploads with better error handling and logging :white_check_mark: *Compatibility*: Existing integrations continue working unchanged :white_check_mark: *Monitoring*: Detailed logging shows which backend succeeded/failed This implementation ensures robust image upload functionality regardless of regional service restrictions while maintaining full backward compatibility. Fixes <https://github.com/Disfactory/Disfactory/issues/659|#659>. Warning Firewall rules blocked me from connecting to one or more addresses #### I tried to connect to the following addresses, but was blocked by firewall rules: • `<http://esm.ubuntu.com|esm.ubuntu.com>` • Triggering command: `/usr/lib/apt/methods/https ` (dns block) If you need me to access, download, or install something from one of these locations, you can either: • Configure <https://gh.io/copilot/actions-setup-steps|Actions setup steps> to set up my environment, which run before the firewall is enabled • Add the appropriate URLs or hosts to my <https://gh.io/copilot/firewall-config|firewall allow list> --- :speech_balloon: Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click <https://survey.alchemer.com/s3/8343779/Copilot-Coding-agent|here> to start the survey.

github2 20:41:09

<https://github.com/Disfactory/Disfactory/pull/677|#677 fix(ci): ensure workflow uses input commit SHA for Docker builds>

## Summary • Fixed issue where workflow_dispatch with specific commit SHA would still build Docker images from branch HEAD • Updated checkout actions to use input commit SHA when provided • Ensures Docker image tags match the actual commit being built ## Changes • Modified build-backend-image.yml to checkout the specified commit SHA • Updated both build and deploy jobs to use consistent commit references • Docker images will now be tagged with the correct commit SHA ## Test plan • Test workflow_dispatch with specific commit SHA • Verify Docker images are built from correct commit • Confirm image tags match specified commit SHA :robot_face: Generated with <https://claude.ai/code|Claude Code>

github2 20:41:09

<https://github.com/Disfactory/Disfactory/pull/677|#677 fix(ci): ensure workflow uses input commit SHA for Docker builds>

## Summary • Fixed issue where workflow_dispatch with specific commit SHA would still build Docker images from branch HEAD • Updated checkout actions to use input commit SHA when provided • Ensures Docker image tags match the actual commit being built ## Changes • Modified build-backend-image.yml to checkout the specified commit SHA • Updated both build and deploy jobs to use consistent commit references • Docker images will now be tagged with the correct commit SHA ## Test plan • Test workflow_dispatch with specific commit SHA • Verify Docker images are built from correct commit • Confirm image tags match specified commit SHA :robot_face: Generated with <https://claude.ai/code|Claude Code>

github2 20:47:31

`<https://github.com/Disfactory/Disfactory/commit/ec11a8b37e8b5d8b1cc544d26fdd818fe714eb88|ec11a8b3>` - fix(ci): use input commit SHA for git operations in workflow (#677)

github2 20:47:31

`<https://github.com/Disfactory/Disfactory/commit/ec11a8b37e8b5d8b1cc544d26fdd818fe714eb88|ec11a8b3>` - fix(ci): use input commit SHA for git operations in workflow (#677)

github2 21:25:54

<https://github.com/Disfactory/frontend/issues/190|#190 Fix Font-family in different browsers>

• 不同瀏覽器下(Edge、firefox),標題字體會跑掉。 • 需統一修改為微軟正黑體。 Assigns:<https://github.com/ChangRongXuan|Xuan>

github2 21:25:54

<https://github.com/Disfactory/frontend/issues/190|#190 Fix Font-family in different browsers>

• 不同瀏覽器下(Edge、firefox),標題字體會跑掉。 • 需統一修改為微軟正黑體。 Assigns:<https://github.com/ChangRongXuan|Xuan>

github2 21:31:15

<https://github.com/Disfactory/Disfactory/pull/678|#678 feat: add extensible image upload service with S3/R2 support>

## Summary • Add new `/api/upload` endpoint for direct image file uploads • Implement extensible image upload service architecture supporting S3/R2 and local storage • Replace imgur dependency with configurable storage backends • Add comprehensive unit tests for both controller and services ## Changes • *New endpoint*: `POST /api/upload` - accepts image files directly and returns URL • *Service architecture*: Abstract base class with S3 and local storage implementations • *Configuration*: Environment-based settings for storage service selection • *Dependencies*: Added boto3 for S3-compatible storage support • *Tests*: Complete test coverage for all components ## Configuration # For S3/Cloudflare R2 IMAGE_UPLOAD_SERVICE = 's3' # or 'local' IMAGE_UPLOAD_BUCKET = 'your-bucket-name' IMAGE_UPLOAD_ACCESS_KEY = 'your-access-key' IMAGE_UPLOAD_SECRET_KEY = 'your-secret-key' IMAGE_UPLOAD_ENDPOINT_URL = '<https://your-r2-endpoint.com>' # For R2 IMAGE_UPLOAD_PUBLIC_URL_BASE = '<https://your-cdn.com>' # Optional CDN ## Test plan • Unit tests for image upload controller • Unit tests for S3 and local storage services • Integration tests for endpoint validation • Error handling and edge cases • Manual testing with actual S3/R2 configuration • Performance testing with large files :robot_face: Generated with <https://claude.ai/code|Claude Code>

github2 21:31:15

<https://github.com/Disfactory/Disfactory/pull/678|#678 feat: add extensible image upload service with S3/R2 support>

## Summary • Add new `/api/upload` endpoint for direct image file uploads • Implement extensible image upload service architecture supporting S3/R2 and local storage • Replace imgur dependency with configurable storage backends • Add comprehensive unit tests for both controller and services ## Changes • *New endpoint*: `POST /api/upload` - accepts image files directly and returns URL • *Service architecture*: Abstract base class with S3 and local storage implementations • *Configuration*: Environment-based settings for storage service selection • *Dependencies*: Added boto3 for S3-compatible storage support • *Tests*: Complete test coverage for all components ## Configuration # For S3/Cloudflare R2 IMAGE_UPLOAD_SERVICE = 's3' # or 'local' IMAGE_UPLOAD_BUCKET = 'your-bucket-name' IMAGE_UPLOAD_ACCESS_KEY = 'your-access-key' IMAGE_UPLOAD_SECRET_KEY = 'your-secret-key' IMAGE_UPLOAD_ENDPOINT_URL = '<https://your-r2-endpoint.com>' # For R2 IMAGE_UPLOAD_PUBLIC_URL_BASE = '<https://your-cdn.com>' # Optional CDN ## Test plan • Unit tests for image upload controller • Unit tests for S3 and local storage services • Integration tests for endpoint validation • Error handling and edge cases • Manual testing with actual S3/R2 configuration • Performance testing with large files :robot_face: Generated with <https://claude.ai/code|Claude Code>

2025-07-08

github2 14:27:29

<https://github.com/Disfactory/Disfactory/issues/679|#679 掛「系統維修中」公告>

因為近期imgur的問題仍無法解決,希望可以掛一個系統維修中的公告- 可能公告內文: 「:wrench:【系統維修中!】目前上傳圖片功能受限,暫時停止回報功能,敬請見諒 :man-bowing: 各位使用disfactory.tw的朋友們好,我們近期接獲多位使用者反映,在檢舉違章工廠時無法成功上傳圖片。 經確認原因為目前使用的圖片託管平台,自 2025 年 5 月中起限制上傳,導致我們的網站無法順利將民眾上傳的照片轉存,因此現在暫時停止回報的功能。 目前我們正在嘗試修復此問題,並會盡快更新系統,恢復回報功能。 感謝大家的理解與支持!」

github2 14:27:29

<https://github.com/Disfactory/Disfactory/issues/679|#679 掛「系統維修中」公告>

因為近期imgur的問題仍無法解決,希望可以掛一個系統維修中的公告- 可能公告內文: 「:wrench:【系統維修中!】目前上傳圖片功能受限,暫時停止回報功能,敬請見諒 :man-bowing: 各位使用disfactory.tw的朋友們好,我們近期接獲多位使用者反映,在檢舉違章工廠時無法成功上傳圖片。 經確認原因為目前使用的圖片託管平台,自 2025 年 5 月中起限制上傳,導致我們的網站無法順利將民眾上傳的照片轉存,因此現在暫時停止回報的功能。 目前我們正在嘗試修復此問題,並會盡快更新系統,恢復回報功能。 感謝大家的理解與支持!」

2025-07-09

github2 09:37:23

<https://github.com/Disfactory/frontend/pull/191|#191 Add MaintenanceModal and warning alert to ImageUploadForm>

Introduce a MaintenanceModal component to inform users about temporary upload restrictions and integrate it into the App layout. Add a warning alert in the ImageUploadForm to communicate the same upload limitations.

github2 09:37:23

<https://github.com/Disfactory/frontend/pull/191|#191 Add MaintenanceModal and warning alert to ImageUploadForm>

Introduce a MaintenanceModal component to inform users about temporary upload restrictions and integrate it into the App layout. Add a warning alert in the ImageUploadForm to communicate the same upload limitations.

github2 12:49:17

`<https://github.com/Disfactory/frontend/commit/feef608a1013a0efcd0f6ae2992e913a43b65e6f|feef608a>` - feat: add MaintenanceModal component and integrate it into the App layout `<https://github.com/Disfactory/frontend/commit/274d4f0d42ed40cb507f82db550765f35c1d53c5|274d4f0d>` - feat: add warning alert to ImageUploadForm indicating temporary upload restrictions `<https://github.com/Disfactory/frontend/commit/c6a078c4798908b7b650797c21f8d17865041593|c6a078c4>` - fix: improve layout and styling of MaintenanceModal component `<https://github.com/Disfactory/frontend/commit/91e3037bfb70a64975bc0d4800efdfd796be9718|91e3037b>` - Merge pull request #191 from Disfactory/chore/maintainence-model-and-alert

github2 12:49:17

`<https://github.com/Disfactory/frontend/commit/feef608a1013a0efcd0f6ae2992e913a43b65e6f|feef608a>` - feat: add MaintenanceModal component and integrate it into the App layout `<https://github.com/Disfactory/frontend/commit/274d4f0d42ed40cb507f82db550765f35c1d53c5|274d4f0d>` - feat: add warning alert to ImageUploadForm indicating temporary upload restrictions `<https://github.com/Disfactory/frontend/commit/c6a078c4798908b7b650797c21f8d17865041593|c6a078c4>` - fix: improve layout and styling of MaintenanceModal component `<https://github.com/Disfactory/frontend/commit/91e3037bfb70a64975bc0d4800efdfd796be9718|91e3037b>` - Merge pull request #191 from Disfactory/chore/maintainence-model-and-alert

github2 12:54:00

github2 12:54:00

github2 12:54:18

`<https://github.com/Disfactory/disfactory.tw/commit/d4b5bc0d83cbbd3114e0dfb27d0526b40f7f4003|d4b5bc0d>` - Deploy [ci skip]

github2 12:54:18

`<https://github.com/Disfactory/disfactory.tw/commit/d4b5bc0d83cbbd3114e0dfb27d0526b40f7f4003|d4b5bc0d>` - Deploy [ci skip]

github2 12:54:48

github2 12:54:48

github2 13:02:18

<https://github.com/Disfactory/frontend/issues/192|#192 掛「系統維修中」公告>

因為近期imgur的問題仍無法解決,希望可以掛一個系統維修中的公告- 可能公告內文: 「:wrench:【系統維修中!】目前上傳圖片功能受限,暫時停止回報功能,敬請見諒 :man-bowing: 各位使用disfactory.tw的朋友們好,我們近期接獲多位使用者反映,在檢舉違章工廠時無法成功上傳圖片。 經確認原因為目前使用的圖片託管平台,自 2025 年 5 月中起限制上傳,導致我們的網站無法順利將民眾上傳的照片轉存,因此現在暫時停止回報的功能。 目前我們正在嘗試修復此問題,並會盡快更新系統,恢復回報功能。 感謝大家的理解與支持!」

github2 13:02:18

<https://github.com/Disfactory/frontend/issues/192|#192 掛「系統維修中」公告>

因為近期imgur的問題仍無法解決,希望可以掛一個系統維修中的公告- 可能公告內文: 「:wrench:【系統維修中!】目前上傳圖片功能受限,暫時停止回報功能,敬請見諒 :man-bowing: 各位使用disfactory.tw的朋友們好,我們近期接獲多位使用者反映,在檢舉違章工廠時無法成功上傳圖片。 經確認原因為目前使用的圖片託管平台,自 2025 年 5 月中起限制上傳,導致我們的網站無法順利將民眾上傳的照片轉存,因此現在暫時停止回報的功能。 目前我們正在嘗試修復此問題,並會盡快更新系統,恢復回報功能。 感謝大家的理解與支持!」

2025-07-13

github2 23:48:54

<https://github.com/Disfactory/Disfactory/issues/680|#680 Switch package manager to uv from poetry>

## Why? • The `poetry` package manager highly depends on the version of `setuptools`, `requests`, and other stuff, which will restrict both the `poetry` version and some Python packages that are currently being used in this project. And all these lead to a dead end when upgrading packages and refactoring. :open_file_folder: Click to expand/collapse the dependency tree of `poetry==2.1.3` :arrow_down: ``` poetry (2.1.3) ├── build&lt;2.0.0,&gt;=1.2.1 (1.2.2.post1) │ ├── packaging&gt;=19.1 (25.0) │ └── pyproject-hooks (1.2.0) ├── cachecontrol[filecache]&lt;0.15.0,&gt;=0.14.0 (0.14.3) │ ├── filelock&gt;=3.8.0 (3.18.0) │ ├── msgpack&lt;2.0.0,&gt;=0.5.2 (1.1.1) │ └── requests&gt;=2.16.0 (2.32.4) │ ├── certifi&gt;=2017.4.17 (2025.7.9) │ ├── charset-normalizer&lt;4,&gt;=2 (3.4.2) │ ├── idna&lt;4,&gt;=2.5 (3.10) │ └── urllib3&lt;3,&gt;=1.21.1 (2.5.0) ├── cleo&lt;3.0.0,&gt;=2.1.0 (2.1.0) │ ├── crashtest&lt;0.5.0,&gt;=0.4.1 (0.4.1) │ └── rapidfuzz&lt;4.0.0,&gt;=3.0.0 (3.13.0) ├── dulwich&lt;0.23.0,&gt;=0.22.6 (0.22.8) │ └── urllib3&gt;=1.25 (2.5.0) ├── fastjsonschema&lt;3.0.0,&gt;=2.18.0 (2.21.1) ├── findpython&lt;0.7.0,&gt;=0.6.2 (0.6.3) │ └── packaging&gt;=20 (25.0) ├── installer&lt;0.8.0,&gt;=0.7.0 (0.7.0) ├── keyring&lt;26.0.0,&gt;=25.1.0 (25.6.0) │ ├── jaraco-classes (3.4.0) │ │ └── more-itertools (10.7.0) │ ├── jaraco-context (6.0.1) │ └── jaraco-functools (4.2.1) │ └── more-itertools (10.7.0) ├── packaging&gt;=24.0 (25.0) ├── pbs-installer[download,install]&lt;2026.0.0,&gt;=2025.1.6 (2025.7.12) │ ├── httpx&lt;1,&gt;=0.27.0 (0.28.1) │ │ ├── anyio (4.9.0) │ │ │ ├── idna&gt;=2.8 (3.10) │ │ │ └── sniffio&gt;=1.1 (1.3.1) │ │ ├── certifi (2025.7.9) │ │ ├── httpcore==1.* (1.0.9) │ │ │ ├── certifi (2025.7.9) │ │ │ └── h11&gt;=0.16 (0.16.0) │ │ └── idna (3.10) │ └── zstandard&gt;=0.21.0 (0.23.0) ├── pkginfo&lt;2.0,&gt;=1.12 (1.12.1.2) ├── platformdirs&lt;5,&gt;=3.0.0 (4.3.8) ├── poetry-core==2.1.3 (2.1.3) ├── pyproject-hooks&lt;2.0.0,&gt;=1.0.0 (1.2.0) ├── requests-toolbelt&lt;2.0.0,&gt;=1.0.0 (1.0.0) │ └── requests&lt;3.0.0,&gt;=2.0.1 (2.32.4) │ ├── certifi&gt;=2017.4.17 (2025.7.9) │ ├── charset-normalizer&lt;4,&gt;=2 (3.4.2) │ ├── idna&lt;4,&gt;=2.5 (3.10) │ └── urllib3&lt;3,&gt;=1.21.1 (2.5.0) ├── requests&lt;3.0,&gt;=2.26 (2.32.4) │ ├── certifi&gt;=2017.4.17 (2025.7.9) │ ├── charset-normalizer&lt;4,&gt;=2 (3.4.2) │ ├── idna&lt;4,&gt;=2.5 (3.10) │ └── urllib3&lt;3,&gt;=1.21.1 (2.5.0) ├── shellingham&lt;2.0,&gt;=1.5 (1.5.4) ├── tomlkit&lt;1.0.0,&gt;=0.11.4 (0.13.3) ├── trove-classifiers&gt;=2022.5.19 (2025.5.9.12) ├── virtualenv&lt;21.0.0,&gt;=20.26.6 (20.31.2) │ ├── distlib&lt;1,&gt;=0.3.7 (0.3.9) │ ├── filelock&lt;4,&gt;=3.12.2 (3.18.0) │ └── platformdirs&lt;5,&gt;=3.9.1 (4.3.8) └── xattr&lt;2.0.0,&gt;=1.0.0 (1.1.4) └── cffi&gt;=1.16.0 (1.17.1) └── pycparser (2.22) ``` - The `poetry&lt;2.0.0` doesn't support `PEP-621` ## Todo • Switch package manager • Update GitHub actions if needed • Update `Makefile` • Update docs ## References • The `setuptools` issue to `poetry` <https://github.com/python-poetry/poetry/issues/4511|python-poetry/poetry#4511> • Package `migrate-to-uv` <https://pypi.org/project/migrate-to-uv/|https://pypi.org/project/migrate-to-uv/>

github2 23:48:54

<https://github.com/Disfactory/Disfactory/issues/680|#680 Switch package manager to uv from poetry>

## Why? • The `poetry` package manager highly depends on the version of `setuptools`, `requests`, and other stuff, which will restrict both the `poetry` version and some Python packages that are currently being used in this project. And all these lead to a dead end when upgrading packages and refactoring. :open_file_folder: Click to expand/collapse the dependency tree of `poetry==2.1.3` :arrow_down: ``` poetry (2.1.3) ├── build&lt;2.0.0,&gt;=1.2.1 (1.2.2.post1) │ ├── packaging&gt;=19.1 (25.0) │ └── pyproject-hooks (1.2.0) ├── cachecontrol[filecache]&lt;0.15.0,&gt;=0.14.0 (0.14.3) │ ├── filelock&gt;=3.8.0 (3.18.0) │ ├── msgpack&lt;2.0.0,&gt;=0.5.2 (1.1.1) │ └── requests&gt;=2.16.0 (2.32.4) │ ├── certifi&gt;=2017.4.17 (2025.7.9) │ ├── charset-normalizer&lt;4,&gt;=2 (3.4.2) │ ├── idna&lt;4,&gt;=2.5 (3.10) │ └── urllib3&lt;3,&gt;=1.21.1 (2.5.0) ├── cleo&lt;3.0.0,&gt;=2.1.0 (2.1.0) │ ├── crashtest&lt;0.5.0,&gt;=0.4.1 (0.4.1) │ └── rapidfuzz&lt;4.0.0,&gt;=3.0.0 (3.13.0) ├── dulwich&lt;0.23.0,&gt;=0.22.6 (0.22.8) │ └── urllib3&gt;=1.25 (2.5.0) ├── fastjsonschema&lt;3.0.0,&gt;=2.18.0 (2.21.1) ├── findpython&lt;0.7.0,&gt;=0.6.2 (0.6.3) │ └── packaging&gt;=20 (25.0) ├── installer&lt;0.8.0,&gt;=0.7.0 (0.7.0) ├── keyring&lt;26.0.0,&gt;=25.1.0 (25.6.0) │ ├── jaraco-classes (3.4.0) │ │ └── more-itertools (10.7.0) │ ├── jaraco-context (6.0.1) │ └── jaraco-functools (4.2.1) │ └── more-itertools (10.7.0) ├── packaging&gt;=24.0 (25.0) ├── pbs-installer[download,install]&lt;2026.0.0,&gt;=2025.1.6 (2025.7.12) │ ├── httpx&lt;1,&gt;=0.27.0 (0.28.1) │ │ ├── anyio (4.9.0) │ │ │ ├── idna&gt;=2.8 (3.10) │ │ │ └── sniffio&gt;=1.1 (1.3.1) │ │ ├── certifi (2025.7.9) │ │ ├── httpcore==1.* (1.0.9) │ │ │ ├── certifi (2025.7.9) │ │ │ └── h11&gt;=0.16 (0.16.0) │ │ └── idna (3.10) │ └── zstandard&gt;=0.21.0 (0.23.0) ├── pkginfo&lt;2.0,&gt;=1.12 (1.12.1.2) ├── platformdirs&lt;5,&gt;=3.0.0 (4.3.8) ├── poetry-core==2.1.3 (2.1.3) ├── pyproject-hooks&lt;2.0.0,&gt;=1.0.0 (1.2.0) ├── requests-toolbelt&lt;2.0.0,&gt;=1.0.0 (1.0.0) │ └── requests&lt;3.0.0,&gt;=2.0.1 (2.32.4) │ ├── certifi&gt;=2017.4.17 (2025.7.9) │ ├── charset-normalizer&lt;4,&gt;=2 (3.4.2) │ ├── idna&lt;4,&gt;=2.5 (3.10) │ └── urllib3&lt;3,&gt;=1.21.1 (2.5.0) ├── requests&lt;3.0,&gt;=2.26 (2.32.4) │ ├── certifi&gt;=2017.4.17 (2025.7.9) │ ├── charset-normalizer&lt;4,&gt;=2 (3.4.2) │ ├── idna&lt;4,&gt;=2.5 (3.10) │ └── urllib3&lt;3,&gt;=1.21.1 (2.5.0) ├── shellingham&lt;2.0,&gt;=1.5 (1.5.4) ├── tomlkit&lt;1.0.0,&gt;=0.11.4 (0.13.3) ├── trove-classifiers&gt;=2022.5.19 (2025.5.9.12) ├── virtualenv&lt;21.0.0,&gt;=20.26.6 (20.31.2) │ ├── distlib&lt;1,&gt;=0.3.7 (0.3.9) │ ├── filelock&lt;4,&gt;=3.12.2 (3.18.0) │ └── platformdirs&lt;5,&gt;=3.9.1 (4.3.8) └── xattr&lt;2.0.0,&gt;=1.0.0 (1.1.4) └── cffi&gt;=1.16.0 (1.17.1) └── pycparser (2.22) ``` - The `poetry&lt;2.0.0` doesn't support `PEP-621` ## Todo • Switch package manager • Update GitHub actions if needed • Update `Makefile` • Update docs ## References • The `setuptools` issue to `poetry` <https://github.com/python-poetry/poetry/issues/4511|python-poetry/poetry#4511> • Package `migrate-to-uv` <https://pypi.org/project/migrate-to-uv/|https://pypi.org/project/migrate-to-uv/>

2025-07-19

github2 22:57:12

<https://github.com/Disfactory/Disfactory/pull/681|#681 Refactor: Migrate from Poetry to UV>

Transition the project from using Poetry for dependency management to UV. Update scripts and configuration files to reflect this change, ensuring compatibility with the new tool. Adjust documentation to guide users on using UV instead of Poetry.

github2 22:57:12

<https://github.com/Disfactory/Disfactory/pull/681|#681 Refactor: Migrate from Poetry to UV>

Transition the project from using Poetry for dependency management to UV. Update scripts and configuration files to reflect this change, ensuring compatibility with the new tool. Adjust documentation to guide users on using UV instead of Poetry.

2025-07-30

github2 20:47:48

<https://github.com/Disfactory/Disfactory/issues/682|#682 個人資料檔案安全維護計畫制定?>

• 個人資料保護委員會籌備處 法令清單 <https://www.pdpc.gov.tw/CP/130/|https://www.pdpc.gov.tw/CP/130/> • 經濟部商業發展署 個人資料檔案安全維護管理 播放清單 <https://www.youtube.com/playlist?list=PLyGIdzYIYRYgWi3LlNwMpRyoCZsSIF5z1|https://www.youtube.com/playlist?list=PLyGIdzYIYRYgWi3LlNwMpRyoCZsSIF5z1>

github2 20:47:48

<https://github.com/Disfactory/Disfactory/issues/682|#682 個人資料檔案安全維護計畫制定?>

• 個人資料保護委員會籌備處 法令清單 <https://www.pdpc.gov.tw/CP/130/|https://www.pdpc.gov.tw/CP/130/> • 經濟部商業發展署 個人資料檔案安全維護管理 播放清單 <https://www.youtube.com/playlist?list=PLyGIdzYIYRYgWi3LlNwMpRyoCZsSIF5z1|https://www.youtube.com/playlist?list=PLyGIdzYIYRYgWi3LlNwMpRyoCZsSIF5z1>