earl / beanstalkc

A simple beanstalkd client library for Python
Apache License 2.0
457 stars 115 forks source link

Added a small YAML parser, which should be sufficient for most purposes. #51

Open ptjm opened 10 years ago

ptjm commented 10 years ago

If parse_yaml is True and PyYAML is not available, this change fails over to a small built-in parser which handles the syntax returned by beanstalkd. For example:

>>> import beanstalkc
>>> import pprint
>>> bs = beanstalkc.Connection()
>>> pprint(bs.stats())
{'binlog-current-index': 0,
 'binlog-max-size': 10485760,
 ...
 'current-jobs-buried': 0,
 'current-jobs-delayed': 0,
 'current-jobs-ready': 0,
 'current-jobs-reserved': 0,
 ...
 'rusage-stime': '0.008396',
 'rusage-utime': '0.000000',
 ...
 'version': '1.9'}
>>> bs.use('t1')
't1'
>>> bs.watch('t1')
2
>>> bs.using()
't1'
>>> bs.watching()
['default', 't1']
>>> bs.put('a job for t1', priority = 56)
6
>>> j = bs.reserve()
>>> pprint(j.stats())
{'age': 9,
 'buries': 0,
 'delay': 0,
 'file': 0,
 'id': 6,
 'kicks': 0,
 'pri': 56,
 'releases': 0,
 'reserves': 1,
 'state': 'reserved',
 'time-left': 118,
 'timeouts': 0,
 'ttr': 120,
 'tube': 't1'}
>>> j.release()
>>> j = bs.reserve()
>>> pprint(j.stats())
{'age': 68,
 'buries': 0,
 'delay': 0,
 'file': 0,
 'id': 6,
 'kicks': 0,
 'pri': 56,
 'releases': 1,
 'reserves': 2,
 'state': 'reserved',
 'time-left': 115,
 'timeouts': 0,
 'ttr': 120,
 'tube': 't1'}
>>> pprint(bs.stats_tube('t1'))
{'cmd-delete': 1,
 'cmd-pause-tube': 0,
 'current-jobs-buried': 0,
 'current-jobs-delayed': 0,
 'current-jobs-ready': 0,
 'current-jobs-reserved': 1,
 'current-jobs-urgent': 0,
 'current-using': 1,
 'current-waiting': 0,
 'current-watching': 1,
 'name': 't1',
 'pause': 0,
 'pause-time-left': 0,
 'total-jobs': 2}
>>> for i in range(1,bs.stats()['total-jobs']+1):
...  try:
...   bs.delete(i)
...   print i
...  except: pass
... 
6

I believe the parsed result is identical to what PyYAML gives for the same input, with the exception of the rusage and version keys, which this code leaves as strings. This would affect someone graphing rusage, but not most people.