10 gavên YAML Zen

Em hemî ji Ansible hez dikin, lê Ansible YAML e. Ji bo pelên vesazkirinê gelek format hene: navnîşên nirxan, cotên parametr-nirx, pelên INI, YAML, JSON, XML û gelekên din. Lêbelê, ji ber çend sedeman ji hemî wan, YAML bi gelemperî bi taybetî dijwar tête hesibandin. Bi taybetî, tevî mînîmalîzma nûjen û kapasîteyên wê yên balkêş ji bo xebata bi nirxên hiyerarşîk re, hevoksaziya YAML dikare bi nêzîkatiya xwe ya mîna Python-ê ya ji bo lêdanê aciz bibe.

10 gavên YAML Zen

Ger YAML we aciz bike, hûn dikarin-û divê hûn! - 10 gavên jêrîn bavêjin da ku xemgîniya xwe di astek pejirandî de kêm bikin û ji YAML hez bikin. Wekî ku li gorî vê navnîşê be, dê deh serişteyên me ji sifirê werin hejmartin, em ê li gorî kêfa xwe meditation û pratîkên giyanî lê zêde bikin 😉

0. Edîtorê xwe bixebite

Kîjan edîtorê nivîsê we heye ne girîng e, belkî bi kêmanî yek pêvek heye ku bi YAML re bixebite. Ger yek we tune, wê tavilê bibînin û saz bikin. Wextê ku li lêgerîn û sazkirinê derbas dibe, her gava ku hûn neçar in YAML biguherînin dê gelek caran bidin.

Mînakî, edîtor Atom Ji hêla xwerû ve YAML piştgirî dike, lê ji bo GNU Emacs hûn neçar in ku pakêtên din saz bikin, mînakî, yaml-mode.

10 gavên YAML Zen

Emacs di moda YAML de û cîhan nîşan dide.

Ger edîtorê weya bijare moda YAML tune be, wê hingê hin pirsgirêk dikarin bi xebata bi mîhengan re werin çareser kirin. Mînakî, edîtorê nivîsê yê standard GNOME Gedit xwedan modek YAML nîne, lê ji hêla xwerû ve ew hevoksaziya YAML ronî dike û dihêle ku hûn xebata bi dendikan ve mîheng bikin:

10 gavên YAML Zen

Di Gedit de veqetandin.

Pêvekek ciyên xêzkirinê ji bo Gedit, mekanan wekî xalan nîşan dide, nezelaliyan bi astên xêzkirinê ji holê radike.

Bi gotinên din, wextê xwe li ser edîtorê xweya bijare fêr bibin. Fêr bibin ka ew an civata pêşkeftina wî ji bo xebata bi YAML re çi pêşkêşî dike, û wan taybetmendiyan bikar bînin. Bê guman hûn ê poşman nebin.

1. Linterek bikar bînin

Bi îdeal, zimanên bernamekirinê û zimanên nîşankirinê hevoksaziya pêşbînîkirî bikar tînin. Komputer di pêşbîniyê de baş in, ji ber vê yekê têgeha lintera. Ger di 40 salên hebûna xwe de ew ji we re derbas bûye û hûn hîn jî lînterek YAML bikar neynin, wê hingê dem e ku hûn yamllint biceribînin.

Sazkirin yamllint Hûn dikarin rêveberê pakêtê ya standard Linux bikar bînin. Ji bo nimûne, di Linux ya Red Hat Enterprise 8 an Fedora wusa pêk hatiye:

$ sudo dnf install yamllint

Dûv re hûn bi tenê yamllint dimeşînin, pelê YAML derbas dikin ku hûn kontrol bikin. Ger hûn pelek bi xeletî derbasî lînterê bikin ev e ku ew dixuye:

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

Hejmarên çepê ne dem in, lê hevrêzên xeletiyê ne: jimareya rêz û stûnê. Danasîna xeletiyê dibe ku tiştek ji we re nebêje, lê hûn tam dizanin ku ew li ku ye. Tenê li vê cîhê di kodê de binihêrin, û bi îhtîmalek mezin dê her tişt zelal bibe.

Dema ku yamllint di pelek de xeletiyek nabîne, tiştek li ser ekranê nayê çap kirin. Ger bêdengiyek wusa we ditirsîne û hûn piçek bertekek din dixwazin, wê hingê hûn dikarin bi fermana echo ya şertî bi navgînek ampersandek ducar (&&), bi vî rengî lingê bimeşînin:

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

Di POSIX de, ampersandek ducar dişewite heke û tenê heke fermana pêşîn 0 vegere. Û yamllint tenê jimara xeletiyên ku hatine dîtin vedigerîne, ji ber vê yekê ev tevahî avakirina şertî dixebite.

2. Bi Python binivîsin, ne YAML

