Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
import yaml import re from pathlib import Path CONFIG_FILE = "config.yaml" def load_yaml(file_path): with open(file_path, "r", encoding="utf-8") as f: return yaml.safe_load(f) def get_nested_value(data, path, default="-"): """Достаёт значение по пути вида 'some.properties.fieldA' или 'owners.0.name'.""" keys = path.split(".") current = data try: for key in keys: if isinstance(current, list) and key.isdigit(): current = current[int(key)] elif isinstance(current, dict): current = current.get(key, default) else: return default if isinstance(current, list): return ", ".join(map(str, current)) return str(current) except Exception: return default def build_table(contracts, tags, columns): filtered = [] for contract_id, contract in contracts.get("paths", {}).items(): if any(tag in contract.get("tags", []) for tag in tags): contract["id"] = contract_id filtered.append(contract) if not filtered: return f"*Нет контрактов с тегами {', '.join(tags)}*" headers = [col["header"] for col in columns] table_lines = ["| " + " | ".join(headers) + " |"] table_lines.append("|" + "|".join(["------"] * len(columns)) + "|") for c in filtered: row = [] for col in columns: value = get_nested_value(c, col["field"]) row.append(value) table_lines.append("| " + " | ".join(row) + " |") return "\n".join(table_lines) def insert_table(md_content, table, section): pattern = rf"({re.escape(section)}\s*\n)" return re.sub(pattern, r"\1" + table + "\n\n", md_content, count=1) def main(): config = load_yaml(CONFIG_FILE) for mapping in config.get("mappings", []): tags = mapping.get("tags") or [mapping["tag"]] columns = mapping.get("columns", []) section = mapping.get("section", "### Title") input_md = Path(mapping["input_md"]) output_md = Path(mapping["output_md"]) yaml_file = Path(mapping["yaml_file"]) contracts = load_yaml(yaml_file) table = build_table(contracts, tags, columns) md_content = input_md.read_text(encoding="utf-8") updated_md = insert_table(md_content, table, section) output_md.write_text(updated_md, encoding="utf-8") print(f"[+] Сгенерирован файл: {output_md} (tags={tags}, section={section})") if __name__ == "__main__": main()
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)