[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