[libcamera-devel] [PATCH v10 4/7] Add Python bindings

Kieran Bingham kieran.bingham at ideasonboard.com
Tue May 10 11:37:11 CEST 2022


Quoting Tomi Valkeinen (2022-05-10 10:22:57)
> On 10/05/2022 12:08, Kieran Bingham wrote:
> > Quoting Tomi Valkeinen (2022-05-10 07:04:58)
> >> On 09/05/2022 23:56, Kieran Bingham wrote:
> >>
> >>> I'd like to add the following here while / when merging:
> >>>
> >>> ================================================================================
> >>>
> >>> diff --git a/src/py/libcamera/pymain.cpp b/src/py/libcamera/pymain.cpp
> >>> index c983da3a94f1..09646faacd5a 100644
> >>> --- a/src/py/libcamera/pymain.cpp
> >>> +++ b/src/py/libcamera/pymain.cpp
> >>> @@ -17,6 +17,7 @@
> >>>    #include <unistd.h>
> >>>
> >>>    #include <libcamera/base/log.h>
> >>> +
> >>>    #include <libcamera/libcamera.h>
> >>>
> >>>    #include <pybind11/functional.h>
> >>> @@ -138,6 +139,14 @@ static void handleRequestCompleted(Request *req)
> >>>    void init_pyenums(py::module &m);
> >>>    void init_pyenums_generated(py::module &m);
> >>>
> >>> +/*
> >>> + * The python module is not expected to be directly compatible with our usual
> >>> + * code style, and clang-format can't easily handle the specific styles used
> >>> + * with chaining here. Disable clang-format for the remainder of this module.
> >>> + */
> >>> +
> >>> +// clang-format off
> >>> +
> >>>    PYBIND11_MODULE(_libcamera, m)
> >>>    {
> >>>           init_pyenums(m);
> >>> ================================================================================
> >>>
> >>> Any objections, or modifications to the comment?
> >>
> >> Looks good to me.
> >>
> >> I'd really like to use clang-format, though. It almost looks to me that
> >> clang-format bugs here. E.g. first clang-format formats to this:
> >>
> >>          pyCamera
> >>                  .def(
> >>                          "start", [](Camera &self, py::dict controls) {
> >>                                  return 0;
> >>                          },
> >>                          py::arg("controls") = py::dict());
> >>
> >> I have no idea why it wants to add the line feed after .def. But I
> >> remove the py::arg, and format:
> >>
> >>          pyCamera
> >>                  .def(
> >>                          "start", [](Camera &self, py::dict controls) {
> >>                                  return 0;
> >>                          });
> >>
> >> So no change. Then I first manually remove the line feed, i.e.
> >> .def("start", ... and then format:
> >>
> >>          pyCamera
> >>                  .def("start", [](Camera &self, py::dict controls) {
> >>                          return 0;
> >>                  });
> >>
> >> Ta-da! Now it's fine. But now, adding back the py::arg, and format, it
> >> goes back to the first case.
> >>
> >> I've been fighting with clang-format before, and I have never managed it
> >> to format the code quite properly. Looking at the formatted pymain.cpp,
> >> I see two issues: the first is the extra line split like above, the
> >> second is that it likes to create very long lines for lambdas. Neither
> >> of those look like intended usual libcamera coding style, but rather
> >> bugs or misconfigured rules.
> > 
> > If you can find a way to satiate clang-format then that's probably
> > preferred too - but I don't want to break the way you've styled these
> > indents, and I think they make sense, given the modelling used by the
> > pybind.
> 
> pybind11 project has its own .clang-format file, but even that formats 
> the bindings badly. I just can't see why clang-format wants to do this:
> 
>       .def(
>           "add_buffer",
>           [](Request &self, const Stream *stream, FrameBuffer *buffer) {
>               return self.addBuffer(stream, buffer);
>           },
>           py::keep_alive<1, 3>()) /* Request keeps Framebuffer alive */
> 
> None of the lines are close to the 80 char limit, but still clang-format 
> insist on line break there.
> 
> > Would you prefer me to leave the clang-format on and we can ignore the
> > checkstyle warnings here ? Or perhaps try to improve in the future?
> > 
> > Or we could also try to improve in the future and then re-enable
> > clang-format?
> 
> Well, as I said, I'd definitely want to use clang-format, but until 
> something happens which makes it possible, I think disabling 
> clang-format is fine.
> 
> However, it does seem to have a practical issue. I still use 
> clang-format to manually format pieces of the code, and then manually 
> correct it if clang-format gets it wrong. With "clang-format off" that 
> manual formatting is not possible anymore, as clang-format does not 
> format anything after "clang-format off".
> 
> So I'd prefer to leave the "clang-format off" out for now and ignore the 
> warnings.

Ok - I can go with that. But the line fix on the headers probably goes
in still ;-)

I think that's enough for me to keep going with the integrations.

--
Kieran


> 
>   Tomi


More information about the libcamera-devel mailing list