@@ -3054,18 +3054,27 @@ impl PyObjectProtocol for CreatedByClause {
3054
3054
/// CreationDateClause(date)
3055
3055
/// --
3056
3056
///
3057
- /// A clause declaring the date and time a typedef was created.
3057
+ /// A clause declaring the date ( and optionally time) a typedef was created.
3058
3058
///
3059
3059
/// Arguments:
3060
- /// date (~datetime.datetime or datetime.date): the date, or date and
3061
- /// time, when this typedef was created.
3060
+ /// date (`datetime.date`): The date this typedef was created. If a
3061
+ /// `datetime.datime` object is given, then the serialized value
3062
+ /// will also include the serialized time.
3062
3063
///
3063
3064
/// Warning:
3064
3065
/// The timezone of the `datetime` will only be extracted down to the
3065
3066
/// minutes, seconds and smaller durations will be ignored. It is advised
3066
3067
/// to use `datetime.timezone.utc` whenever possible to preserve the
3067
3068
/// date and time properly.
3068
3069
///
3070
+ /// Example:
3071
+ /// >>> d1 = datetime.date(2021, 1, 23)
3072
+ /// >>> print(fastobo.typedef.CreationDateClause(d1))
3073
+ /// creation_date: 2021-01-23
3074
+ /// >>> d2 = datetime.datetime(2021, 1, 23, tzinfo=datetime.timezone.utc)
3075
+ /// >>> print(fastobo.typedef.CreationDateClause(d2))
3076
+ /// creation_date: 2021-01-23T00:00:00Z
3077
+ ///
3069
3078
#[ pyclass( extends=BaseTypedefClause , module="fastobo.typedef" ) ]
3070
3079
#[ derive( Clone , ClonePy , Debug , FinalClass ) ]
3071
3080
#[ base( BaseTypedefClause ) ]
@@ -3102,16 +3111,16 @@ impl CreationDateClause {
3102
3111
#[ new]
3103
3112
fn __init__ ( datetime : & PyAny ) -> PyResult < PyClassInitializer < Self > > {
3104
3113
let py = datetime. py ( ) ;
3105
- if let Ok ( d ) = datetime. cast_as :: < PyDate > ( ) {
3106
- let date = date_to_isodate ( py, d ) . map ( From :: from) ?;
3114
+ if let Ok ( dt ) = datetime. cast_as :: < PyDateTime > ( ) {
3115
+ let date = datetime_to_isodatetime ( py, dt ) . map ( From :: from) ?;
3107
3116
Ok ( CreationDateClause :: new ( date) . into ( ) )
3108
3117
} else {
3109
- match datetime. cast_as :: < PyDateTime > ( ) {
3118
+ match datetime. cast_as :: < PyDate > ( ) {
3110
3119
Err ( e) => {
3111
3120
raise ! ( py, PyTypeError ( "expected datetime.date or datetime.datetime" ) from PyErr :: from( e) )
3112
3121
}
3113
- Ok ( dt ) => {
3114
- let date = datetime_to_isodatetime ( py, dt ) . map ( From :: from) ?;
3122
+ Ok ( d ) => {
3123
+ let date = date_to_isodate ( py, d ) . map ( From :: from) ?;
3115
3124
Ok ( CreationDateClause :: new ( date) . into ( ) )
3116
3125
}
3117
3126
}
@@ -3129,17 +3138,17 @@ impl CreationDateClause {
3129
3138
}
3130
3139
3131
3140
#[ setter]
3132
- fn set_date ( & mut self , datetime : & PyDateTime ) -> PyResult < ( ) > {
3141
+ fn set_date ( & mut self , datetime : & PyAny ) -> PyResult < ( ) > {
3133
3142
let py = datetime. py ( ) ;
3134
- if let Ok ( d ) = datetime. cast_as :: < PyDate > ( ) {
3135
- self . date = From :: from ( date_to_isodate ( py, d ) ?) ;
3143
+ if let Ok ( dt ) = datetime. cast_as :: < PyDateTime > ( ) {
3144
+ self . date = From :: from ( datetime_to_isodatetime ( py, dt ) ?) ;
3136
3145
} else {
3137
- match datetime. cast_as :: < PyDateTime > ( ) {
3146
+ match datetime. cast_as :: < PyDate > ( ) {
3138
3147
Err ( e) => {
3139
3148
raise ! ( py, PyTypeError ( "expected datetime.date or datetime.datetime" ) from PyErr :: from( e) )
3140
3149
}
3141
- Ok ( dt ) => {
3142
- self . date = From :: from ( datetime_to_isodatetime ( py, dt ) ?) ;
3150
+ Ok ( d ) => {
3151
+ self . date = From :: from ( date_to_isodate ( py, d ) ?) ;
3143
3152
}
3144
3153
}
3145
3154
}
0 commit comments