Package: poyo
poyoA lightweight YAML Parser for Python. 🐓poyodoes not allow deserialization of arbitrary Python objects. Supported
types arestr,bool,int,float,NoneTypeas well asdictandlistvalues.⚠️ Please note that poyo supports only a chosen subset of the YAML format
that is required to parsecookiecutter user configuration
files. poyo does not have support for serializing into YAML
and is not compatible with JSON.Installationpoyo is available onPyPIfor Python versions 2.7 and newer and can
be installed withpip:pip install poyoThis package does not have any additional requirements. 📦Usagepoyo comes with aparse_string()function, to load utf-8 encoded string
data into a Python dict.importcodecsimportloggingfrompoyoimportparse_string,PoyoExceptionlogging.basicConfig(level=logging.DEBUG)withcodecs.open("tests/foobar.yml",encoding="utf-8")asymlfile:ymlstring=ymlfile.read()try:config=parse_string(ymlstring)exceptPoyoExceptionasexc:logging.error(exc)else:logging.debug(config)ExampleInput YAML string---default_context:# foobargreeting:こんにちはemail:"raphael@hackebrot.de"docs:truegui:FALSE123:456.789# comment# allthethings'some:int':1000000foo:"hallo#welt"#Inline comment :)longtext:>This is a multiline string.It can contain all manners of characters.Single line breaks are ignored,but blank linkes cause line breaks.trueish:Falseeeeeeeblog:raphael.codesrelative-root:/# web app root path (default: '')lektor:0.0.0.0:5000# local builddoc_tools:# docs or didn't happen-mkdocs-'sphinx'-null# 今日はzZz:TrueNullValue:Null# Block# CommentHello World:# See you at EuroPythonnull:This is madness# yogh:https://github.com/{0}.git"Yay#python":Cool!Output Python dict{u"default_context":{u"greeting":u"こんにちは",u"email":u"raphael@hackebrot.de",u"docs":True,u"gui":False,u"lektor":"0.0.0.0:5000",u"relative-root":"/",123:456.789,u"some:int":1000000,u"foo":u"hallo #welt",u"longtext":(u"This is a multiline string. It can contain all "u"manners of characters.\nSingle line breaks are "u"ignored, but blank linkes cause line breaks.\n"),u"trueish":u"Falseeeeeee",u"blog":u"raphael.codes",u"doc_tools":[u"mkdocs",u"sphinx",None],},u"zZz":True,u"NullValue":None,u"Hello World":{None:u"This is madness",u"gh":u"https://github.com/{0}.git",},u"Yay #python":u"Cool!",}Loggingpoyo follows the recommendations forlogging in a library, which
means it does not configure logging itself. Its root logger is namedpoyoand the names of all its children loggers track the package/module hierarchy.
poyo logs to aNullHandlerand solely onDEBUGlevel.If your application configures logging and allows debug messages to be shown,
you will see logging when using poyo. The log messages indicate which parser
method is used for a given string as the parser deseralizes the config. You
can remove all logging from poyo in your application by setting the log level
of thepoyologger to a value higher thanDEBUG.Disable Loggingimportlogginglogging.getLogger("poyo").setLevel(logging.WARNING)Example Debug Logging Configimportloggingfrompoyoimportparse_stringlogging.basicConfig(level=logging.DEBUG)CONFIG="""---default_context: # foobargreeting: こんにちはgui: FALSEdoc_tools:# docs or didn't happen-    mkdocs- 'sphinx'123: 456.789"""parse_string(CONFIG)Example Debug Logging MessagesDEBUG:poyo.parser:parse_blankline <- \n
DEBUG:poyo.parser:parse_blankline -> IGNORED
DEBUG:poyo.parser:parse_dashes <- ---\n
DEBUG:poyo.parser:parse_dashes -> IGNORED
DEBUG:poyo.parser:parse_section <- default_context: # foobar\n
DEBUG:poyo.parser:parse_str <- default_context
DEBUG:poyo.parser:parse_str -> default_context
DEBUG:poyo.parser:parse_section -> <Section name: default_context>
DEBUG:poyo.parser:parse_simple <-     greeting: \u3053\u3093\u306b\u3061\u306f\n
DEBUG:poyo.parser:parse_str <- greeting
DEBUG:poyo.parser:parse_str -> greeting
DEBUG:poyo.parser:parse_str <- \u3053\u3093\u306b\u3061\u306f
DEBUG:poyo.parser:parse_str -> \u3053\u3093\u306b\u3061\u306f
DEBUG:poyo.parser:parse_simple -> <Simple name: greeting, value: \u3053\u3093\u306b\u3061\u306f>
DEBUG:poyo.parser:parse_simple <-     gui: FALSE\n
DEBUG:poyo.parser:parse_str <- gui
DEBUG:poyo.parser:parse_str -> gui
DEBUG:poyo.parser:parse_false <- FALSE
DEBUG:poyo.parser:parse_false -> False
DEBUG:poyo.parser:parse_simple -> <Simple name: gui, value: False>
DEBUG:poyo.parser:parse_list <-     doc_tools:\n        # docs or didn't happen\n        -    mkdocs\n        - 'sphinx'\n
DEBUG:poyo.parser:parse_str <- mkdocs
DEBUG:poyo.parser:parse_str -> mkdocs
DEBUG:poyo.parser:parse_str <- 'sphinx'
DEBUG:poyo.parser:parse_str -> sphinx
DEBUG:poyo.parser:parse_str <- doc_tools
DEBUG:poyo.parser:parse_str -> doc_tools
DEBUG:poyo.parser:parse_list -> <Simple name: doc_tools, value: ['mkdocs', 'sphinx']>
DEBUG:poyo.parser:parse_simple <-     123: 456.789\n
DEBUG:poyo.parser:parse_int <- 123
DEBUG:poyo.parser:parse_int -> 123
DEBUG:poyo.parser:parse_float <- 456.789
DEBUG:poyo.parser:parse_float -> 456.789
DEBUG:poyo.parser:parse_simple -> <Simple name: 123, value: 456.789>
DEBUG:poyo.parser:parse_simple <-     docs: true\n
DEBUG:poyo.parser:parse_str <- docs
DEBUG:poyo.parser:parse_str -> docs
DEBUG:poyo.parser:parse_true <- true
DEBUG:poyo.parser:parse_true -> True
DEBUG:poyo.parser:parse_simple -> <Simple name: docs, value: True>About this projectWe created this project to work around installation issues with acookiecutterversion that depended on existing YAML parsers
for Python. For more information please check out thisGitHub issue.CommunityWould you like to contribute topoyo? You're awesome! 😃Please check out thegood first issuelabel for tasks,
that are good candidates for your first contribution to poyo. Your
contributions are greatly appreciated! Every little bit helps and credit will
always be given.Everyone interacting in the poyo project's codebases, issue trackers, chat
rooms, and mailing lists is expected to follow thePyPI Code of
Conduct.Join the poyocommunity! 🌍🌏🌎LicenseDistributed under the terms of theMITlicense, poyo is free and open source
software.