Organize project: Move old code and documentation to oldcode folder, add comprehensive README
This commit is contained in:
186
oldcode/README_DEPENDENCIES.md
Normal file
186
oldcode/README_DEPENDENCIES.md
Normal file
@@ -0,0 +1,186 @@
|
||||
# Prezenta App - Robust Dependency Management System
|
||||
|
||||
## Overview
|
||||
The app.py has been updated to include a comprehensive, self-contained dependency management system that automatically checks and installs required packages from a local repository. This makes the system completely offline-capable and resilient to network issues.
|
||||
|
||||
## Key Features
|
||||
|
||||
### 🔧 **Automatic Dependency Installation**
|
||||
- **Self-contained**: No need for separate launcher scripts or shell scripts
|
||||
- **Offline capability**: Installs packages from local `./Files/reposytory` directory
|
||||
- **Smart detection**: Checks if packages are already installed before attempting installation
|
||||
- **Fallback mechanisms**: Multiple installation methods (pip, apt, local wheels)
|
||||
|
||||
### 🛡️ **Robust Error Handling**
|
||||
- **Network resilience**: Handles socket errors gracefully with file-based fallbacks
|
||||
- **Import safety**: Safe import functions that don't crash the app
|
||||
- **Graceful degradation**: App continues to work even if some optional features fail
|
||||
- **Comprehensive logging**: All operations are logged for debugging
|
||||
|
||||
### 📦 **Supported Packages**
|
||||
The system automatically manages these packages:
|
||||
- `rdm6300` - RFID reader library (critical)
|
||||
- `requests` - HTTP library (critical)
|
||||
- `aiohttp` - Async HTTP library (optional)
|
||||
- `flask` - Web server for command interface (optional)
|
||||
- `gpiozero` - GPIO control (falls back to dummy if not available)
|
||||
- All required dependencies (urllib3, certifi, charset_normalizer, etc.)
|
||||
|
||||
## How It Works
|
||||
|
||||
### 1. **Startup Dependency Check**
|
||||
When the app starts, it:
|
||||
1. Checks each required package using `importlib.util.find_spec()`
|
||||
2. Identifies missing packages
|
||||
3. Attempts installation from local wheel files in `./Files/reposytory`
|
||||
4. Falls back to pip/apt if needed
|
||||
5. Continues execution even if some packages fail to install
|
||||
|
||||
### 2. **Safe Import System**
|
||||
```python
|
||||
def safe_import(module_name, package_name=None):
|
||||
"""Safely import a module with error handling"""
|
||||
```
|
||||
- Imports modules without crashing the app
|
||||
- Returns None for missing modules
|
||||
- Allows the app to adapt to available packages
|
||||
|
||||
### 3. **Network Error Resilience**
|
||||
- Device hostname/IP saved to `./data/device_info.txt`
|
||||
- Automatically loads from file when socket errors occur
|
||||
- Never crashes due to network resolution issues
|
||||
|
||||
### 4. **Graceful Feature Degradation**
|
||||
- **No Flask**: Command server is disabled with warning
|
||||
- **No gpiozero**: LED functions become print statements
|
||||
- **No aiohttp**: Falls back to synchronous requests
|
||||
- **No network**: Uses cached device information
|
||||
|
||||
## Repository Structure
|
||||
|
||||
### Required Files in `./Files/reposytory/`:
|
||||
```
|
||||
├── rdm6300-0.1.1-py3-none-any.whl
|
||||
├── requests-2.32.3-py3-none-any.whl
|
||||
├── aiohttp-3.11.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
|
||||
├── flask-*.whl (optional)
|
||||
├── urllib3-2.3.0-py3-none-any.whl
|
||||
├── certifi-2025.1.31-py3-none-any.whl
|
||||
├── charset_normalizer-3.4.1-py3-none-any.whl
|
||||
├── idna-3.10-py3-none-any.whl
|
||||
├── multidict-6.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
|
||||
├── aiosignal-1.3.2-py2.py3-none-any.whl
|
||||
├── frozenlist-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
|
||||
├── attrs-25.3.0-py3-none-any.whl
|
||||
├── yarl-1.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
|
||||
├── aiohappyeyeballs-2.6.1-py3-none-any.whl
|
||||
└── propcache-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
|
||||
```
|
||||
|
||||
## Installation Process
|
||||
|
||||
### Automatic (Recommended)
|
||||
Simply run the app - dependencies will be installed automatically:
|
||||
```bash
|
||||
cd /home/pi/Desktop/prezenta
|
||||
python3 app.py
|
||||
```
|
||||
|
||||
### Manual Testing
|
||||
Test the dependency system:
|
||||
```bash
|
||||
cd /home/pi/Desktop/prezenta
|
||||
python3 test_dependencies.py
|
||||
```
|
||||
|
||||
## Folder Structure
|
||||
|
||||
The prezenta folder has been streamlined for maximum simplicity:
|
||||
|
||||
```
|
||||
prezenta/
|
||||
├── app.py # Main application (self-contained)
|
||||
├── config.py # Configuration module
|
||||
├── test_dependencies.py # Testing and validation script
|
||||
├── README_DEPENDENCIES.md # This documentation
|
||||
├── data/ # Application data
|
||||
│ ├── device_info.txt # Network configuration cache (auto-created)
|
||||
│ ├── idmasa.txt # Device identifier
|
||||
│ └── tag.txt # Backup data
|
||||
└── Files/ # Local package repository
|
||||
└── reposytory/ # Wheel files for offline installation
|
||||
├── rdm6300-*.whl
|
||||
├── requests-*.whl
|
||||
├── aiohttp-*.whl
|
||||
└── ... (all dependencies)
|
||||
```
|
||||
|
||||
### Removed Files (No Longer Needed)
|
||||
- ~~`launcher.py`~~ - App is now self-launching
|
||||
- ~~`libraries.sh`~~ - Dependency installation integrated into app.py
|
||||
- ~~`check_dependencies.py`~~ - Functionality moved to app.py
|
||||
|
||||
## Features Added
|
||||
|
||||
### 1. **Self-Installing Dependencies**
|
||||
- Checks all required packages on startup
|
||||
- Installs missing packages from local repository
|
||||
- No external network dependencies for package installation
|
||||
|
||||
### 2. **Network Error Recovery**
|
||||
- Handles `socket.gaierror` gracefully
|
||||
- Saves working network configuration to file
|
||||
- Loads from file when network issues occur
|
||||
|
||||
### 3. **Modular Feature Set**
|
||||
- Core RFID functionality always works
|
||||
- Optional features (web interface, LEDs) degrade gracefully
|
||||
- Clear status messages for all operations
|
||||
|
||||
### 4. **Enhanced Logging**
|
||||
- Dependency check results logged
|
||||
- Installation attempts logged
|
||||
- Network fallback operations logged
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
1. **"Repository not found"**
|
||||
- Ensure `./Files/reposytory` directory exists
|
||||
- Check that wheel files are present
|
||||
|
||||
2. **"Permission denied during installation"**
|
||||
- Script uses `--break-system-packages` flag
|
||||
- May need to run with appropriate permissions
|
||||
|
||||
3. **"rdm6300 is required"**
|
||||
- This is critical - app will exit if rdm6300 can't be installed
|
||||
- Check that `rdm6300-0.1.1-py3-none-any.whl` exists in repository
|
||||
|
||||
4. **"Flask not available - Command server disabled"**
|
||||
- Non-critical - RFID functionality continues to work
|
||||
- Install Flask manually if remote command capability is needed
|
||||
|
||||
### Recovery Steps
|
||||
|
||||
1. **Check repository**: Ensure all wheel files are present
|
||||
2. **Test installation**: Run `python3 test_dependencies.py`
|
||||
3. **Manual install**: Install missing packages manually with pip
|
||||
4. **Check logs**: Review console output for specific error messages
|
||||
|
||||
## Benefits
|
||||
|
||||
1. **Zero-configuration deployment**: Just copy files and run
|
||||
2. **Offline operation**: No internet required after initial setup
|
||||
3. **Fault tolerance**: Continues working even with partial failures
|
||||
4. **Easy maintenance**: All dependencies managed automatically
|
||||
5. **Clear diagnostics**: Detailed status reporting for troubleshooting
|
||||
|
||||
## Version History
|
||||
|
||||
- **v2.4**: Added robust dependency management and network error handling
|
||||
- **v2.3**: Added remote command execution capabilities
|
||||
- **v2.2**: Basic RFID and logging functionality
|
||||
|
||||
The system is now production-ready for deployment in environments with limited or no internet connectivity, providing maximum reliability and ease of deployment.
|
||||
Reference in New Issue
Block a user