2017-02-25 51 views
7

Mam kilka plików YAML w folderze config i pęczku szablonów w folderze szablonu. Czy istnieje prosty liniowej lub funkcji, które można używać do rozwiązywania pliki YAML i substytut w plikach szablonów do generowania skryptów wykonywalnychRozdzielanie plików YAML i zastępowanie szablonów

wejść:
folderu config: config/yaml1, config/yaml2, config/yaml3..
szablon: template/template1, template/template2, template3.

wyjściowy
scripts/script1, script2, script3

liczba skryptów = liczba wzorców

Istnieją 2 typy wzorów

Jednym z nich jest proste podstawienie Przykład

YAML1: 
    Titles:4 
    SubTitles:10 
Template1: 
Number of Titles {Titles} where as Number of Subtitles is {SubTitles} 

Inny szablon jest zagnieżdżony. Zasadniczo szablon musi być zapętlony na podstawie YAML Przykład:

YAML2: 
    Book: "The Choice of using Choice" 
     Author: "Unknown1" 
    Book: "Chasing Choices" 
     Author:"Known2" 
Template2 
Here are all the Books with Author Info 
The author of the {Book} is {Author} 

Odpowiedz

1

YAML nie wiem nic na temat szablonów, a nie precyzują, jakie szablony wymagają aktualizacji. Ale jeśli używasz języka szablonowego, który przyjmuje, że jego wartości do podstawienia pochodzą z par klucz-wartość w dykcie Pythona, możesz określić mapowanie najwyższego poziomu w pliku YAML, załaduj to (które zostanie skonstruowane w Pythonie dict), a następnie wprowadzić go do silnika szablonu.

Nadal będziesz musiał przejrzeć swoje pliki, więc kilka linii kodu jest bardziej prawdopodobne niż wykonanie powyższego w jednolinijkowym.

2

Nie jestem całkowicie pewien, co próbujesz osiągnąć, nie wiem, co masz na myśli przez skrypty wykonywalne? Jeśli interpretuję to poprawnie, możesz skorzystać z funkcji PyYAML Docs. W szczególności sekcja dotycząca YAML Tags and Python Types.

Istnieje kilka znaczników YAML, które umożliwiają wywoływanie modułów lub pakietów Pythona, a argumenty pakietu są wypełniane przez zagnieżdżone znaczniki YAML poniżej. Więc trzeba by napisać klasę lub funkcję, która zużywa kwargs YAML ale po prostu nazwać to w config YAML z jednej linii jak tak,

!!python/object/apply:module.function [argument, ...] 

Chociaż można również skorzystać z przyjrzeniu sekcja na Constructors, Representers and Resolvers, a także string.Template z dokumentacji Pythona.

Teoretycznie powinieneś być w stanie wywołać funkcję substitution() z wnętrza pliku YAML.