Compare commits
3 Commits
b48cade0df
...
b58653f3f7
| Author | SHA1 | Date | |
|---|---|---|---|
| b58653f3f7 | |||
|
|
3afe292b23 | ||
|
|
cad8d64c23 |
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
## 🚀 Overview
|
## 🚀 Overview
|
||||||
|
|
||||||
This script fetches enforcement data from an external API, truncates a specified feature layer in ArcGIS, and adds the fetched data as features to the layer. It also logs the operation, saves data to JSON files, and optionally purges old files.
|
This script fetches enforcement data from an external API, truncates a specified feature layer in ArcGIS, and adds the fetched data as features to the layer. It also logs the operation, saves data to JSON files, and optionally purges old files. Additionally, it supports reloading data from a JSON file without making API calls.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -88,6 +88,7 @@ python 753DataSync.py --results_per_page 100
|
|||||||
|----------------------|---------------------------------------------|
|
|----------------------|---------------------------------------------|
|
||||||
| `--results_per_page` | Optional. Number of results per API call (default: `100`) |
|
| `--results_per_page` | Optional. Number of results per API call (default: `100`) |
|
||||||
| `--test` | Optional. If set, only fetch the first page of results. |
|
| `--test` | Optional. If set, only fetch the first page of results. |
|
||||||
|
| `--reload` | Optional. Load data from a specified JSON file instead of fetching from the API. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -101,6 +102,7 @@ python 753DataSync.py --results_per_page 100
|
|||||||
6. **🧹 File Cleanup** — Deletes `.json`/`.log` files older than `PURGE_DAYS`.
|
6. **🧹 File Cleanup** — Deletes `.json`/`.log` files older than `PURGE_DAYS`.
|
||||||
7. **📑 Dynamic Logs** — Logs saved to `753DataSync_YYYY-MM-DD.log`.
|
7. **📑 Dynamic Logs** — Logs saved to `753DataSync_YYYY-MM-DD.log`.
|
||||||
8. **🧪 Test Mode** — Use the `--test` flag to fetch only the first page of results for testing purposes.
|
8. **🧪 Test Mode** — Use the `--test` flag to fetch only the first page of results for testing purposes.
|
||||||
|
9. **🔄 Reload Data** — Use the `--reload` flag to truncate the feature layer and load data from a specified JSON file.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -114,7 +116,6 @@ python 753DataSync.py --results_per_page 100
|
|||||||
|
|
||||||
📄 753DataSync_2025-03-26.log
|
📄 753DataSync_2025-03-26.log
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📝 Example Log
|
## 📝 Example Log
|
||||||
|
|||||||
24
app.py
24
app.py
@ -149,10 +149,13 @@ def parse_arguments():
|
|||||||
# Add a test flag
|
# Add a test flag
|
||||||
parser.add_argument('--test', action='store_true', help="If set, only fetch the first page of results.")
|
parser.add_argument('--test', action='store_true', help="If set, only fetch the first page of results.")
|
||||||
|
|
||||||
|
# Add a reload flag
|
||||||
|
parser.add_argument('--reload', type=str, help="If set, load data from the specified file instead of fetching from the API.")
|
||||||
|
|
||||||
# Parse the arguments
|
# Parse the arguments
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
return args.results_per_page, args.test
|
return args.results_per_page, args.test, args.reload
|
||||||
|
|
||||||
def generate_token(username, password, url="https://www.arcgis.com/sharing/rest/generateToken"):
|
def generate_token(username, password, url="https://www.arcgis.com/sharing/rest/generateToken"):
|
||||||
"""Generates an authentication token."""
|
"""Generates an authentication token."""
|
||||||
@ -308,8 +311,8 @@ def main():
|
|||||||
purge_old_files(purge_days)
|
purge_old_files(purge_days)
|
||||||
|
|
||||||
# Parse command-line arguments
|
# Parse command-line arguments
|
||||||
results_per_page, test_mode = parse_arguments()
|
results_per_page, test_mode, reload_file = parse_arguments()
|
||||||
logger.info(f"Parsed arguments: results_per_page={results_per_page}, test_mode={test_mode}")
|
logger.info(f"Parsed arguments: results_per_page={results_per_page}, test_mode={test_mode}, reload_file={reload_file}")
|
||||||
|
|
||||||
# Load environment variables
|
# Load environment variables
|
||||||
logger.info("Loading environment variables.")
|
logger.info("Loading environment variables.")
|
||||||
@ -333,9 +336,22 @@ def main():
|
|||||||
fs = os.getenv('FS')
|
fs = os.getenv('FS')
|
||||||
layer = os.getenv('LAYER')
|
layer = os.getenv('LAYER')
|
||||||
|
|
||||||
# Truncate the layer before adding new features
|
logger.info("Truncating the feature layer.")
|
||||||
truncate(token, hostname, instance, fs, layer)
|
truncate(token, hostname, instance, fs, layer)
|
||||||
|
|
||||||
|
# If --reload flag is set, load data from the specified file
|
||||||
|
if reload_file:
|
||||||
|
logger.info(f"Reloading data from file: {reload_file}")
|
||||||
|
|
||||||
|
# Load data from the specified file
|
||||||
|
with open(reload_file, 'r', encoding='utf-8') as f:
|
||||||
|
aggregated_data = json.load(f)
|
||||||
|
|
||||||
|
# Add the features to the feature layer
|
||||||
|
response = add_features(token, hostname, instance, fs, layer, aggregated_data)
|
||||||
|
logger.info("Data reloaded successfully from the specified file.")
|
||||||
|
return
|
||||||
|
|
||||||
all_data = []
|
all_data = []
|
||||||
page_number = 1
|
page_number = 1
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user