在GAE中读取yaml的例子
在Google App Engine中内置了yaml文件的验证、解析方法,下面演示一个在GAE中读取yaml的例子待读取的配置文件 config.yaml 内容如下:
blog_name: 我们的博客
allow_comment: False
masters:
- name: Pickerel Yee
account: pickerel@gmail.com
- name: 王二
account: wang2@gmail.com
建立配置验证读取文件 config.py
#!/usr/bin/env python# -*- coding: utf-8 -*-import os, sysfrom google.appengine.api import validationfrom google.appengine.api import yaml_listenerfrom google.appengine.api import yaml_builderfrom google.appengine.api import yaml_objectfrom simple_blog import *class BlogMaster(validation.Validated):ATTRIBUTES = { 'name': validation.TYPE_UNICODE, 'account': r'^\S+@+\.+$'}class ConfigExternal(validation.Validated):ATTRIBUTES = { 'blog_name': validation.TYPE_UNICODE, 'allow_comment': validation.Type(bool, default=False), 'masters': validation.Optional(validation.Repeated(BlogMaster))}#配置类class Config(object): # subclassing from object for 2.2, unnecessary after thatinstance = Nonedef __init__(self): self.blog_name = 'blog' self.blog_masters = [] self.allow_comment = True @staticmethoddef get_instance(): if Config.instance == None: Config.instance = Config.load() return Config.instance @staticmethoddef load(): """parses the config.yaml file""" _BASE_PATH = os.path.abspath(os.path.dirname(__file__)) config_file = os.path.join(_BASE_PATH, "config.yaml") fh = open(config_file, "r") try: builder = yaml_object.ObjectBuilder(ConfigExternal) handler = yaml_builder.BuilderHandler(builder) listener = yaml_listener.EventListener(handler) listener.Parse(fh) return handler.GetResults() finally: fh.close()
GAE中内置了基本数据类型的验证方法,更复杂的验证可以通过正则式或者自定义验证方法来实现。
使用
print config.get_instance().blog_name
附件是一个完整的演示例子。
页:
[1]