10 nhanho kuenda kuYAML Zen

Tese tinoda Ansible, asi Ansible is YAML. Kune akawanda mafomati emafaira ekumisikidza: rondedzero yezvakakosha, parameter-value pairi, INI mafaera, YAML, JSON, XML nevamwe vazhinji. Nekudaro, nekuda kwezvikonzero zvakati wandei kubva kune ese, YAML inowanzoonekwa seyakaoma. Kunyanya, kunyangwe inozorodza minimalism uye kugona kunoshamisa kwekushanda nehuchenjeri hwepamusoro, iyo YAML syntax inogona kutsamwisa nePython-senge nzira yekudzika.

10 nhanho kuenda kuYAML Zen

Kana YAML ikakushatirisa, unogona-uye unofanira! - tora gumi anotevera matanho ekudzikisa kushushikana kwako kusvika padanho rinogamuchirwa uye kudanana neYAML. Sezvinokodzera runyorwa urwu, matipi edu gumi achaverengerwa kubva kutanga, isu tichawedzera kufungisisa uye maitiro emweya pamadiro πŸ˜‰

0. Ita kuti mupepeti wako ashande

Izvo hazvina basa kuti ndeapi mameseji edhita aunawo, panogona kunge paine kamwechete plugin yekushanda neYAML. Kana usina, tsvaga woiisa nekukasika. Iyo nguva inoshandiswa kutsvaga uye kumisikidza inobhadhara kakawanda pese pese paunofanirwa kugadzirisa YAML.

Somuenzaniso, mupepeti atomu inotsigira YAML nekukasira, asi yeGNU Emacs uchafanirwa kuisa mamwe mapakeji, semuenzaniso, yaml-mode.

10 nhanho kuenda kuYAML Zen

Emacs muYAML modhi uye kuratidza nzvimbo.

Kana yako yaunofarira mupepeti isina YAML modhi, saka mamwe ematambudziko anogona kugadziriswa nekushanda nezvirongwa. Semuenzaniso, yakajairwa GNOME mameseji edhita Gedit haina YAML modhi, asi nekukasira inosimbisa YAML syntax uye inokutendera iwe kugadzirisa basa nemaindents:

10 nhanho kuenda kuYAML Zen

Kuisa indents muGedit.

A plugin drawspaces yeGedit, inoratidza nzvimbo semadotsi, ichibvisa kusanzwisisika nemazinga ekudzika.

Mune mamwe mazwi, pedza nguva uchidzidza nezve yako yaunofarira mupepeti. Tsvaga izvo zvaanopa iye kana nharaunda yake yebudiriro yekushanda neYAML, uye shandisa iwo maficha. Iwe zvechokwadi haungazvidembi.

1. Shandisa linter

Sezvineiwo, mitauro yekuronga uye mitauro yekumaka inoshandisa inofanotaurwa syntax. Makomputa akanaka pakufungidzira, ndosaka pfungwa ye linter. Kana mumakore makumi mana ekuvapo kwayo yakapfuura iwe uye hausati washandisa YAML linter, saka yave nguva yekuyedza yamllint.

Isa yamllint Iwe unogona kushandisa yakajairwa Linux package maneja. Somuenzaniso, in Red Hat Enterprise Linux 8 kana Fedora zvaitwa seizvi:

$ sudo dnf install yamllint

Ipapo iwe unongomhanya yamllint, uchipfuura iyo YAML faira kuti utarise. Izvi ndizvo zvazvinoita kana ukapfuudza faira rine chikanganiso kune linter:

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

Nhamba dziri kuruboshwe haisi iyo nguva, asi zvinorongeka zvechikanganiso: mutsara uye nhamba yekoramu. Tsananguro yekukanganisa inogona kusakuudza chero chinhu, asi iwe unonyatsoziva pairi. Ingotarisa nzvimbo ino mukodhi, uye kazhinji zvese zvichave zvakajeka.

Kana yamllint ikasawana zvikanganiso mufaira, hapana chinodhindwa kuchiratidziro. Kana kunyarara kwakadaro kuchikutyisa uye iwe uchida imwe mhinduro shoma, saka iwe unogona kumhanya linter neinomisikidzwa echo kuraira kuburikidza neaviri ampersand (&&), seizvi:

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

MuPOSIX, kaviri ampersand moto kana uye chete kana murairo wapfuura ukadzosa 0. Uye yamllint inongodzosa nhamba yezvikanganiso zvakawanikwa, ndosaka ichi chese chivakwa chinoshanda.

2. Nyora muPython, kwete YAML

