mirror of
https://github.com/whyour/qinglong.git
synced 2025-11-10 00:26:09 +08:00
353 lines
7.7 KiB
Markdown
353 lines
7.7 KiB
Markdown
# Qinglong Python API (QLAPI) Documentation
|
|
|
|
## Overview
|
|
|
|
The Qinglong Python API provides a convenient way to interact with the Qinglong system from Python scripts. The `QLAPI` object is automatically available in your Python scripts when they run within the Qinglong environment.
|
|
|
|
## Availability
|
|
|
|
The Python QLAPI is available starting from **version 2.8.0+**. If you're using an older version (e.g., v2.7.11), please upgrade to access these features.
|
|
|
|
## Prerequisites
|
|
|
|
- Qinglong version 2.8.0 or higher
|
|
- Python 3.6 or higher
|
|
- Running within Qinglong environment (scripts executed through Qinglong task system)
|
|
|
|
## Usage
|
|
|
|
The `QLAPI` object is automatically injected into your Python script's global namespace. You don't need to import anything - just use it directly:
|
|
|
|
```python
|
|
# QLAPI is automatically available
|
|
result = QLAPI.getEnvs({"searchValue": "USER"})
|
|
print(result)
|
|
```
|
|
|
|
## Available Methods
|
|
|
|
### Environment Variables Management
|
|
|
|
#### getEnvs
|
|
Get environment variables with optional search filter.
|
|
|
|
```python
|
|
# Get all environment variables
|
|
envs = QLAPI.getEnvs()
|
|
|
|
# Search for specific environment variables
|
|
envs = QLAPI.getEnvs({"searchValue": "USER"})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `searchValue` (optional): String to search for in environment variable names or values
|
|
|
|
**Returns:** `EnvsResponse` with list of environment variables
|
|
|
|
#### createEnv
|
|
Create new environment variables.
|
|
|
|
```python
|
|
result = QLAPI.createEnv({
|
|
"envs": [
|
|
{
|
|
"name": "MY_VAR",
|
|
"value": "my_value",
|
|
"remarks": "My custom variable"
|
|
}
|
|
]
|
|
})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `envs`: List of environment variable objects to create
|
|
|
|
**Returns:** `EnvsResponse`
|
|
|
|
#### updateEnv
|
|
Update an existing environment variable.
|
|
|
|
```python
|
|
result = QLAPI.updateEnv({
|
|
"env": {
|
|
"id": 123,
|
|
"name": "MY_VAR",
|
|
"value": "new_value",
|
|
"remarks": "Updated variable"
|
|
}
|
|
})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `env`: Environment variable object with id and updated fields
|
|
|
|
**Returns:** `EnvResponse`
|
|
|
|
#### deleteEnvs
|
|
Delete environment variables by IDs.
|
|
|
|
```python
|
|
result = QLAPI.deleteEnvs({"ids": [123, 456]})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `ids`: List of environment variable IDs to delete
|
|
|
|
**Returns:** `Response`
|
|
|
|
#### enableEnvs
|
|
Enable environment variables.
|
|
|
|
```python
|
|
result = QLAPI.enableEnvs({"ids": [123, 456]})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `ids`: List of environment variable IDs to enable
|
|
|
|
**Returns:** `Response`
|
|
|
|
#### disableEnvs
|
|
Disable environment variables.
|
|
|
|
```python
|
|
result = QLAPI.disableEnvs({"ids": [123, 456]})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `ids`: List of environment variable IDs to disable
|
|
|
|
**Returns:** `Response`
|
|
|
|
#### updateEnvNames
|
|
Update names of multiple environment variables.
|
|
|
|
```python
|
|
result = QLAPI.updateEnvNames({
|
|
"ids": [123, 456],
|
|
"name": "NEW_NAME"
|
|
})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `ids`: List of environment variable IDs
|
|
- `name`: New name to set
|
|
|
|
**Returns:** `Response`
|
|
|
|
#### getEnvById
|
|
Get a specific environment variable by ID.
|
|
|
|
```python
|
|
env = QLAPI.getEnvById({"id": 123})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `id`: Environment variable ID
|
|
|
|
**Returns:** `EnvResponse`
|
|
|
|
#### moveEnv
|
|
Change the position/order of an environment variable.
|
|
|
|
```python
|
|
result = QLAPI.moveEnv({
|
|
"id": 123,
|
|
"fromIndex": 0,
|
|
"toIndex": 5
|
|
})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `id`: Environment variable ID
|
|
- `fromIndex`: Current position index
|
|
- `toIndex`: Target position index
|
|
|
|
**Returns:** `EnvResponse`
|
|
|
|
### Scheduled Tasks (Cron) Management
|
|
|
|
#### getCronDetail
|
|
Get details of a scheduled task.
|
|
|
|
```python
|
|
cron = QLAPI.getCronDetail({"log_path": "/path/to/log"})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `log_path`: Path to the task log file
|
|
|
|
**Returns:** `CronResponse`
|
|
|
|
#### createCron
|
|
Create a new scheduled task.
|
|
|
|
```python
|
|
result = QLAPI.createCron({
|
|
"command": "node script.js",
|
|
"schedule": "0 0 * * *",
|
|
"name": "Daily Task",
|
|
"labels": ["tag1", "tag2"],
|
|
"sub_id": None,
|
|
"extra_schedules": [],
|
|
"task_before": "",
|
|
"task_after": ""
|
|
})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `command`: Command to execute
|
|
- `schedule`: Cron expression
|
|
- `name`: Task name (optional)
|
|
- `labels`: List of labels (optional)
|
|
- Other optional fields
|
|
|
|
**Returns:** `CronResponse`
|
|
|
|
#### updateCron
|
|
Update an existing scheduled task.
|
|
|
|
```python
|
|
result = QLAPI.updateCron({
|
|
"id": 123,
|
|
"command": "node updated_script.js",
|
|
"schedule": "0 0 * * *",
|
|
"name": "Updated Task",
|
|
"labels": [],
|
|
"sub_id": None,
|
|
"extra_schedules": [],
|
|
"task_before": "",
|
|
"task_after": ""
|
|
})
|
|
```
|
|
|
|
**Returns:** `CronResponse`
|
|
|
|
#### deleteCrons
|
|
Delete scheduled tasks by IDs.
|
|
|
|
```python
|
|
result = QLAPI.deleteCrons({"ids": [123, 456]})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `ids`: List of task IDs to delete
|
|
|
|
**Returns:** `Response`
|
|
|
|
### Notifications
|
|
|
|
#### notify
|
|
Send a notification using configured notification channels.
|
|
|
|
```python
|
|
result = QLAPI.notify("Notification Title", "Notification Content")
|
|
```
|
|
|
|
**Parameters:**
|
|
- First argument: Notification title
|
|
- Second argument: Notification content
|
|
|
|
**Returns:** Notification result
|
|
|
|
#### systemNotify
|
|
Send a system notification with custom parameters.
|
|
|
|
```python
|
|
result = QLAPI.systemNotify({
|
|
"title": "System Alert",
|
|
"content": "This is a system notification"
|
|
})
|
|
```
|
|
|
|
**Parameters:**
|
|
- `title`: Notification title
|
|
- `content`: Notification content
|
|
|
|
**Returns:** `Response`
|
|
|
|
## Complete Example
|
|
|
|
```python
|
|
"""
|
|
Example Qinglong Python script demonstrating QLAPI usage
|
|
"""
|
|
|
|
# Get environment variables
|
|
print("Fetching environment variables...")
|
|
envs = QLAPI.getEnvs({"searchValue": "TOKEN"})
|
|
print(f"Found {len(envs.get('data', []))} environment variables")
|
|
|
|
# Create a new environment variable
|
|
print("Creating new environment variable...")
|
|
result = QLAPI.createEnv({
|
|
"envs": [
|
|
{
|
|
"name": "MY_TEST_VAR",
|
|
"value": "test_value_123",
|
|
"remarks": "Created by script"
|
|
}
|
|
]
|
|
})
|
|
print(f"Create result: {result}")
|
|
|
|
# Send notification
|
|
print("Sending notification...")
|
|
QLAPI.notify("Script Completed", "The script has finished executing successfully")
|
|
|
|
# Send system notification
|
|
QLAPI.systemNotify({
|
|
"title": "Task Report",
|
|
"content": f"Processed {len(envs.get('data', []))} environment variables"
|
|
})
|
|
|
|
print("Done!")
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
All QLAPI methods may raise exceptions if there are errors communicating with the backend. It's recommended to use try-except blocks:
|
|
|
|
```python
|
|
try:
|
|
envs = QLAPI.getEnvs({"searchValue": "USER"})
|
|
print(f"Success: {envs}")
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
QLAPI.notify("Script Error", str(e))
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### AttributeError: 'BaseApi' object has no attribute 'getEnvs'
|
|
|
|
This error occurs when using an older version of Qinglong (before v2.8.0). Solutions:
|
|
|
|
1. **Upgrade Qinglong**: Update to version 2.8.0 or higher
|
|
2. **Check Installation**: Ensure `shell/preload/client.py` exists
|
|
3. **Verify Environment**: Make sure scripts are running within Qinglong environment
|
|
|
|
### Module Import Errors
|
|
|
|
The QLAPI is only available when scripts run within the Qinglong environment. If you're testing locally, you won't have access to QLAPI.
|
|
|
|
## Technical Details
|
|
|
|
The Python QLAPI is a wrapper around the Node.js gRPC API client. When you call a method like `QLAPI.getEnvs()`:
|
|
|
|
1. Python Client creates a temporary Node.js script
|
|
2. Executes the corresponding Node.js API method
|
|
3. Returns the JSON result back to Python
|
|
|
|
This architecture ensures consistency between JavaScript and Python APIs.
|
|
|
|
## See Also
|
|
|
|
For more information and examples:
|
|
|
|
- [JavaScript API Client Source](./client.js) - The underlying Node.js gRPC client
|
|
- [Python Sample Script](../../sample/ql_sample.py) - Example Python script using QLAPI
|
|
- [JavaScript Sample Script](../../sample/ql_sample.js) - Example JavaScript script for comparison
|
|
|
|
These files are located in the Qinglong repository under `shell/preload/` and `sample/` directories.
|