| 1 | import yaml, string |
|---|
| 2 | |
|---|
| 3 | ####### RUNNING YAML AGAINST THE README AND CHANGELOG |
|---|
| 4 | |
|---|
| 5 | readme = yaml.loadFile("README") |
|---|
| 6 | print "README" |
|---|
| 7 | for item in readme.next(): |
|---|
| 8 | print item |
|---|
| 9 | print "\n\nCONTRIBUTORS" |
|---|
| 10 | for person in readme.next()['contributors']: |
|---|
| 11 | print "===%s===" % person['who'] |
|---|
| 12 | print person['why?'] |
|---|
| 13 | print |
|---|
| 14 | print "\n\n" |
|---|
| 15 | print "CHANGELOG:\n" |
|---|
| 16 | print list(yaml.loadFile("CHANGELOG")) |
|---|
| 17 | print "\n\n" |
|---|
| 18 | |
|---|
| 19 | ######## USING YAML INSIDE YOUR PROGRAM |
|---|
| 20 | |
|---|
| 21 | testData = \ |
|---|
| 22 | """ |
|---|
| 23 | program: PyYaml |
|---|
| 24 | author: Steve Howell |
|---|
| 25 | --- |
|---|
| 26 | shopping list: |
|---|
| 27 | - apple |
|---|
| 28 | - banana |
|---|
| 29 | todo: |
|---|
| 30 | - eat more fruit: |
|---|
| 31 | - especially bananas! |
|---|
| 32 | - good for you |
|---|
| 33 | - write a better demo |
|---|
| 34 | """ |
|---|
| 35 | |
|---|
| 36 | print "YAML INSIDE YOUR PROGRAM" |
|---|
| 37 | for x in yaml.load(testData): |
|---|
| 38 | print repr(x) |
|---|
| 39 | print "\n\n" |
|---|
| 40 | |
|---|
| 41 | |
|---|
| 42 | ######### YPATH STUFF |
|---|
| 43 | |
|---|
| 44 | try: |
|---|
| 45 | print "YPATH EXPERIMENTATION" |
|---|
| 46 | data = yaml.load(testData) |
|---|
| 47 | print yaml.ypath("/author",data.next()).next() |
|---|
| 48 | print yaml.dump(yaml.ypath("/todo/0",data.next()).next()) |
|---|
| 49 | except NotImplementedError: |
|---|
| 50 | print "Experimental YPATH requires Python 2.2" |
|---|
| 51 | |
|---|
| 52 | ######### YAML DUMPER |
|---|
| 53 | |
|---|
| 54 | class Person: |
|---|
| 55 | def __init__(self, fname, lname, salary, children): |
|---|
| 56 | self.fname = fname |
|---|
| 57 | self.lname = lname |
|---|
| 58 | self.salary = salary |
|---|
| 59 | self.children = children |
|---|
| 60 | # private variables |
|---|
| 61 | self._fullname = fname + ' ' + lname |
|---|
| 62 | if salary: |
|---|
| 63 | self._sal_per_month = salary / 12.0 |
|---|
| 64 | self._num_children = len(children) |
|---|
| 65 | def to_yaml(self): |
|---|
| 66 | return ({ |
|---|
| 67 | 'first name': self.fname, |
|---|
| 68 | 'last name': self.lname, |
|---|
| 69 | 'salary': self.salary |
|---|
| 70 | }, '!!Person') |
|---|
| 71 | |
|---|
| 72 | mrBarson = Person('Foo', 'Barson', 20, ['ex', 'theomatic']) |
|---|
| 73 | mrDoe = Person('John', 'Doe', None, []) |
|---|
| 74 | print yaml.dump([mrBarson, mrDoe]) |
|---|
| 75 | |
|---|
| 76 | print "\n\nANOTHER WAY TO STDOUT:\n" |
|---|
| 77 | import sys |
|---|
| 78 | yaml.dumpToFile(sys.stdout, [mrBarson, mrDoe]) |
|---|
| 79 | |
|---|
| 80 | print "\n\nDUMP MULTIPLE DOCS TO A FILE:\n" |
|---|
| 81 | file = open('DEMO_OUTPUT.TXT', 'w') |
|---|
| 82 | yaml.dumpToFile(file, |
|---|
| 83 | {'source': "Demo output from demo.py"}, |
|---|
| 84 | [ |
|---|
| 85 | 'apple', |
|---|
| 86 | 'banana', |
|---|
| 87 | ], |
|---|
| 88 | 'Third document' |
|---|
| 89 | ) |
|---|
| 90 | file.close() |
|---|
| 91 | |
|---|
| 92 | |
|---|