amanyathelo ali-10 ukuya YAML Zen

Sonke siyayithanda i-Ansible, kodwa i-Ansible yi-YAML. Zininzi iifomati zeefayile zoqwalaselo: uluhlu lwamaxabiso, iparameter-value pairs, INI iifayile, YAML, JSON, XML kunye nezinye ezininzi. Nangona kunjalo, ngenxa yezizathu ezininzi kuzo zonke, i-YAML ihlala ithathwa ngokuba inzima kakhulu. Ngokukodwa, ngaphandle kokuhlaziya i-minimalism kunye namandla anomtsalane okusebenza ngamaxabiso aphantsi, i-syntax ye-YAML inokucaphukisa ngendlela yayo efana ne-Python yokungena.

amanyathelo ali-10 ukuya YAML Zen

Ukuba i-YAML iyakucaphukisa, unakoβ€”kwaye kufanele! -thatha la manyathelo ali-10 alandelayo ukunciphisa ukukhathazeka kwakho ukuya kwinqanaba elamkelekileyo kwaye uthandane ne-YAML. Njengoko kufanelekile olu luhlu, iingcebiso zethu ezilishumi ziya kubalwa ukusuka ekuqaleni, siya kongeza ukucamngca kunye nezenzo zokomoya ngokuthanda πŸ˜‰

0. Yenza umhleli wakho asebenze

Ayinamsebenzi nokuba yeyiphi na umhleli wombhalo, kukho ubuncinci iplagin enye yokusebenza neYAML. Ukuba awunayo, yifumane kwaye uyifake kwangoko. Ixesha elichithwe ukukhangela kunye nokucwangcisa liya kuhlawula amaxesha amaninzi ngalo lonke ixesha kufuneka uhlele i-YAML.

Umzekelo, umhleli atom ixhasa i-YAML ngokungagqibekanga, kodwa kwi-GNU Emacs kuya kufuneka ufake iipakethe ezongezelelweyo, umzekelo, imowudi yaml.

amanyathelo ali-10 ukuya YAML Zen

I-Emacs kwimowudi ye-YAML kunye nezithuba zokubonisa.

Ukuba umhleli wakho omthandayo akanayo imo yeYAML, ke ezinye zeengxaki zinokusonjululwa ngokusebenzisa izicwangciso. Umzekelo, umhleli wombhalo osezantsi we-GNOME i-Gedit ayinayo imo ye-YAML, kodwa ngokungagqibekanga ibalaselisa i-syntax ye-YAML kwaye ikuvumela ukuba uqwalasele umsebenzi ngokuhambelana nokuhambelana:

amanyathelo ali-10 ukuya YAML Zen

Ukucwangcisa i-indints kwi-Gedit.

Iplagi iindawo zokuzoba yeGedit, ibonisa izithuba njengamachaphaza, isusa iintsingiselo-mbini kunye nemigangatho yokuhlenga-hlengisa.

Ngamanye amazwi, chitha ixesha ufunda ngomhleli wakho owuthandayo. Fumanisa ukuba yena okanye uluntu lwakhe lophuhliso anokunikezela ngalo ekusebenzeni neYAML, kwaye usebenzise ezo mpawu. Ngokuqinisekileyo awuyi kuzisola.

1. Sebenzisa ilitha

Ngokufanelekileyo, iilwimi zokucwangcisa kunye neelwimi zokuphawula zisebenzisa i-syntax eqikelelwayo. Iikhompyuter zilungile kuqikelelo, yiyo loo nto imbono yokuba linter. Ukuba kwiminyaka engama-40 yobukho bayo idlule kuwe kwaye awukasebenzisi i-YAML linter, lixesha lokuba uzame yamllint.

Faka ifayile yamllint Ungasebenzisa umphathi wepakethe yeLinux eqhelekileyo. Umzekelo, kwi I-Red Hat Enterprise Linux 8 okanye Fedora yenziwe ngolu hlobo:

$ sudo dnf install yamllint

Emva koko ubaleka i-yamllint, uyigqithise ifayile ye-YAML ukuyijonga. Le yindlela ekhangeleka ngayo ukuba ugqithisa ifayile enempazamo kwilitha:

$ yamllint errorprone.yaml
errorprone.yaml
23:10     error    syntax error: mapping values are not allowed here
23:11     error    trailing spaces  (trailing-spaces)

Amanani asekhohlo ayiloxesha, kodwa ulungelelwaniso lwempazamo: umqolo kunye nenani lekholamu. Inkcazo yempazamo ayinakukuxelela nto, kodwa uyazi kakuhle apho ikhoyo. Jonga nje le ndawo kwikhowudi, kwaye mhlawumbi yonke into iya kucaca.

