One more thing:

in post_layer_save() we are pulling in metadata from GeoServer and GeoNetwork, then saving again? Why not do this in a pre_layer_save hook?

--
David Winslow
OpenGeo - http://opengeo.org/

On 07/09/2010 11:39 AM, David Winslow wrote:
Here are my notes from reviewing this code (I did a partial review yesterday so I only had to review the latest 5 changesets or so and add to my notes.) I've already expressed my architectural concerns, but as discussed in the other thread about this we're going to hold off on refactoring this stuff until we have a better idea of the real-world needs.

I do have some lower-level concerns about the code.

There's some left-overs floating around:
* models.py imports uggettext as _ and later overrides it with "def _(x): return x" * extra gn.login/logout around the main loop in LayerManager.slurp() (side note - it would be nice to avoid logging in/out repeatedly for this; that's tripling the number of HTTP requests we have to make to GeoNetwork in a slurp())
  * the LabelledInput class from forms.py is no longer needed

Layer has a many-to-many relationship with Contacts. I seem to remember discussing using two foreign-key fields to accomplish that, since the schema we got from the World Bank specifies that a metadata document contains exactly one owner and one metadata maintainer. Did I miss something?

Generally, mixing in formatting changes with content changes is a pain for reviewers (this is especially egregious in the various CSW request templates, where a few real changes in a 500-line file were obscured by an indent applied to the entire thing.)

SUPPLEMENTAL has two P's in English (let's try to keep the API spelled correctly so orthography nerds like me don't flip out.) (DEFAULT_SUPLEMENTAL_INFORMATION)

It also seems a little odd that accessing a layer's metadata information (poc) may have the side-effect of creating a Contact in the database. I would think it would be better to just leave it alone if no poc is configured. The default value should also probably be pulling an existing user rather than making one from scratch. Maybe the admin user with the lowest user-id would work? Or we can just require admins to create a superuser and put the id in settings.py.

I don't think we should merge this onto master before addressing these issues.

--
David Winslow
OpenGeo - http://opengeo.org/

On 07/09/2010 09:54 AM, Ariel Nunez wrote:
I have finished my functional review of the metadata branch and verified it addresses the following tickets:

http://projects.opengeo.org/CAPRA/ticket/345
http://projects.opengeo.org/CAPRA/ticket/486
http://projects.opengeo.org/CAPRA/ticket/492
http://projects.opengeo.org/CAPRA/ticket/498
http://projects.opengeo.org/CAPRA/ticket/500
http://projects.opengeo.org/CAPRA/ticket/501
http://projects.opengeo.org/CAPRA/ticket/564

You can find more information about the changes and the commands to run it in my previous post about it to the list [0]

For now I would like to point out a few rough edges I found during the development:

1. *Updating the shp for a given layer gives a HTTP 403* response and does not even reach the layerController view. All the code to delete from Geoserver and Geonetwork as well as inserting new records to both of them is working, fixing this operation is just a matter of figuring out why that 403 error is popping out and then making sure all the operations are called in the right order.

2. *uuids, unit tests and idempotent-iveness of interactions with geonetwork. * This one alone deserves another mail where I would addres the duplication of geonetwork records, the testing setup and some idea.

3. *layerController.* Currently we have the following scheme for the layer operations:

     /data/base:district?describe -> edit metadata
     /data/base:district?update -> Udate layer data
     /data/base:district?remove -> Remove layer
     /data/base:district?style -> Change default style
We are accessing the QUERY STRING and performing the routing inside the layerController view, I suggest we change that approach to a more elegant use of django routers and use the opportunity to add named urls so one can reference for example the metadata editing url for a given layer in a template as well as make debugging easier (for example in the case of the update operation that is broken at the moment). Also, the colons ":" are special chars in a url and we should not use them so liberally[1] (although I admit it could work), I would suggest we either uriencode them (ugly!) or change them for something else, for example:

    /data/base/district/describe
    /data/base/district/update
    /data/base/district/remove
    /data/base/district/style

Since base and district already have a hierarchical relationship I would see no problem in separating them with slashes like this.

This is all for now, I will address the uuid topic in a separate email and hope a good soul (David? Seb?) can review my changes and help me get them into the master branch.

Ariel.

[0] http://librelist.com/browser//geonode/2010/7/6/ariel-s-update-metadata-branch/#4e85a475ddbc734becf818536492547e
[1] http://www.w3.org/Addressing/URL/4_URI_Recommentations.html



Reply via email to