All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org>
To: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
Cc: Devicetree Compiler
	<devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Benjamin Bimmermann <b.bimmermann-LWAfsSFWpa4@public.gmane.org>,
	Ulrich Langenbach
	<ulrich.langenbach-srmvecZYGfHobmly5n/iKBvVK+yQ3ZXh@public.gmane.org>
Subject: Re: [PATCH v11 0/5] Introduce Python bindings for libfdt
Date: Tue, 21 Mar 2017 16:35:31 +1100	[thread overview]
Message-ID: <20170321053531.GA19078@umbus.fritz.box> (raw)
In-Reply-To: <20170317221434.15390-1-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 6219 bytes --]

On Fri, Mar 17, 2017 at 04:14:29PM -0600, Simon Glass wrote:
> At present libfdt consists of only a C implementation. Many scripts are
> written using Python so it useful to have Python bindings for libfdt.
> Apparently this has never been attempted before, or if so I cannot find a
> reference.
> 
> This series starts the process of adding this support, with just a
> bare-bones set of methods.
> 
> The v11 series provides binding that can be used like this:
> 
>     fdt = libfdt.Fdt(open(fname).read())
>     node = fdt.path_offset('/subnode@1')
>     print fdt.get_prop(node, 'compatible')
>     subnode = fdt.first_subnode(node, quiet=[libfdt.NOTFOUND])
>     while subnode > 0:
>         print fdt.get_name(subnode)
>         subnode = fdt.next_subnode(subnode, quiet=[libfdt.NOTFOUND])
> 
> This version includes a simple class for properties.

Applied to master.  I made a small change in the last patch, so that
the error message when the python packages aren't installed is less
scary looking.