Kana YAML ichikusvota, usanyore mairi, chaizvo. Izvo zvinoitika kuti YAML ndiyo yega fomati iyo application inonzwisisa. Asi kunyangwe mune iyi kesi, hazvifanirwe kugadzira YAML faira. Nyora pane zvaunoda wozoshandura. Semuenzaniso, kune raibhurari huru yePython pyyaml uye nzira mbiri dzekushandura: kuzvishandura uye kutendeuka kuburikidza nemagwaro.

Kuzvishandura

Mune ino kesi, iyo data faira zvakare Python script inogadzira YAML. Iyi nzira inonyatsokodzera madiki data seti. Iwe unongonyora iyo data yeJSON muPython chinja, tungamira iyo neinongedzo yekuraira, uye pakupera kwefaira wedzera mitsara mitatu yekushandisa zvakabuda.

#!/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

Zvino isu tinomhanyisa iyi faira muPython uye totora output.yaml faira:

$ 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

Izvi zvakanyatsoshanda YAML, asi yamllint ichakuyambira kuti haitangi ne-. Zvakanaka, izvi zvinogona kugadziridzwa zviri nyore nemaoko kana kugadziridzwa zvishoma muPython script.

Shanduko kuburikidza nezvinyorwa

Muchiitiko ichi, isu tinotanga kunyora muJSON, tobva tamhanyisa shanduko seyakasiyana Python script, iyo inoburitsa YAML sekubuda. Kuenzaniswa neyakapfuura nzira, iyi nzira inoyera zvirinani, sezvo kutendeuka kwakasiyana kubva kune data.

Kutanga, ngatigadzirei JSON file example.json, semuenzaniso, unogona kuitora kubva 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"
			}
		  }
		}
	  }
	}

Zvadaro tichagadzira chinyorwa chakareruka chekushandura uye tochichengeta pasi pezita json2yaml.py. Ichi chinyorwa chinopinza kunze zvese maMOdule eYAML neJSON Python, uye chinotakura faira reJSON rakatsanangurwa nemushandisi, rinoshandura, uye rinonyora data kune yakabuda.yaml faira.

#!/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()

Sevha iyi script munzira yesystem uye imhanye sezvinodiwa:

$ ~/bin/json2yaml.py example.json

3. Rongedza zvakawanda uye kazhinji

Dzimwe nguva zvinobatsira kutarisa dambudziko kubva kune imwe kona. Kana iwe uchinetseka kumiririra hukama pakati pe data rako muYAML, unogona kuishandura kwenguva diki kuita chimwe chinhu chakajairika.

Semuenzaniso, kana uchinge wakasununguka kushanda nemaduramazwi kana JSON, unogona kushandura YAML kuita JSON nemirairo miviri chete mune inopindirana Python shell. Ngatitii une YAML faira mydata.yaml, saka izvi ndizvo zvazvaizoita:

$ 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.'}

Unogona kuwana mimwe mienzaniso yakawanda pane iyi nyaya. Uye zvakare, kune akawanda epamhepo ekushandura uye emunharaunda parsers anowanikwa. Saka usazeza kugadzirisa iyo data kana iwe ukaona chete isinganzwisisike jumble mairi.

4. Verenga zvinotsanangurwa

Kudzokera kuYAML mushure mekuzorora kwenguva refu, zvinobatsira kushanya yaml.org uye verenga zvakare zvakatemwa (specs). Kana uine matambudziko neYAML, asi usati wasvika kune yakatarwa, yave nguva yekugadzirisa mamiriro aya. Iwo mafungidziro ari nyore nyore kunyora, uye izvo zvinodikanwa zve syntax zvinoratidzwa nehuwandu hukuru hwemienzaniso mu. Chitsauko 6.

5. Pseudo-configs

Paunenge uchinyora bhuku kana chinyorwa, zvinogara zvichibatsira kutanga wadhirowa rondedzero yekutanga, zvirinani muchimiro chetafura yezviri mukati. Zvakafanana neYAML. Zvingangodaro, iwe une pfungwa yei data inoda kunyorwa muYAML faira, asi iwe haunyatso nzwisisa kuti ungaibatanidza sei. Naizvozvo, usati waveza YAML, dhirowa pseudo-config.

Pseudo-config yakafanana nepseudo-code, apo iwe haufanirwe kunetseka nezve chimiro kana indentation, hukama hwevabereki nemwana, nhaka uye nesting. Zvakafanana pano: iwe unodhirowa kudzokororwa kweiyo data sezvainosimuka mumusoro mako.

10 nhanho kuenda kuYAML Zen

