[C++-sig] automatic conversion of boost date_time to Python date

Luca Sbardella luca.sbardella at gmail.com
Tue Apr 10 23:54:12 CEST 2007


sorry missing

typedef  boost::gregorian::date  qm_date

in the code




On 10/04/07, Luca Sbardella <luca.sbardella at gmail.com> wrote:
>
> Thanks Roman, it was useful, however I'm getting some specific problem in
> the implementation (I cannot debug the code since I cannot load the
> PyDateTime static library).  the Python documentation says I should declare
> PyDateTime_IMPORT but this does not compile!!!!
> Still trying at the moment but this is what I have done, any comment would
> be welcome.
> Best
> Luca
>
>
>     template<class T, class TfromPy>
>     struct ObjFromPy
>     {
>       ObjFromPy()
>       {
>
> boost::python::converter::registry::push_back(&TfromPy::convertible,
>
> &TfromPy::construct,
>
>               boost::python::type_id<T>());
>       }
>     };
>     //
>     template<class T, class TtoPy, class TfromPy>
>     struct register_python_conversion
>     {
>       register_python_conversion()
>       {
>         boost::python::to_python_converter<T,TtoPy>();
>         ObjFromPy<T,TfromPy>();
>       }
>     };
>     //
>     // IMPLEMENTATION
>     //
>     struct DateToPy
>     {
>       static PyObject* convert(const qm_date& dte)
>       {
>         return PyDate_FromDate( dte.year(), dte.month(), dte.day());
>       }
>     };
>     //
>     struct DateFromPy
>     {
>       //
>       static void* convertible(PyObject* obj_ptr)
>       {
>         if(!PyDate_Check(obj_ptr)) return 0;
>         return obj_ptr;
>       }
>       //
>       static void construct(PyObject* obj_ptr,
>
> boost::python::converter::rvalue_from_python_stage1_data* data)
>       {
>         int y = PyDateTime_GET_YEAR(obj_ptr);
>         int m = PyDateTime_GET_MONTH(obj_ptr);
>         int d = PyDateTime_GET_DAY(obj_ptr);
>         qm_date* dte = new qm_date(y,m,d);
>         data->convertible = (void*)dte;
>       }
>     };
>     //
>     //
>     typedef register_python_conversion<qm_date, DateToPy, DateFromPy>
> date_python_conversion;
>     //
>
> On 10/04/07, Roman Yakovenko <roman.yakovenko at gmail.com> wrote:
>
> > On 4/10/07, Quant Mind <quant.mind at gmail.com > wrote:
> >
> > > Here is the problem.
> > > I'm using boost date_time library for a calendar C++ application. I
> > > exposed my C++ Calendar class to Python using boost python and everything is
> > > going smoothly.
> > > The class contains several functions which have boost::gregorian::date
> > > as arguments.
> > > Obviously, this class is not know to Python and I would like to
> > > implement a custom converter between boost::gregorian::date and Python
> > > datetime.date.
> > > What would be the correct way to deal with this problem?
> >
> >
> > Let me know if next link helped you: http://language-binding.net/pyplusplus/troubleshooting_guide/automatic_conversion/automatic_conversion.html
> >
> >
> >
> > --
> > Roman Yakovenko
> > C++ Python language binding
> > http://www.language-binding.net/
> > _______________________________________________
> > C++-sig mailing list
> > C++-sig at python.org
> > http://mail.python.org/mailman/listinfo/c++-sig
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20070410/abd43852/attachment.htm>


More information about the Cplusplus-sig mailing list