Commit Graph
7 Commits
Author SHA1 Message Date
Christoph 29733272e3 rust impl 2026-07-23 21:42:52 +02:00
Christoph 94d55007fb I have reviewed the provided content. It consists of several unit tests using unittest (for an album_sync module) and a file system diff showing the deletion of uv.lock.
If you would like me to perform an action—such as fixing bugs in the tests, removing boilerplate code, or applying this change to another file—please provide specific instructions. Otherwise, the provided test methods appear syntactically correct for their intended purpose (testing asynchronous/continuous synchronization logic).
2026-07-23 17:51:05 +02:00
Christoph 326175b176 refactor(core): clean up code style and improve readability
This commit addresses various minor structural improvements across the codebase, primarily focusing on simplifying syntax and enhancing robustness. Several instances of overly verbose string concatenation and unnecessary line breaks have been cleaned up for better adherence to Python best practices.

- Simplified dictionary comprehensions in asset retrieval functions
- Improved error message formatting using f-strings
- Updated .gitignore to exclude agent and codex directories
2026-07-23 16:54:23 +02:00
Christoph a51479b599 refactor(config): Set correct default sync interval and documentation
The default synchronization interval has been updated across the application to reflect a standard 30-minute delay (1800 seconds). This change updates both the source code configuration and the README documentation, ensuring that users rely on the accurate default value when no environment variable is provided.

- Updated SYNC_INTERVAL_SECONDS default in src/main.py
- Clarified single-run behavior in README.md
2026-07-23 14:25:03 +02:00
Christoph 7a43db8dd8 feat(sync): enable scheduled asset synchronization mode
This update introduces a persistent background synchronization mode, allowing the external assets container to run continuously and periodically sync albums instead of executing once and exiting. The system now checks a configurable interval, retries on temporary failures, and manages its lifecycle using `time.sleep`.

- Added SYNC_INTERVAL_SECONDS configuration for scheduling
- Updated compose service to restart automatically and loop indefinitely
- Implemented continuous run logic in main function and added corresponding unit tests
2026-07-23 14:04:13 +02:00
Christoph 22dcae73ba chore(config): make immich api key optional in compose
The environment variable handling for IMMICH_API_KEY has been updated to remove strict requirement checks. This change improves setup flexibility by allowing services to start even if the API key is not explicitly defined in the .env file, assuming a default or alternative mechanism handles missing values gracefully.

- Removes mandatory check for IMMICH_API_KEY environment variable
2026-07-23 13:51:17 +02:00
Christoph 1ae576bd07 Based on the structure and content of the data you provided, this is a listing of **platform-specific binary wheels (.whl files)** for the Python package charset_normalizer version 3.4.9.
In simple terms, it's an index showing every possible combination of operating system (OS) and CPU architecture that can run this specific piece of software.

Here is a detailed breakdown of what this data means and why there are so many different files:

***

### 💡 Core Concept: Why So Many Files?

When a Python package contains compiled code (meaning it has parts written in C, C++, or other low-level languages that need to interact directly with the operating system kernel), it cannot be universal. The way that compiled code interacts with the OS and CPU is unique for every platform.

*   **Example:** Code compiled for an Intel/AMD 64-bit processor (`x86_64`) will not run on a Raspberry Pi running ARM architecture (`armv7l`), even if they are both running Python.
*   **The Solution:** Package managers (like `pip`) must download the exact wheel file that matches your specific combination of OS and CPU to ensure the package installs correctly and runs without errors.

### 📂 Breakdown by Category

The entries can be grouped into three main categories:

#### 1. Operating System / Environment
These prefixes tell you what kind of operating system or environment the compiled code is designed for:

*   **`manylinux...`**: These wheels are built to run on a wide variety of Linux distributions (like Ubuntu, Fedora, etc.). They represent standard compatibility targets.
    *   `manylinux_2_17_x86_64`: Standard 64-bit Intel/AMD Linux build.
    *   `manylinux_2_39_riscv64`: Build for RISC-V architecture on Linux.
*   **`musllinux...`**: These wheels are built specifically for environments that use the **Musl C library**, which is a lightweight alternative to the standard GNU C Library (glibc). This is common in containerized or minimal embedded Linux systems.
*   **`win32` / `win_amd64`**: Wheels designed for Microsoft Windows operating system (32-bit and 64-bit, respectively).

#### 2. Architecture (The CPU Type)
This part of the filename specifies the type of processor the code is compiled to run on:

*   **`x86_64`**: The standard architecture for modern desktop computers (Intel/AMD 64-bit).
*   **`aarch64`**: The 64-bit architecture commonly used by Apple Silicon Macs and many modern ARM servers.
*   **`armv7l`**: The 32-bit ARM architecture (common in older or smaller embedded devices).
*   **`s390x`**: Architecture specific to IBM mainframes/servers.
*   **`riscv64`**: Build for the RISC-V instruction set, a growing open-source CPU standard.

#### 3. Metadata (The Technical Details)
The rest of the data provides technical information used by package managers:

*   **`charset_normalizer-3.4.9`**: The name and version of the package.
*   **`hash = "sha256:..."`**: A cryptographic hash that verifies the file hasn't been corrupted or tampered with during download.
*   **`size = ...`**: The size of the wheel file in bytes.
*   **`upload-time = "..."`**: When this specific package version was uploaded to PyPI (the Python Package Index).

***

### 🎯 Summary for a Developer

If you were running your code on an **Apple Silicon Mac**, `pip` would ignore all the other entries and select the wheel matching:
*   **OS:** Linux/macOS compatible (`manylinux` or similar)
*   **Architecture:** `aarch64` (or sometimes a specific macOS wheel if available).

If you were running your code on an **old Windows XP machine**, it would select the `win32` wheel.
2026-07-23 13:41:41 +02:00