pickerel 发表于 2013-1-28 19:51:22

在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]
查看完整版本: 在GAE中读取yaml的例子