<div dir="ltr">Hi Idan,<div><br></div><div>The wrappers are sort of built into Python already. If you declare entry points for the osgeo.gdal package (see <a href="https://packaging.python.org/specifications/entry-points/">https://packaging.python.org/specifications/entry-points/</a>) then setuptools will write the wrappers for you. Here's one as an example. It's defined at <a href="https://github.com/mapbox/rasterio/blob/master/setup.py#L416-L417">https://github.com/mapbox/rasterio/blob/master/setup.py#L416-L417</a>.</div><div><br><div>$ cat ~/.local/pipx/venvs/rasterio/bin/rio<br>#!/home/sean/.local/pipx/venvs/rasterio/bin/python<br># -*- coding: utf-8 -*-<br>import re<br>import sys<br>from rasterio.rio.main import main_group<br>if __name__ == '__main__':<br>    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])<br>    sys.exit(main_group())<br></div></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Oct 7, 2020 at 6:38 AM Idan Miara <<a href="mailto:idan@miara.com">idan@miara.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi all,</div><div><br></div><div>I would like to get your opinion about making the code in the python scripts more reusable so they can be imported as modules.</div><div><br></div><div>I'm working on improving gdal_calc.py:</div><div><a href="https://github.com/OSGeo/gdal/pull/3016" target="_blank">https://github.com/OSGeo/gdal/pull/3016</a></div><div>Eventually I would need to import it as a module, since it's not in a package it's not possible without copying it into a package.  <br></div><div><br></div><div>From a recent discussion with <a class="gmail_plusreply" id="gmail-m_7132213249161661566plusReplyChip-0" href="mailto:even.rouault@spatialys.com" target="_blank">@Even Rouault</a> :</div><div><a href="https://github.com/OSGeo/gdal/pull/3016#issuecomment-704563723" target="_blank">https://github.com/OSGeo/gdal/pull/3016#issuecomment-704563723</a><br></div><div><span style="color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">The thing is that the scripts in swig/python/scripts are typically installed in /usr/bin so they must be standalone, or use the content of the "osgeo" module where the bindings are installed. If you wanted to use helper methods/scripts, I guess they should go in the "osgeo" module as well.</span>  <br></div><div><br></div><div><span style="color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">We might still need tiny wrapper scripts in swig/python/scripts</span> for maintaining backwards compatibility.</div><div><br></div><div>So I thought a good approach would be making a main function for each script (as many already do have), For most scripts that was fairly straightforward*:</div><div><a href="https://github.com/OSGeo/gdal/compare/master...talos-gis:python_scripts_organize" target="_blank">https://github.com/OSGeo/gdal/compare/master...talos-gis:python_scripts_organize</a><br></div><div></div><div><br></div><div>* for gdal_retile.py, gdal_merge.py I needed also to replace all the global variables with local variables so it would be easier to reuse these functions (apparently I broke some things in 

gdal_retile but I'll fix that).</div><div><br></div><div>Then I made the tiny wrappers automatically using an auxiliary script.</div><div><a href="https://github.com/OSGeo/gdal/compare/master...talos-gis:python_scripts" target="_blank">https://github.com/OSGeo/gdal/compare/master...talos-gis:python_scripts</a><br></div><div>So essentially, each wrapper would be like:</div><div><br></div><div>from osgeo.gdal import deprecation_warn<br>deprecation_warn('gdal_calc')<br>from osgeo.gdal_calc import *<br>if __name__ == '__main__':<br>    sys.exit(main(sys.argv))<br></div><div><br></div><div>What do you think?</div><div><br></div><div>Idan</div><div><br></div></div>
_______________________________________________<br>
gdal-dev mailing list<br>
<a href="mailto:gdal-dev@lists.osgeo.org" target="_blank">gdal-dev@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/gdal-dev" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/gdal-dev</a></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">Sean Gillies</div></div>