Ger YAML bi rastî we aciz dike, tenê tê de nenivîse, bi rastî. Wusa diqewime ku YAML tenê forma ku serîlêdanê fam dike ye. Lê di vê rewşê de jî, ne hewce ye ku pelek YAML çêbikin. Li ser tiştê ku hûn jê hez dikin binivîsin û dûv re veguherînin. Mînakî, pirtûkxaneyek mezin ji bo Python heye pyyaml û du awayên veguheztinê: xwe-veguheztin û veguheztina bi riya nivîsan.

Xwe-guhertin

Di vê rewşê de, pelê daneyê jî nivîsarek Python e ku YAML çêdike. Ev rêbaz ji bo daneyên piçûk ên herî baş e. Hûn tenê daneyên JSON-ê di nav guhêrbarek Python de binivîsin, pêşiyê wê bi rêwerzek importê bidin, û di dawiya pelê de sê rêzan lê zêde bikin da ku derketinê bicîh bikin.

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

Naha em vê pelê di Python de dimeşînin û pelê output.yaml digirin:

$ 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

Ev YAML bi tevahî derbasdar e, lê yamllint dê we hişyar bike ku ew bi - dest pê nake. Welê, ev dikare bi hêsanî bi destan an hinekî di nivîsara Python de were sererast kirin.

Veguheztin bi riya nivîsan

Di vê rewşê de, em pêşî di JSON-ê de dinivîsin, û dûv re veguherkerê wekî skrîptek Python-a cihêreng dimeşînin, ku YAML wekî encam çêdike. Li gorî rêbaza berê, ev rêbaz çêtir dibe, ji ber ku veguhertin ji daneyê veqetandî ye.

Pêşî, em pelê JSON example.json biafirînin, mînakî, hûn dikarin jê bistînin 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"
			}
		  }
		}
	  }
	}

Dûv re em ê skrîptek veguherînerek hêsan biafirînin û wê di bin navê json2yaml.py de hilînin. Ev skrîpt hem modulên YAML û hem jî JSON Python îtxal dike, û pelek JSON-a ku ji hêla bikarhêner ve hatî destnîşan kirin bar dike, veguhertinê pêk tîne û daneyan li pelê output.yaml dinivîse.

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

Vê skrîptê di riya pergalê de hilînin û li gorî hewcedariyê wê bimeşînin:

$ ~/bin/json2yaml.py example.json

3. Pir û pir caran parsek bikin

Carinan bikêr e ku meriv ji aliyek cûda li pirsgirêkê binêre. Heke hûn di temsîlkirina têkiliyên di navbera daneyên xwe de di YAML de pirsgirêkek heye, hûn dikarin bi demkî veguhezînin tiştek naskirî.

Mînakî, heke hûn bi navnîşên ferhengê an JSON re rehet dixebitin, hûn dikarin YAML-ê veguherînin JSON bi tenê bi du fermanan di şêlê Python-a înteraktîf de. Ka em bibêjin pelek we ya YAML heye mydata.yaml, wê hingê ew ê wusa xuya bike:

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

Hûn dikarin gelek mînakên din li ser vê mijarê bibînin. Wekî din, gelek veguherînerên serhêl û parserên herêmî hene. Ji ber vê yekê gava ku hûn tê de tenê tevliheviyek nefêmkirî dibînin, ji nûvekirina daneyan dudilî nebin.

4. Taybetmendiyan bixwînin

Vegera YAML piştî navberek dirêj, serdanê kêrhatî ye yaml.org û taybetmendiyan (taybetmendiyan) ji nû ve bixwînin. Ger hûn bi YAML re dijwariyên we hene, lê negihîştine diyardeyê, wê hingê ew dem e ku hûn vê rewşê rast bikin. Taybetmendî bi rengek ecêb hêsan têne nivîsandin, û hewcedariyên hevoksaziyê bi hejmareke mezin ji mînakên di nav de têne destnîşan kirin Serê 6.

5. Pseudo-config

Dema ku pirtûkek an gotarek dinivîsin, her gav bikêr e ku meriv pêşî nexşeyek pêşîn, bi kêmanî di forma naverokê de, xêz bike. Bi YAML re jî heman tişt e. Bi îhtîmalek mezin, we ramanek heye ka kîjan dane hewce dike ku di pelek YAML de were nivîsandin, lê hûn bi rastî fam nakin ka meriv wê çawa bi hevûdu ve girêdide. Ji ber vê yekê, berî peykerkirina YAML, pseudo-config xêz bikin.

Pseudo-config dişibihe pseudo-kodê, li ku derê hûn ne hewce ne ku li ser avahî an veqetandinê, têkiliyên dêûbav-zarok, mîras û hêlînê xem bikin. Li vir jî heman e: hûn dubareyên daneyan gava ku di serê we de derdikevin dikişînin.

10 gavên YAML Zen

Bernamesazên navnîşkirina Pseudo-config (Martin û Tabitha) û jêhatîbûna wan (zimanên bernamekirinê: Python, Perl, Pascal û Lisp, Fortran, Erlang, bi rêzê ve).

