<div dir="ltr"><div dir="auto">Thanks for raising this point, and for sharing your solutions.<div dir="auto"><br></div><div dir="auto">Keeping a project aligned to GeoNode (and the GeoNode-project itself) can be really troublesome. We also don't have a one-fits-all solution.</div><div dir="auto"><br></div><div dir="auto">The idea of the create_env.py command was to start creating a set of utilities to help with the creation and the upgrade of downstream projects. It was only the first step, and the PR from Alessio improves it.<br></div><div dir="auto">The next step wanted to be a utility that could track changes and guide the user in the procedure of updating an existing project, starting from the .env file which is the principal target of most of the changes.</div><div>A very rough idea would be:</div><div><br></div><div><ol><li>when a new project is created the commit for the geonode-project template is written to the .env file by the create_env.py utility</li><li>the upgrade utility retrieves the commit </li><li>it compares the .env.sample commit with the target branch to which you want to upgrade the project</li><li>it tries to extend the current .env file with any new env var, and marks them with a specific comment (similar to the fuzzy translation strings)</li><li>any var in the existing .env file that doesn't match the new .env.sample will be marked with a specific comment</li></ol><div>The same utility could generate the list of changed files between the original commit and the target branch.</div></div><div><br></div><div dir="auto">I'm aware that this doesn't solve all the issues, but it would help a lot. What do you think?</div><div>Hey, I'm not saying that we will do it! :) That would be a nice feature, but at the moment we don't have plans for it.</div><div><br></div><div>Giovanni</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il mar 1 ago 2023, 13:07 Florian Hoedt <<a href="mailto:florian.hoedt@thuenen.de" target="_blank">florian.hoedt@thuenen.de</a>> ha scritto:<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><div style="font-family:arial,helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><div>Thank you two for the insights,<br></div><div>I think we should take some time and funding to enable a better development experience. Other projects make it easier to add to the core. Most of the time those other projects are not as complex as GeoNode though. Maybe we as developer community could articulate and define the most urgent issues and we (Thünen-Institute) will try to get funding to smoothen the path?<br></div><div><br></div><div>Yours,<br></div><div>Florian<br></div><div>-- <br>MSc Florian Hoedt<br>Head Research Data Management | OpenData Representative<br>Thünen Institute, Centre for Information Management<br>Bundesallee 44<br>38116 Braunschweig<br><br>Tel:   +49 531 596-1428 | Mobile: +49 162 92 50 275<br>Fax:   +49 531 596-1499<br>Mail:  <a href="mailto:florian.hoedt@thuenen.de" rel="noreferrer" target="_blank">florian.hoedt@thuenen.de</a><br>Web:   <a href="http://www.thuenen.de" rel="noreferrer" target="_blank">www.thuenen.de</a><br><br>The Johann Heinrich von Thünen Institute, Federal Research Institute for Rural Areas, Forestry and Fisheries – Thünen Institute in brief – consists of 15 specialized institutes with socioeconomic, ecological and technological expertise. The Thünen Institute conducts research and policy advice related to rural areas, agriculture, forests and fisheries.</div><div><br></div><hr id="m_-590653612811700052m_7064359486983274717zwchr"><div><b>Von: </b>"Toni Schönbuchner" <<a href="mailto:toni.schoenbuchner@csgis.de" rel="noreferrer" target="_blank">toni.schoenbuchner@csgis.de</a>><br><b>An: </b>"Henning Bredel" <<a href="mailto:h.bredel@52north.org" rel="noreferrer" target="_blank">h.bredel@52north.org</a>><br><b>CC: </b>"geonode-devel" <<a href="mailto:geonode-devel@lists.osgeo.org" rel="noreferrer" target="_blank">geonode-devel@lists.osgeo.org</a>><br><b>Gesendet: </b>Dienstag, 1. August 2023 11:55:41<br><b>Betreff: </b>Re: [GeoNode-devel] Practices on maintaining a geonode project, PR: "Align to GeoNode master 4.2.0"<br></div><div><br></div><div>H Henning,<div><br></div><div><br><div><blockquote><div><div>Interesting approach. It seems even the blog you mention agrees with you when  saying "[...] so we had to help all developers apply the filter. That is one downside: it’s totally quiet, so failures aren’t readily surfaced." :-)<br></div></div></blockquote><div><br></div><div>Exactly. It somehow always felt wrong.</div><div>Especially Devs not familiar with Geonode had a hard time understanding what </div><div>is going on ;))</div><br><blockquote><div><div>However, I still assume changes in your working copy<br></div></div></blockquote><div><br></div><div>Correct, I also have to make some small tweaks in my working copy.</div><div>But trying to keep them as simple as possible:</div><br><blockquote><div><div>- INSTALLED_APPS </div></div></blockquote><div><br></div><div>I did not touch settings.py except having the following in the end:</div><div><br></div><div><div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:menlo;color:rgb(64,11,217)"><span># custom settings</span></div><div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:menlo;color:rgb(193,101,28)"><span>try</span><span style="color:rgb(0,0,0)">:</span></div><div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:menlo"><span>    </span><span style="color:rgb(200,20,201)">from</span><span> .my_custom_settings </span><span style="color:rgb(200,20,201)">import</span><span> *</span></div><div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:menlo;color:rgb(47,180,29)"><span style="color:rgb(193,101,28)">except</span><span style="color:rgb(0,0,0)"> </span><span>ImportError</span><span style="color:rgb(0,0,0)">:</span></div><div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:menlo"><span>    </span><span style="color:rgb(193,101,28)">pass</span></div></div><div><br></div><div>Doing so I can extend and override what ever I need like INSTALLED_APPS, but keep the rest of settings untouched.</div><div>Of course only things get into my_custom_settings that cannot be configured via .env anyways</div><div><br></div><div><br></div><div><blockquote>- docker/-compose files<br></blockquote><div><br></div><div>Similar as with settings I do override certain parts with a custom compose file</div><div><br></div><div>docker-compose -f docker-compose.yml -f docker-compose-custom.yml up -d</div><div><br></div><div><a href="https://docs.docker.com/engine/reference/commandline/compose/#use--f-to-specify-the-name-and-path-of-one-or-more-compose-files" rel="nofollow noopener noreferrer noreferrer" target="_blank">https://docs.docker.com/engine/reference/commandline/compose/#use--f-to-specify-the-name-and-path-of-one-or-more-compose-files</a><br></div><div><br></div><div>Doing so docker-compose.yml can stay as</div><div><br></div><div><br></div></div><blockquote><div><div>or requirements.txt<br></div></div></blockquote><div><br></div><div>Good point! I’ve just changed it and left a comment before my changes.</div><div>But I guess it should also work to mount your requirements into the container</div><div>and override the start command a bit:</div><div><br></div><div>entrypoint: ["/usr/src/geonode/entrypoint.sh", "bash", "-c", "pip install --no-cache-dir -r custom_requirements.txt && uwsgi --ini /usr/src/geonode/uwsgi.ini“]<br><br></div><div>(Untested, and leaving a comment in requirements.txt might be cleaner in that case ;)</div><br><br><blockquote><div><div>These changes can be kept at a minimum and probably in a local branch, of course. Did you also try different approaches with regard to customizing geonode-mapstore-client, or do you prefer programming a completely different UI (probably this depends ;-))?<br></div></div></blockquote><div><br></div><div>To be honest, I have blocked adaptations for clients here as much as possible. Mainly because the reactive part of mapstore2 doesn't make it easy to develop (but that's due to my lack of knowledge).</div><div>Also maintaining a fork is something I like to prevent.</div><div><br></div><div>In some cases I have developed small custom viewers that only have geonode as a data provider.</div><div>In one particular case, I decided to listen for WFS requests, process them as needed and create some DOM elements. This is of course a very messy solution as the virtual DOM should not be touched. But in this case it could be accepted and I avoided a custom build ;) To get the idea.</div><div><br></div><div><br></div><div><div>  // Catch WFS request</div><div>  var elements = [];</div><div>    (function() {</div><div>    var origOpen = XMLHttpRequest.prototype.open;</div><div>    XMLHttpRequest.prototype.open = function() {</div><div>        this.addEventListener('load', function() {</div><div>            if (this.responseText.includes(’something')){</div><div>                window.items = JSON.parse(this.responseText);</div><div>                do_something()</div><div>            }</div><div><br></div><div>        });</div><div>        origOpen.apply(this, arguments);</div><div>    };</div><div>  })();</div></div><div><br></div><div><br></div><div>…</div><div><br></div><div><div>// Create the button that opens the compare tool</div><div>waitForElm("#drawer-menu-button").then((elm) => {</div><div>  console.log(„mapstore is ready“);</div><div>  // I guess there is a mapstore event we can listen on ...</div><div>  drawer = document.getElementById("mapstore-drawermenu");</div><div>  var i = document.createElement("i");</div><div>  i.classList.add("bi", "bi-arrow-left-right", "switch_icon");</div><div><br></div><div>  var _button = document.createElement("button");</div><div>  _button.setAttribute("id", "compare_button");</div><div>  _button.setAttribute("data-bs-toggle", "offcanvas");</div><div>  _button.setAttribute("data-bs-target", "#offcanvasRight");</div><div>  _button.setAttribute("aria-controls", "offcanvasRight");</div><div><br></div><div>  _button.appendChild(i);</div><div>  _button.classList.add(</div><div>    "square-button",</div><div>    "ms-drawer-menu-button",</div><div>    "btn",</div><div>    "btn-primary"</div><div>  );</div><div>  drawer.appendChild(_button);</div><div>});</div><div><br></div><div>and so on. Again this is of course a no no ;)</div></div></div><br></div><div>Hope this helps,</div><div><br></div><div>Cheers </div><div><br></div><div>Toni</div><div><br></div><br>_______________________________________________<br>geonode-devel mailing list<br><a href="mailto:geonode-devel@lists.osgeo.org" rel="noreferrer" target="_blank">geonode-devel@lists.osgeo.org</a><br><a href="https://lists.osgeo.org/mailman/listinfo/geonode-devel" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/geonode-devel</a><br></div></div></div>_______________________________________________<br>
geonode-devel mailing list<br>
<a href="mailto:geonode-devel@lists.osgeo.org" rel="noreferrer" target="_blank">geonode-devel@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/geonode-devel" rel="noreferrer noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/geonode-devel</a><br>
</blockquote></div>