[ckan-dev] All methods and functions in CKAN need docstrings with :raises:

Dominik Moritz dominik.moritz at okfn.org
Wed Aug 14 10:18:28 UTC 2013


I think we should do this exactly as Sean wrote it down and add this to the python coding standards documentation [1].

In addition to what is written down we have to make sure that all exceptions that can be raised from a function are also in the toolkit [2]. At the moment these are:
* ObjectNotFound
* NotAuthorized
* UnknownConverter
* UnknownValidator
* ValidationError
* CkanVersionException

[1] http://docs.ckan.org/en/latest/python-coding-standards.html
[2] https://github.com/okfn/ckan/blob/master/ckan/plugins/toolkit.py

On 14 Aug 2013, at 11:48, Sean Hammond <sean.hammond at okfn.org> wrote:

> Ok, I think you guys convinced my that adding :raises: to all docstrings
> is a bad idea, as Dominik pointed out we'll never keep the docstrings in
> sync so they won't be a reliable indicator anyway.
> 
> Talking to Dominik about this yesterday, what about this as an
> alternative:
> 
> 1. Functions exported for plugins, templates etc to use should have
> docstrings with :raises: for every exception, because template and
> plugin developers shouldn't have to read the CKAN core source code, but
> internal CKAN functions shouldn't have these docstrings.
> 
> 2. Whether it's an exported function or one only used internally, it
> should only be raising exceptions from a small set of exception types
> defined somewhere near the function.
> 
> For example logic/converters.py might have a set of one or more
> exceptions defined at the top of the file, e.g.
> ckan.logic.converters.Invalid, and all the converter functions are only
> allowed to raise those types of exceptions. (Or maybe the exceptions are
> defined in logic/__init__.py and shared between all modules in logic,
> but they shouldn't be too far from the code.)
> 
> If any function raises an exception type from outside of its "set"
> (which currently some of the functions for plugins and templates do)
> that should be considered a bug and refactored, rather than documented
> in docstrings.
> 
> 3. To make up for not having docstrings with :raises: everywhere, we say
> that a dev should be able to scan the source code of a function for the
> keyword `raise` and see all the exceptions that a function raises. *You
> shouldn't have to look at the code of functions that a function calls,
> to find out about exceptions that the first function might raise*.
> 
> This means that when you're writing a function and you call some other
> function, you need to check whether that other function raises any
> exceptions and catch them, then either:
> 
> - handle the exception, or
> 
> - if it's an exception from the set of exception types your functiopn
>  can raise then you can simply re-raise it (in which case the only
>  point of catching and re-raising it is to point out to anyone reading
>  your function's source code that it might raise this)
> 
> - or if it's not one of the exception types you're allowed to raise, wrap it in
>  an exception you can raise and raise that
> 
> What do people think of this?
> 
> _______________________________________________
> ckan-dev mailing list
> ckan-dev at lists.okfn.org
> http://lists.okfn.org/mailman/listinfo/ckan-dev
> Unsubscribe: http://lists.okfn.org/mailman/options/ckan-dev

Dominik Moritz
CKAN developer  |  skype: d.moritz  |  @doobly_doo
The Open Knowledge Foundation
Empowering through Open Knowledge
http://okfn.org/  |  @okfn  |  http://ckan.org  |  @CKANproject

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 495 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.okfn.org/pipermail/ckan-dev/attachments/20130814/252d2329/attachment-0001.sig>


More information about the ckan-dev mailing list