Piştî ku li ser kaxezek pseudo-config xêz kirin, wê bi baldarî analîz bikin û, heke her tişt di rê de ye, wê di forma pelek YAML ya derbasdar de format bikin.

6. The Tabs vs Spaces Dilemma

Hûn ê neçar bimînin ku dubendiyê çareser bikin "Tab an cîh?". Ne di wateya gerdûnî de, lê tenê di asta rêxistina we de, an bi kêmanî projeyek. Ne girîng e ku ev yek bi karanîna paş-pêvajoya bi senaryoyek sed-ê re, sazkirina edîtorên nivîsê li ser makîneyên bernameçêkeran, an bi gerdûnî wergirtina meqbûzên lihevhatina hişk bi rêwerzên linterê re di bin gefa jikaravêtinê de ye, lê hemî endamên tîmê we ku di yek an rêyek din bi YAML re têkildar divê tenê cîhan bikar bîne (wek ku ji hêla taybetmendiya YAML ve tê xwestin).

Di her edîtorek nivîsê ya normal de, hûn dikarin tabloyên rastkirina otomatîkî li hejmarek cîhên diyarkirî mîheng bikin, ji ber vê yekê pêgirên kilîtê dê rabin. Tab ne hewce ye ku hûn bitirsin.

Wekî ku her nefretkarek YAML baş dizane, hûn nikanin cûdahiya di navbera tablo û cîhên li ser ekranê de bibînin. Û gava ku tiştek nayê dîtin, ew bi gelemperî tiştê paşîn e ku mirov bi bîr tîne, piştî ku wan hemî pirsgirêkên din ên mimkun ji hev veqetandin, kontrol kirin û rakirin. Saetek ji wextê ku li lêgerîna xêzek tabloyê an bloka cîhan derbas dibe, tenê diqîre ku hûn bi lez hewce ne ku hûn siyasetek ji bo karanîna yek an ya din biafirînin, û dûv re ji bo lihevhatina wê vekolînek betona xurtkirî bicîh bînin (mînak, bi riya çengek Git ku wê bi zorê di nav lingê de bi zorê bike).

7. Kêm zêde ye (an zêde kêm e)

Hin kes hez dikin ku di YAML-ê de binivîsin ji ber ku ew strukturê giran dike. Di heman demê de, ew bi rengek çalak vekêşanê bikar tînin da ku blokên daneyan ronî bikin. Ev celebek xapandinek e ji bo teqlîdkirina zimanên nîşankirinê yên ku dabeşkerên eşkere bikar tînin.

Li vir mînakek avahiyek wusa ye Belgekirinên berbiçav:

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

Ji hinekan re, ev vebijark ji wan re dibe alîkar ku di serê xwe de avahiya YAML-ê birêkûpêk bikin; ji bo yên din, berevajî vê, ew bi nerîna wan, bi nerîna wan, bi gelek kêşeyên nehewce wan aciz dike.

Lê heke hûn xwediyê belgeya YAML bin û ji parastina wê berpirsiyar in, wê hingê tu û tenê tu divê diyar bike ka meriv çawa binavbûnê bikar tîne. Ger hûn ji peldanka mezin aciz in, li gorî taybetmendiya YAML wê herî kêm gengaz bihêlin. Mînakî, pelê jorîn ji belgeya Ansible dikare bi vî rengî bêyî windabûnê ji nû ve were nivîsandin:

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

8. Cihên vala bikar bînin

Ger hûn di dagirtina pelek YAML de bi berdewamî heman xeletiyan dubare bikin, maqûl e ku hûn şablonek wekî şîroveyek têxin nav wê. Dûv re carek din hûn dikarin tenê vê şablonê kopî bikin û daneyên rastîn li wir binivîsin, mînakî:

---
# - <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. Tiştek cûda bikar bînin

Ger serîlêdanê li ser we nehêle, wê hingê dibe ku hêja be ku YAML bi rengek cûda biguhezîne. Bi demê re, pelên vesazkirinê dikarin ji xwe mezintir bibin û dûv re çêtir e ku hûn wan di Lua an Python de veguhezînin nivîsarên hêsan.

YAML tiştek girîng e ku pir kes ji ber kêmasî û sadebûna wê hez dikin, lê ew ji yekane amûra di arsenala we de dûr e. Ji ber vê yekê carinan hûn dikarin wê red bikin. Pirtûkxaneyên parskirinê ji bo YAML-ê hêsan têne dîtin, ji ber vê yekê heke hûn vebijarkên koçberiyê yên hêsan pêşkêşî bikin, bikarhênerên we dê ji vê têkçûnê bi rengek bê êş bijîn.

Ger hûn nekarin bêyî YAML bikin, wê hingê van 10 serişteyan bavêjin û nefretkirina xwe ya ji YAML yek carî û her dem derbas bikin!

Source: www.habr.com

Add a comment