Xa i-yamllint ingafumani ziphoso kwifayile, akukho nto ishicilelweyo kwikhusi. Ukuba ukuthula okunjalo kuyakoyikisa kwaye ufuna ingxelo encinci, ngoko ungabaleka i-linter ngomyalelo we-echo onemeko nge-ampersand ephindwe kabini (&&), ngolu hlobo:

$ yamllint perfect.yaml && echo "OK"
OK

Kwi-POSIX, i-ampersand ephindwe kabini iyacima ukuba kwaye kuphela ukuba umyalelo owandulelayo ubuyisela u-0. Kwaye yamllint ibuyisela nje inani leziphoso ezifunyenweyo, yiyo loo nto lonke olu lwakhiwo olunemiqathango lusebenza.

2. Bhala ngePython, hayi YAML

Ukuba i-YAML iyakucaphukisa ngokwenene, ungabhali kuyo, ngokoqobo. Kwenzeka ukuba i-YAML kuphela kwendlela eqondwa sisicelo. Kodwa nakule meko, akuyomfuneko ukwenza ifayile ye-YAML. Bhala kwinto oyithandayo uze uyiguqule. Umzekelo, kukho ithala leencwadi elikhulu lePython ipyyaml kunye neendlela ezimbini zokuguqula: ukuziguqula kunye nokuguqulwa ngokusebenzisa izikripthi.

Ukuziguqula

Kule meko, ifayile yedatha ikwasisikripthi sePython esenza i-YAML. Le ndlela ifaneleke kakhulu kwiiseti zedatha ezincinci. Ubhala ngokulula idatha ye-JSON ibe yintlupheko yePython, yandulela ngomyalelo wokungenisa, kwaye ekupheleni kwefayile yongeza imigca emithathu ukuphumeza imveliso.

#!/usr/bin/python3	
import yaml 

d={
"glossary": {
  "title": "example glossary",
  "GlossDiv": {
	"title": "S",
	"GlossList": {
	  "GlossEntry": {
		"ID": "SGML",
		"SortAs": "SGML",
		"GlossTerm": "Standard Generalized Markup Language",
		"Acronym": "SGML",
		"Abbrev": "ISO 8879:1986",
		"GlossDef": {
		  "para": "A meta-markup language, used to create markup languages such as DocBook.",
		  "GlossSeeAlso": ["GML", "XML"]
		  },
		"GlossSee": "markup"
		}
	  }
	}
  }
}

f=open('output.yaml','w')
f.write(yaml.dump(d))
f.close

Ngoku siqhuba le fayile kwiPython kwaye sifumane ifayile ye-output.yaml:

$ python3 ./example.json
$ cat output.yaml
glossary:
  GlossDiv:
	GlossList:
	  GlossEntry:
		Abbrev: ISO 8879:1986
		Acronym: SGML
		GlossDef:
		  GlossSeeAlso: [GML, XML]
		  para: A meta-markup language, used to create markup languages such as DocBook.
		GlossSee: markup
		GlossTerm: Standard Generalized Markup Language
		ID: SGML
		SortAs: SGML
	title: S
  title: example glossary

Le yi-YAML esebenzayo ngokugqibeleleyo, kodwa i-yamllint iya kukulumkisa ukuba ayiqalisi nge-. Ewe, oku kunokulungiswa ngokulula ngesandla okanye ukulungiswa kancinci kwiscript sePython.

Uguqulo kusetyenziswa izikripthi

Kule meko, siqala sibhala kwi-JSON, kwaye emva koko siqhube isiguquli njengeskripthi sePython esahlukileyo, esivelisa i-YAML njengemveliso. Xa kuthelekiswa nendlela yangaphambili, le ndlela yokulinganisa ingcono, ekubeni ukuguqulwa kuhluke kwidatha.

Okokuqala, makhe senze ifayile yeJSON umzekelo.json, umzekelo, ungayithatha kuyo json.org:

{
	"glossary": {
	  "title": "example glossary",
	  "GlossDiv": {
		"title": "S",
		"GlossList": {
		  "GlossEntry": {
			"ID": "SGML",
			"SortAs": "SGML",
			"GlossTerm": "Standard Generalized Markup Language",
			"Acronym": "SGML",
			"Abbrev": "ISO 8879:1986",
			"GlossDef": {
			  "para": "A meta-markup language, used to create markup languages such as DocBook.",
			  "GlossSeeAlso": ["GML", "XML"]
			  },
			"GlossSee": "markup"
			}
		  }
		}
	  }
	}

Emva koko siya kwenza iskripthi esilula sokuguqula kwaye sigcine phantsi kwegama json2yaml.py. Esi script singenisa ngaphandle zombini iimodyuli ze-YAML kunye ne-JSON Python, kwaye ilayisha ifayile ye-JSON echazwe ngumsebenzisi, yenza uguqulelo, kwaye ibhala idatha kwifayile yemveliso.yaml.