> 
> Changes in v11:
> - Show test output always
> 
> Changes in v10:
> - Show test output when there are failures
> 
> Changes in v9:
> - Drop PYLIBFDT_CLEANFILES
> - Add _libfdt.so to PYLIBFDT_cleanfiles
> - Support 'make clean' properly with pylibfdt
> - Move run_tests.sh updates to this patch
> - Only run the pylibfdt tests automatically if we can build pylibfdt
> - Update commit message to reflect swig/Python.h detection
> - Update Makefile shell command to support dash shell
> 
> Changes in v8:
> - Fix up setup.py name and author
> - Move QUITE_ALL into a single assignment
> - Drop fdt32_to_cpu()
> - Adjust fdt_get_property_by_offset() to rely on the typemap more
> - Move pylibfdt_copy_value(() functionality into a typemap
> - Add an fdt parameter to the [const] void * typemaps
> - Create an output typemap for struct fdt_property *
> - Drop the arg4 TODO comment
> - Avoid using hard-coded offsets (ROOT_PROPS)
> - Use types.ModuleType instead of type(str)
> - Compare exception number instead of using a regex
> - Avoid using hard-coded size
> - Drop testEndian()
> - Move the changes to run_tests.sh to a later commit
> - Add comments to testPropertyOffsetExceptions()
> - Drop all the namelen functions from the Python bindings
> - Only build pylibfdt if we have swig and Python.h
> 
> Changes in v7:
> - Add QUIET_ALL to silence all exceptions
> - Add a test for QUIET_ALL
> 
> Changes in v6:
> - Use a tuple instead of list for the default quiet parameter
> - Use a tuple instead of list for QUIET_NOTFOUND
> - Use 'list' instead of 'tuple' for the comment in check_err_null()
> - Return a bytearray from getprop()
> - Adjust the Property constructor to accept the name and value
> - Use uint8_t for pylibfdt_copy_value
> - Adjust tests to avoid checking a hard-coded offset
> - Use 0 instead of self.fdt.path_offset('/')
> - Adjust the totalsize() test to compare against the file size
> - Adjust test result processing to avoid using awk
> - Update example to print the node value as an integer
> - Update example to print the bytestring as well as the string
> 
> Changes in v5:
> - Use a 'quiet' parameter instead of quiet versions of functions
> - Add a Property object to hold a property's name and value
> - Drop the data() and string() functions which are not needed now
> - Rename pylibfdt_copy_data() tp pylibfdt_copy_value()
> - Change order of libfdt.h inclusion to avoid #ifdef around libfdt macros
> - Drop fdt_offset_ptr() and fdt_getprop_namelen() from the swig interface
> - Use $(SWIG) to call swig from the Makefile
> - Review function comments
> - Adjust tests to match new swig bindings
> - Use an interactive session to demonstrate pylibfdt
> - Mention that more work remains
> - Update commit message
> - Drop #ifdef around fdt_get_header() macros
> - Fix 'possible' typo
> 
> Changes in v4:
> - Make the library less pythonic to avoid a shaky illusion
> - Drop classes for Node and Prop, along with associated methods
> - Include libfdt.h instead of repeating it
> - Add support for fdt_getprop()
> - Bring in all libfdt functions (but Python support is missing for many)
> - Add full comments for Python methods
> - Drop tests that are no-longer applicable
> - Add a get for getprop()
> - Add new patch to adjust libfdt.h to work with swig
> 
> Changes in v3:
> - Make the library more pythonic
> - Add classes for Node and Prop along with methods
> - Add an exception class
> - Use Python to generate exeptions instead of SWIG
> - Add some more tests
> 
> Changes in v2:
> - Add exceptions when functions return an error
> - Correct Python naming to following PEP8
> - Use a class to encapsulate the various methods
> - Include fdt.h instead of redefining struct fdt_property
> - Use bytearray to avoid the SWIG warning 454
> - Add comments
> - Update tests for new pylibfdt
> - Add a few more tests to increase coverage
> - Add details on how to obtain full help and code coverage
> 
> Simon Glass (5):
>   Add an initial Python library for libfdt
>   Add tests for pylibfdt
>   Mention pylibfdt in the documentation
>   Adjust libfdt.h to work with swig
>   Build pylibfdt as part of the normal build process
> 
>  Makefile                   |  35 +++-
>  README                     |  47 +++++
>  libfdt/libfdt.h            |  21 ++-
>  pylibfdt/.gitignore        |   3 +
>  pylibfdt/Makefile.pylibfdt |  17 ++
>  pylibfdt/libfdt.swig       | 433 +++++++++++++++++++++++++++++++++++++++++++++
>  pylibfdt/setup.py          |  34 ++++
>  tests/pylibfdt_tests.py    | 288 ++++++++++++++++++++++++++++++
>  tests/run_tests.sh         |  28 +++
>  9 files changed, 903 insertions(+), 3 deletions(-)
>  create mode 100644 pylibfdt/.gitignore
>  create mode 100644 pylibfdt/Makefile.pylibfdt
>  create mode 100644 pylibfdt/libfdt.swig
>  create mode 100644 pylibfdt/setup.py
>  create mode 100644 tests/pylibfdt_tests.py
> 

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  parent reply	other threads:[~2017-03-21  5:35 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-17 22:14 [PATCH v11 0/5] Introduce Python bindings for libfdt Simon Glass
     [not found] ` <20170317221434.15390-1-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2017-03-17 22:14   ` [PATCH v11 1/5] Add an initial Python library " Simon Glass
2017-03-17 22:14   ` [PATCH v11 2/5] Add tests for pylibfdt Simon Glass
2017-03-17 22:14   ` [PATCH v11 3/5] Mention pylibfdt in the documentation Simon Glass
2017-03-17 22:14   ` [PATCH v11 4/5] Adjust libfdt.h to work with swig Simon Glass
2017-03-17 22:14   ` [PATCH v11 5/5] Build pylibfdt as part of the normal build process Simon Glass
2017-03-21  5:35   ` David Gibson [this message]
     [not found]     ` <20170321053531.GA19078-K0bRW+63XPQe6aEkudXLsA@public.gmane.org>
2017-03-21 16:02       ` [PATCH v11 0/5] Introduce Python bindings for libfdt Simon Glass
     [not found]         ` <CAPnjgZ0WkRXRqQBx0W6QhMqROZtC=RTebdA0TBrEPidtxRV17A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-03-21 20:51           ` Simon Glass
2017-03-22  5:35           ` David Gibson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170321053531.GA19078@umbus.fritz.box \
    --to=david-xt8fgy+axnrb3ne2bgzf6laj5h9x9tb+@public.gmane.org \
    --cc=b.bimmermann-LWAfsSFWpa4@public.gmane.org \
    --cc=devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
    --cc=ulrich.langenbach-srmvecZYGfHobmly5n/iKBvVK+yQ3ZXh@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.