89 lines
2.8 KiB
Python
89 lines
2.8 KiB
Python
import json
|
|
import os
|
|
from datetime import datetime, timezone
|
|
|
|
def generate_vocabulary_import(
|
|
category_name: str,
|
|
lang_first_id: int,
|
|
lang_second_id: int,
|
|
word_pairs: list,
|
|
output_filename: str = "import_ready_vocab.json"
|
|
):
|
|
"""
|
|
Generates a Polly-compatible JSON import file for a new vocabulary category,
|
|
saving it in the same directory as this script.
|
|
"""
|
|
|
|
# Generate a current timestamp in the exact ISO format Kotlin's Instant expects
|
|
now_iso = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
|
|
|
|
# Base structure for a CategoryExport
|
|
export_data = {
|
|
"type": "Category",
|
|
"exportDate": now_iso,
|
|
"metadata": {
|
|
"itemCount": len(word_pairs),
|
|
"categoryCount": 1,
|
|
"exportScope": f"Category: {category_name}"
|
|
},
|
|
"category": {
|
|
"type": "TagCategory",
|
|
"id": 99999, # Dummy ID; your app's ID remapping will fix this on import
|
|
"name": category_name
|
|
},
|
|
"items": [],
|
|
"states": [], # Left empty because these are brand new words
|
|
"stageMappings": []
|
|
}
|
|
|
|
# Populate items and stage mappings
|
|
start_id = 100000
|
|
|
|
for idx, (word_first, word_second) in enumerate(word_pairs, start=start_id):
|
|
|
|
export_data["items"].append({
|
|
"id": idx,
|
|
"languageFirstId": lang_first_id,
|
|
"languageSecondId": lang_second_id,
|
|
"wordFirst": word_first,
|
|
"wordSecond": word_second,
|
|
"createdAt": now_iso,
|
|
"features": "{}" # Empty features block
|
|
})
|
|
|
|
export_data["stageMappings"].append({
|
|
"vocabularyItemId": idx,
|
|
"stage": "NEW"
|
|
})
|
|
|
|
# --- NEW: Get the directory of the current script and build the full path ---
|
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
full_output_path = os.path.join(script_dir, output_filename)
|
|
|
|
# Save to file using the absolute path
|
|
with open(full_output_path, 'w', encoding='utf-8') as f:
|
|
json.dump(export_data, f, indent=2, ensure_ascii=False)
|
|
|
|
print(f"Successfully generated {len(word_pairs)} items!")
|
|
print(f"Saved to: {full_output_path}")
|
|
|
|
|
|
# --- Example Usage ---
|
|
if __name__ == "__main__":
|
|
GERMAN_ID = 15
|
|
PORTUGUESE_ID = 7
|
|
|
|
new_words = [
|
|
("Krankenwagen", "ambulância"),
|
|
("Blutdruck", "pressão arterial"),
|
|
("Rollstuhl", "cadeira de rodas"),
|
|
("Fieberthermometer", "termômetro")
|
|
]
|
|
|
|
generate_vocabulary_import(
|
|
category_name="termos médicos - extra",
|
|
lang_first_id=GERMAN_ID,
|
|
lang_second_id=PORTUGUESE_ID,
|
|
word_pairs=new_words,
|
|
output_filename="polly_import_med_extra.json"
|
|
) |