#!/usr/bin/python3
import yaml
import sys
import json

OUT=open('output.yaml','w')
IN=open(sys.argv[1], 'r')

JSON = json.load(IN)
IN.close()
yaml.dump(JSON, OUT)
OUT.close()

Gcina esi script kwindlela yesixokelelwano kwaye uyiqhube njengoko kufuneka:

$ ~/bin/json2yaml.py example.json

3. Cazulula kakhulu kwaye rhoqo

Ngamanye amaxesha kuba luncedo ukujonga ingxaki ngenye indlela. Ukuba unengxaki yokumela ubudlelwane phakathi kwedatha yakho kwi-YAML, ungayiguqula okwethutyana ibe yinto eqhelekileyo.

Umzekelo, ukuba ukhululekile ukusebenza ngoluhlu lwesichazi-magama okanye i-JSON, unokuguqula i-YAML ibe yi-JSON ngemiyalelo nje emibini kwiqokobhe lePython elisebenzisanayo. Masithi unefayile ye-YAML mydata.yaml, ke yile nto inokuthi ijongeke:

$ python3
>>> f=open('mydata.yaml','r')
>>> yaml.load(f)
{'document': 34843, 'date': datetime.date(2019, 5, 23), 'bill-to': {'given': 'Seth', 'family': 'Kenlon', 'address': {'street': '51b Mornington Roadn', 'city': 'Brooklyn', 'state': 'Wellington', 'postal': 6021, 'country': 'NZ'}}, 'words': 938, 'comments': 'Good article. Could be better.'}

Ungafumana eminye imizekelo emininzi kwesi sihloko. Ukongeza, kukho abaguquli abaninzi be-intanethi kunye nabacandisi bendawo abakhoyo. Ngoko ungathandabuzi ukufomatha idatha xa ubona kuphela i-jumble engaqondakaliyo kuyo.

4. Funda iinkcukacha

Ukubuyela kwi-YAML emva kwekhefu elide, kuyanceda ukutyelela yaml.org kwaye ufunde kwakhona iinkcukacha (izinto ezicacileyo). Ukuba unobunzima nge-YAML, kodwa awukafiki kwiinkcukacha, lixesha lokuba ulungise le meko. Iinkcazo zilula ngokumangalisayo ukuba zibhale, kwaye iimfuno zesintaksi ziboniswa ngenani elikhulu lemizekelo kwi. Isahluko sesi-6.

5. I-Pseudo-configs

Xa ubhala incwadi okanye inqaku, kusoloko kuluncedo ukuqala uzobe ulwandlalo lwangaphambili, ubuncinane ngendlela yoluhlu lweziqulatho. Iyafana neYAML. Ngokunokwenzeka, unombono wokuba yeyiphi idatha ekufuneka ibhalwe kwifayile ye-YAML, kodwa awuyiqondi kakuhle indlela yokuyidibanisa. Ke ngoko, phambi kokuba ukrole i-YAML, zoba i-pseudo-config.

I-Pseudo-config ifana nekhowudi-pseudo, apho akufanele ukhathazeke malunga nesakhiwo okanye ukufakwa, ubudlelwane bomzali nomntwana, ilifa kunye nokuzalela. Kuyafana apha: uzobe uphindaphinda idatha njengoko ivela entlokweni yakho.

amanyathelo ali-10 ukuya YAML Zen

I-Pseudo-config listers programmers (uMartin noTabitha) kunye nezakhono zabo (iilwimi zeprogram: iPython, iPerl, iPascal kunye neLisp, iFortran, i-Erlang, ngokulandelanayo).

Emva kokuzoba i-pseudo-config kwiphepha, lihlalutye ngononophelo kwaye, ukuba yonke into ilungile, yifomethe ngendlela yefayile ye-YAML esebenzayo.

6. IiTabhu vs. Ingxaki yeZithuba

Kuya kufuneka uyisombulule le ngxaki "iithebhu okanye izithuba?". Hayi ngengqiqo yehlabathi, kodwa kuphela kwinqanaba lombutho wakho, okanye ubuncinane iprojekthi. Akukhathaliseki nokuba oku kubandakanya ukusebenzisa inkqubo yasemva kweskripthi sed, ukuseta abahleli bombhalo koomatshini abadwelisi benkqubo, okanye jikelele ukuthatha iirisithi zokuthotyelwa ngokungqongqo nemiyalelo ye-linter phantsi kwesoyikiso sokugxothwa, kodwa onke amalungu eqela lakho abathe bangena. indlela enye okanye enye enxulumene ne-YAML kufuneka isebenzise izithuba kuphela (njengoko kufunwa yinkcazelo ye-YAML).