Pseudo-config listing programmers (Martin naTabitha) uye hunyanzvi hwavo (mitauro yekuronga: Python, Perl, Pascal uye Lisp, Fortran, Erlang, zvichiteerana).

Mushure mekudhirowa pseudo-config pabepa, nyatsoiongorora uye, kana zvese zvakarongeka, zvifomete nenzira yefaira reYAML.

6. The Tabs vs. Spaces Dilemma

Unotofanira kugadzirisa dambudziko racho "Matebhu kana nzvimbo?". Kwete mupfungwa yepasi rose, asi chete padanho resangano rako, kana kanenge purojekiti. Izvo hazvina basa kuti izvi zvinosanganisira kushandisa post-processing ne sed script, kuseta mameseji edhi pamichina yevagadziri, kana kutora maresiti ekunyatso kutevedzera mirairo yelinter pasi pekutyisidzira kudzingwa, asi nhengo dzese dzechikwata chako imwe nzira kana imwe ine chekuita neYAML inofanira kushandisa chete nzvimbo (sezvinodiwa neYAML yakatarwa).

Mune chero yakajairwa mavara edhita, unogona kugadzirisa otomatiki-matabo kune yakatarwa nhamba yenzvimbo, saka kumukira kwevateveri vakakosha. Tab haufaniri kutya.

Sezvo wese anovenga YAML anonyatsoziva, haugone kuona mutsauko pakati pematebhu nenzvimbo pachiratidziri. Uye kana chimwe chinhu chisingaoneki, kazhinji ndicho chinhu chekupedzisira chinoyeukwa nevanhu, mushure mekunge varongedza, vaongorora uye nekubvisa mamwe matambudziko ese anobvira. Awa yenguva inopedzerwa uchitsvaga tabulation curve kana block yenzvimbo inongopopota kuti iwe unoda nekukurumidza kugadzira mutemo wekushandisa imwe kana imwe, wobva waisa yakasimbiswa kongiri cheki yekutevedzera nayo (semuenzaniso, kuburikidza Git hook yekuimanikidza kuburikidza ne linter).

7. Zvishoma zvakanyanya (kana zvakanyanya zvishoma)

Vamwe vanhu vanofarira kunyora muYAML nekuti inosimbisa chimiro. Panguva imwecheteyo, ivo vanoshingairira kushandisa indentation kuratidza mabhuraki e data. Iyi irudzi rwechitsotsi kutevedzera mitauro yemakapu inoshandisa zvakajeka delimiters.

Heino muenzaniso wechimiro chakadaro kubva Ansible zvinyorwa:

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

Kune vamwe, iyi sarudzo inovabatsira kugadzirisa iyo YAML chimiro mumisoro yavo; kune vamwe, pane kudaro, inovatsamwisa nezvakawanda zvisina basa, mumaonero avo, indents.

Asi kana iwe uri muridzi wegwaro reYAML uye uine basa rekurichengeta, ipapo iwe uye iwe chete inofanira kutsanangura mashandisiro ekushandisa indentation. Kana iwe uchitsamwiswa nehombe padding, ichengetedze kune iyo shoma inogoneka zvinoenderana neiyo YAML yakatarwa. Semuenzaniso, iyo faira iri pamusoro kubva kuAnsible zvinyorwa inogona kunyorwazve seizvi pasina kurasikirwa:

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

8. Shandisa ma blanks

Kana iwe uchigara uchidzokorora zvikanganiso zvakafanana paunenge uchizadza YAML faira, zvine musoro kuisa template mairi sekutaura. Zvino nguva inotevera iwe unogona kungokopa iyi template uye woisa chaiyo data ipapo, semuenzaniso:

---
# - <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. Shandisa chimwe chinhu chakasiyana

Kana iyo application isina kukubata pauri, saka zvingave zvakakodzera kuchinja YAML kune imwe fomati. Nekufamba kwenguva, mafaera ekugadzirisa anogona kuzvikurira uye zvino zviri nani kuashandura kuita zvinyorwa zviri nyore muLua kana Python.

YAML chinhu chikuru chinodiwa nevanhu vazhinji nekuda kweminimalism uye nyore, asi iri kure nechoga chishandiso mune yako arsenal. Saka dzimwe nguva unogona kuzviramba. Parsing maraibhurari ari nyore kuwana yeYAML, saka kana iwe ukapa nyore kutama sarudzo, vashandisi vako vanopona nekukundikana uku zvisingarwadze.

Kana iwe usingakwanise kuita pasina YAML, tora aya matipi gumi uye ukunde kusada kwako kweYAML zvachose!

Source: www.habr.com

Voeg