<div dir="ltr"><div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 25, 2015 at 3:41 AM, Moritz Lennert <span dir="ltr"><<a href="mailto:mlennert@club.worldonline.be" target="_blank">mlennert@club.worldonline.be</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="">On 24/06/15 15:09, Vaclav Petras wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
It seems like one. I think it might help, at least help to debug, if you<br>
replace "import grass.script as grass" by "import grass.script as<br>
gscript" and "grass." by "gscript.". I think this change should be done<br>
anyway in all source code.<br>
</blockquote>
<br></span>
Could you explain your reasoning behind this ? IMHO, it should not make any difference whether you use grass or gscript as the alias.</blockquote></div><br></div><div class="gmail_extra">Sure. First of all, this just look strange by default I believe:<br></div><br>import aaa.bbb as aaa<br><br></div>Why not<br><br>import aaa.bbb<br><br></div>or often appropriate<br><div><div><br>import aaa.bbb as bbb<br><br></div><div>or (my favorite)<br><br>import aaa.bbb as ab<br></div><div><br></div><div>or simple<br><br></div><div>import aaa<br></div><div><br>?<br><br></div><div>Alias shouldn't create confusion which I think it creates.<br><br></div>After<br><br>import grass.script as grass<br><br>which of the following will work?<br><br>from grass import run_commad<br>from grass import pygrass<br><br></div>The second line will work although in the following case it is the first line.<br><br>grass.run_command<br>grass.pygrass<br><br></div>Sure, this is just how Python interprets the import statements, so if you know it, you are fine, but why should we make reading of the source code harder then necessary?<br><div><br></div><div>The current situation leads to cases like:<br></div><div><br>>>> import grass.script as grass<br>>>> grass.run_command<br><function run_command at 0x7f185ed61500><br><div><div><br>Fine.<br><br>>>> grass.script.run_command<br>Traceback (most recent call last):<br> File "<stdin>", line 1, in <module><br>AttributeError: 'module' object has no attribute 'script'<br><br>OK. We haven't imported grass.script in the proper way, so let's do it.<br><br>>>> import grass.script<br>>>> grass.script.run_command<br><function run_command at 0x7f185ed61500><br><br>Works.<br><br>>>> grass.run_command        <br>Traceback (most recent call last):<br> File "<stdin>", line 1, in <module><br>AttributeError: 'module' object has no attribute 'run_command'<br><br>Does not work anymore.<div class="gmail_extra"><br></div><div class="gmail_extra">I think that broadly used<br><br>import grass.script as grass<br><br></div><div class="gmail_extra">is just a legacy from the first version of Python API where "grass.script" was the only package and thus it was just `grass`. Then new (sub-)packages were introduced, probably "grass.lib" which forced the former `grass` to be renamed/moved to `grass.script`. To avoid changing all calls of functions from `grass.run_command` to something else, `grass.script` was imported with alias `grass`. This then spread into new and user code because the code is (or hopefully was) the only documentation. The unfortunate part is that this was some very first version of the API which was never released as stable (official introduction of Python API is 7.0.0, it was just experimental and internal in 6.4) but it influenced the common practice which I think is not the best practice. At least, this is how I understand it.<br><br></div><div class="gmail_extra">I don't see a reason why to keep it when there is a better practice available. We should especially change it in GUI and parser's --script. I believe none of them are change of the API, so it can be done anytime. The code itself should be changed too, we are doing a lot of other non-crucial changes anyway. The benefit is better code as an example for users and easier maintenance because it is just more clear.<br><br></div><div class="gmail_extra">Well, that's what I think.<br><br></div><div class="gmail_extra">Vaclav<br></div></div></div></div></div>