Kuwo nawuphi na umhleli wokubhaliweyo oqhelekileyo, ungaqwalasela-ozichanekileyo iithebhu ukuya kwinani elikhankanyiweyo lezithuba, ngoko uvukelo lwabalandeli abangundoqo. Ithebhu akuyomfuneko ukuba woyike.

Njengoko wonke umthiyi we-YAML esazi kakuhle, awuwuboni umahluko phakathi kweethebhu kunye nezithuba kwiscreen. Yaye xa into ethile ingabonakali, idla ngokuba yinto yokugqibela abantu abayikhumbulayo, emva kokuba beyilungisile, bayijongile baza bashenxisa zonke ezinye iingxaki ezinokwenzeka. Iyure yexesha elichithwe kukhangelwa igophe loluhlu okanye ibhloko yezithuba ikhala nje ukuba ufuna ngokungxamisekileyo ukwenza umgaqo-nkqubo wokusetyenziswa komnye okanye omnye, kwaye emva koko uphumeze utshekisho lwekhonkrithi olomeleziweyo lokuthotyelwa kwayo (umzekelo, ihuku yeGit ukuyinyanzela kwilitha).

7. Okuncinci kungaphezulu (okanye ngaphezulu kuncinci)

Abanye abantu bayathanda ukubhala kwi-YAML kuba igxininisa ubume. Kwangaxeshanye, basebenzisa ngokusebenzayo indentation ukugqamisa iibhloko zedatha. Olu luhlobo lobuqhophololo lokuxelisa iilwimi zokuphawula ezisebenzisa i-delimiters ezicacileyo.

Nanku umzekelo wesakhiwo esinjalo esivela Amaxwebhu afanelekileyo:

# Employee records
-  martin:
        name: Martin D'vloper
        job: Developer
        skills:
            - python
            - perl
            - pascal
-  tabitha:
        name: Tabitha Bitumen
        job: Developer
        skills:
            - lisp
            - fortran
            - erlang

Kwabanye, olu khetho lubanceda bahlele ukwakheka kwe-YAML ezintlokweni zabo; kwabanye, ngokuchaseneyo, iyabacaphukisa ngobuninzi obungeyomfuneko, ngokoluvo lwabo, i-indents.

Kodwa ukuba ungumnini woxwebhu lwe-YAML kwaye unoxanduva lokulugcina, ngoko wena kunye nawe kuphela kufuneka ichaze indlela yokusebenzisa i-indentation. Ukuba uyacatshukiswa kukukhuselwa kwamacala amakhulu, yigcine ifikelele kobona buncinci ngokweenkcukacha ze-YAML. Umzekelo, le fayile ingentla isuka kuxwebhu olufanelekileyo ingaphinda ibhalwe ngolu hlobo ngaphandle kwelahleko:

---
- martin:
   name: Martin D'vloper
   job: Developer
   skills:
   - python
   - perl
   - pascal
- tabitha:
   name: Tabitha Bitumen
   job: Developer
   skills:
   - lisp
   - fortran
   - erlang

8. Sebenzisa izikhewu

Ukuba uhlala uphinda iimpazamo ezifanayo xa ugcwalisa ifayile ye-YAML, iyavakala ukufaka itemplate kuyo njengophawu. Ngexesha elizayo unokukopa le template kwaye ufake idatha yokwenyani apho, umzekelo:

---
# - <common name>:
#   name: Given Surname
#   job: JOB
#   skills:
#   - LANG
- martin:
  name: Martin D'vloper
  job: Developer
  skills:
  - python
  - perl
  - pascal
- tabitha:
  name: Tabitha Bitumen
  job: Developer
  skills:
  - lisp
  - fortran
  - erlang

9. Sebenzisa into eyahlukileyo

Ukuba isicelo asinakukrwitsha kuwe, ngoko ke kunokuba luncedo ukutshintsha i-YAML kwifomati eyahlukileyo. Ngokuhamba kwexesha, iifayile zoqwalaselo zinokukhula ngokwazo kwaye ke kungcono ukuziguqulela zibe zizikripthi ezilula kwiLua okanye kwiPython.

I-YAML yinto entle ethandwa ngabantu abaninzi ngobuncinci bayo kunye nokulula, kodwa ikude nesona sixhobo kuphela kumkhosi wakho. Ngoko ngamanye amaxesha unokukwala. Iilayibrari zokwahlulahlula kulula ukuzifumana kwi-YAML, ke ukuba unikezela ngeendlela ezilula zokufuduka, abasebenzisi bakho baya kusinda kolu kusilela ngokungenantlungu.

Ukuba awukwazi ukwenza ngaphandle kwe-YAML, ke thatha ezi ngcebiso zili-10 kwaye woyise ukungathandi kwakho kwe-YAML kube kanye!

umthombo: www.habr.com

Yongeza izimvo