I'd like to be able to create a datetime object with datetime.datetime.now()
PyYAML. It's easy to call some functions:
>>> y = """#YAML
... description: Something
... ts: !!python/object/apply:time.time []"""
>>> yaml.load(y)
{'description': 'Something', 'ts': 1289955567.940973}
>>>
However, I can't seem to figure out how to get a datetime.now()
. I've tried as many permutations with calls to that using the various python yaml tags.
These all fail:
tests = [
'dt: !!python/object:datetime.datetime.now []',
'dt: !!python/object/new:datetime.datetime.now []',
'dt: !!python/object/apply:datetime.datetime.now []',
]
for y in tests:
try:
print yaml.load(y)
except Exception, err:
print '==>', err
YAML is a data serialization format designed for human readability and interaction with scripting languages. PyYAML is a YAML parser and emitter for the Python programming language.
The most used python YAML parser is PyYAML, a library that allows you to load, parse, and write YAML, much like Python's JSON library helps you to work with JSON. This article teaches you how to load, read, and write YAML files with PyYAML.
One of the classes defined in the datetime module is datetime class. We then used now() method to create a datetime object containing the current local date and time.
I think this example achieves what you're looking for:
dt = yaml.load("""dt: !!python/object/apply:apply
- !!python/object/apply:getattr
- !!python/name:datetime.datetime
- now
- []
""")
However, I think it is too far-fetched because the !!python/object
syntax supported by PyYAML is not supposed to call class methods (datetime.datetime.now
is actually like a "static" factory method for datetime objects). As you said, this is simpler (though not what you're looking for):
dt = yaml.load("dt: !!python/object/apply:time.gmtime []")
dt = yaml.load("dt: !!python/object/apply:time.time []")
Another possible work-around would be to create a custom helper function that wraps the call to datetime.datetime.now
so that it is easily serialized with !!python/object/apply
. The cons is that this serialization would not be portable to an environment where this custom function is not found.
Anyway, in my opinion it does not make too much sense to serialize a value that always returns the current datetime (which would actually be the time when the YAML was parsed). PyYAML provides this shortcut for serializing a certain timestamp:
dt = yaml.load("""dt: !!timestamp '2010-11-17 13:12:11'""")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With