Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GNIP: GeoNode Backup and Restore #2401

Closed
afabiani opened this issue Jan 14, 2016 · 16 comments
Closed

GNIP: GeoNode Backup and Restore #2401

afabiani opened this issue Jan 14, 2016 · 16 comments
Assignees
Labels
Milestone

Comments

@afabiani
Copy link
Contributor

@afabiani afabiani commented Jan 14, 2016

Overview

The scope of this proposal is to point out a comprehensive list of functionalities, requirements and constraints we envisage a strong, reliable and automatic GeoNode/GeoServer backup and restore procedure should provide, and finally depict a technical design along with technological choices for the implementation of such tool.

Proposed by

Alessio Fabiani (GeoSolutions)

Assigned to release

None yet.

Motivation

Currently does not exist any simple and automatic procedure to execute a backup and restore of a GeoNode instance nor a way to migrate from a version to another.

In the GeoNode documentation it is described a semi-automatic multi-step procedure allowing a tech-savvy user to perform a backup and restore of GeoNode and GeoServer, but the process is prone to errors that could result in data losses.

Proposal

Purpose and Requirements and Constraints:

The Admin command to backup and restore GeoNode data on a given version and to migrate data from one version to another, from our perspective can be splitted in three big conceptual modules:

Extract

The tool should be able to extract consistently the GeoNode and GeoServer data models in a serializable meta-format which can be interpreted later by the restore procedure in order to exactly rebuild the whole structure, accordingly to the current instance version (which may be different from the starting one).

In particular the tool must guarantee that the following resources are correctly extracted and serialized on the storage and deserialized on the target GeoNode/GeoServer instance:

  1. A GeoNode (Resource Base Model):
    a. Layers (both raster and vectors)
    b. Security model along with auth filters configuration, users and credentials
    c. Workspaces
    d. Stores (both DataStores and CoverageStores)
    e. Layers
    f. Styles
  2. GeoServer (Catalog):
    a. OWS Services configuration and limits
    b. Security model along with auth filters configuration, users and credentials
    c. Workspaces
    d. Stores (both DataStores and CoverageStores)
    e. Layers
    f. Styles

Backup and Restore

The tool must be able to save and restore GeoNode/GeoServer binary data. In particular the data which must be backed up are:

  1. GeoNode:
    a. Uploaded Document data (pdf, txt, doc, xls, zip) and images (jpg , png, tif) are stored locally in GeoNodes www upload folders: geonode/uploaded/documents/
  2. GeoServer:
    a. Uploaded geo-spatial data
    - GeoNode uploaded Vector data (shp files, etc); stored in PostGIS DB, managed via GeoServer
    - GeoNode uploaded Raster data (GeoTiff); stored locally in GeoServer as its own "Datastore"
    b. User vectorial/raster data configured in GeoServer
    c. GeoServer Styles
    d. GeoServer plugin folders and workspaces/datastores external images and Freemarker templates

Features and Constraints

The tool must provide the following functionalities and respect several constraints:

  1. The backup and restore procedure should be issued by the Administrator via an appropriate panel on the GeoNode GUI.
  2. The backup procedure could also be initiated through a command sent via HTTP, in order to make possible the periodic scheduling of backups via remote commands.
  3. The panel should list the available backups which can be selected for the restore, along with several information like:
    a. A Sequence ID with the Backup Date
    b. The status of the backup (valid or not valid)
    c. The version of the GeoNode/GeoServer backed up
    d. The possibility of delete old backups
  4. Any change or update to GeoNode and GeoServer should be prevented during the backup process.
  5. The site should be frozen during the restore process, preferably through a “Temporary Unavailable” status message which prevents any user to access the GeoNode while restoring.
  6. The backup process should work selectively on binary and external data folders. As an instance it should not blindly storage GeoServer logs nor GeoWebcache tiles.
  7. The restore process should envisage a way to store the progress status and the tasks already done in order to allow the Admin to monitor the process and possibly try to recover from the last point in case of interruption.
  8. The restore process should execute some consistency checks after the process and be able to produce verbose reports optionally available for the Admin.
  9. The backup and restore should work against the standard GeoNode packages for Ubuntu.

Technical Proposal

Backup and Restore - Functional Perspective
The diagram depicted on Fig. 1 represents a functional view of the backup/restore tool we are proposing.

image
Fig. 1

Diagram in Fig.1 shows how the responsibilities have been functionally separated into two different components:

  1. GeoNode Backup - Restore extension; this extension is built upon DJango framework and mainly drives any backup/restore task specifically related to GeoNode data and configuration.
  2. GeoServer Backup - Restore plugin; similarly to the GeoNode extension, this component is integrated into GeoServer as a plugin, accessible via a REST API, and it is able to correctly manage any backup/restore (or version update) task related to GeoServer data model and catalog.

Each component is developed separately but the whole transaction is orchestrated by the backup/restore tool, also developed as a DJango extension and integrated with GeoNode, which drives the entire procedure making sure that the workflow is executed entirely and properly.

The advantage of such approach is that GeoNode is not aware about the GeoServer configuration and/or version.

From a functional perspective each component performs its tasks by following the conceptual model described in the introductory section:

  1. Extraction and serialization of data models (GeoNode resources and GeoServer catalog objects).
  2. Selective storage and replacement of static and binary data.
  3. Eventually taking advantages of specific procedures and/or scripts able to complete low level operations like move the data around, making sure the environment is clear, stopping/restarting services and so on.

Backup and Restore - Technological Perspective

In this section we are going to describe the technological choices we are proposing in order to implement the conceptual solutions designed in the previous section.

Extract

GeoNode Extract

GeoNode is developed as a DJango project and takes advantage of the framework capabilities and plugin.

In DJango there are several ways to stream the data model into a serialized format. As an instance the plugin “django-smuggler”(1) allows to easily dump/load fixtures via the automatically-generated administration interface. A fixture is a file containing serialized model data (e.g. JSON or XML format may be used) that Django knows how to import into the database. Smuggler is especially useful for transporting database data between production and development environments, but can also be used as a backup tool.

The Smuggler plugin is not the only one possible choice and the final technical proposal will be discussed with the GeoNode developer community and with the GFDRR’s Innovation Lab. In any case the specific technological choice won’t impact much the approach we propose here.

GeoServer Extract

We envisage to build the whole GeoServer backup and restore functionality as a plugin interacting directly with the GeoServer catalog and data model.
Since the plugin will be integrated in GeoServer, it will be able to access to the GeoServer core api. Moreover the GeoServer catalog is currently already serialized as XML fixtures.

Under those assumptions, the GeoServer backup and restore plugin will be able to store the data model by accessing to the GeoServer core apis directly.

Backup

GeoNode Backup

We envisage the GeoNode backup component process (not the whole backup process but only the one provided by the specific GeoNode extension, responsible only for the backup of the GeoNode instance data model and static/binary data) as composed by four different phases:

  1. Locking of the GeoNode/DJango resources in order to deny any further change until the backup is finished. This can be possible through a refactoring of the GeoNode ResourceBase by introducing a LockManager(2). The latter will be based on specific SQL Lock directives(3) in the case GeoNode has been configured to use PostgreSQL as backend.
  2. Selective hard-copy of the specific GeoNode content:
    Uploaded documents folders
    Images
    Web content folders
    HTTPD web content
  3. Log the backup progress on the backup folder. Possibly interact with the notifications system.
  4. Serialize the backup progress status, metadata and a progressive sequence id on an XML/JSon fixture in order to be reused later by the GeoNode GUI and/or restore procedure.

GeoServer Backup

The GeoServer backup plugin will perform the backup process in three different steps:

  1. Locking the GeoServer catalog in order to prevent any further modification until the end of the backup process. This will be implemented as part of the GeoServer core api.
  2. Selective hard-copy of the GeoServer Data Dir:
    a. Data folder containing raw binary data
    b. Styles SLDs
    c. Workspaces and DataStores Freemarker Templates
    d. Other extension and plugin folders and files
    It is worth to point out that this procedure will filter out stuff that should not be saved, like:
    a. GeoServer logs and temporary folder contents
    b. GeoWebcache tiles and temporary content
  3. Dump the FeatureTypes saved as DataBase tables as a portable geo-spatial format fixture like for instance GML; this will allow to avoid relying on external DataBase dumps which are not portable on different PostgreSQL and PostGIS versions.

Restore

GeoNode Restore

We envisage the GeoNode restore component process as composed by four different phases:

  1. Lock the system to standard users and redirect the latters to a default “Temporary Unavailable” static page.
  2. Deserialize the GeoNode/DJango data model using the fixtures stored on the selected backup data dir (relative to a specific backup selected by the Admin).
  3. Replace the binary and static data content folders with the ones present on the selected backup folder.
  4. Log the restore progress. Possibly interact with the notifications system.

GeoServer Restore

The GeoServer backup plugin will perform the restore process in three different steps:

  1. Locking the GeoServer catalog in order to prevent any further modification until the end of the restore process.
  2. Restore the static content on the GeoServer Data Dir. Apply version update hooks in case the target version is greater than the backup one.
  3. Restore the FeatureTypes content on the target Data Base.

Useful links

@capooti

This comment has been minimized.

Copy link
Member

@capooti capooti commented Jan 15, 2016

Nice idea, thanks.

Regarding this:
2. The backup procedure could also be initiated through a command sent via HTTP, in order to make possible the periodic scheduling of backups via remote commands.

A part from getting the workflow going from the Django admin, why not to make available a django management command that is doing everything from the command line?

@afabiani

This comment has been minimized.

Copy link
Contributor Author

@afabiani afabiani commented Jan 20, 2016

Yes, the management command should be also part of this proposal.

Anyone has experience and/or pointers with the Django serialization? In
particular anyone envisages any blocker for the GeoNode app?

GeoServer Professional Services from the experts! Visit

http://goo.gl/NWWaa2 for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.

On Fri, Jan 15, 2016 at 5:00 PM, Paolo Corti notifications@github.com
wrote:

Nice idea, thanks.

Regarding this:
2. The backup procedure could also be initiated through a command sent via
HTTP, in order to make possible the periodic scheduling of backups via
remote commands.

A part from getting the workflow going from the Django admin, why not to
make available a django management command that is doing everything from
the command line?


Reply to this email directly or view it on GitHub
#2401 (comment).

@afabiani

This comment has been minimized.

Copy link
Contributor Author

@afabiani afabiani commented Jan 25, 2016

I'm going to report here the latest blocking issues I have found while working on this GNIP, just to keep track of the progresses here too.

"Finally I found the issue (but not yet a beautiful solution).

The problem is the following one:

  • We have a resourcebase class which has a manytomany relationship with contactroles and links. The relationships are correctly defined, having a non-null constraint on the resourcebase foreign key and on the role/link ones too.
  • We have layers, inherited by the resourcebase.

The issue:

When we dump the data everything works just fine. The data can be successfully dumped to JSON and, paying attention to the order, can be almost all deserialized again on a fresh database.

There is no problem in restoring everything except the Layers.

In fact, it seems like DJango tries to create the Layer but somehow loses the information on the resourcebase id when trying to restore the many to many relationships. In other words, it tries to create again the contactroles and the links associated to the Layer/ResourceBase, but this time imposing the resourcebase foreignkey as NULL.

Relaxing the model and allowing contactroles and links to accept also NULL resources (which means basically have orphan records into the DB in the end), everything works fine, except that we have duplicated contactroles and links, half with the correct resourcebase id reference and half with a null reference.

The DJango mailing list seems not providing any solution for this, or at least I was not able to find any at this time. Most probably this issue has been fixed from DJango 1.7a+ since there are similar issues around related to duplicate keys.

The trivial workaround:

  • Modify a bit the model by allowing contactroles and links to accept null values for the resourcebase primary key.
    The whole integrity of the model is preserved, the only issue is that there will be duplicate values in the DB after the restore.

The non-trivial possible solutions:

  1. Try to see if newer versions of DJango fix the issue and envisage a GeoNode upgrade

  2. Investigate the possibility of refactoring a bit the GeoNode model and see if the many to many relationships can be better/differently defined without breaking the GeoNode DB (possible backward compatibility issues)

  3. See if there is a way to somehow patch the model by introducing fields/methods that helps the fixtures to be deserialized correctly.

Any feedback/help/idea welcomed.

Regards,
Alessio."

@BerryDaniel

This comment has been minimized.

Copy link

@BerryDaniel BerryDaniel commented Feb 8, 2016

Just curious if this will also support geogig repositories?

@afabiani

This comment has been minimized.

Copy link
Contributor Author

@afabiani afabiani commented Feb 17, 2016

Hello Daniel,
well, it depends how difficult is to integrate on the GeoServer Backup &
Restore module.

In theory should not be a big issue since the geogic repositories are
integrated into the GeoServer catalog.

We can extend the proposal to geogig as soon as they become an official
GeoServer extension.

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 333 8128928

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Mon, Feb 8, 2016 at 9:05 PM, Daniel Berry notifications@github.com
wrote:

Just curious if this will also support geogig repositories?


Reply to this email directly or view it on GitHub
#2401 (comment).

@jj0hns0n

This comment has been minimized.

Copy link
Member

@jj0hns0n jj0hns0n commented Jun 15, 2016

@afabiani this work is complete now correct? Do we have docs? (apologies if I missed them)

@afabiani

This comment has been minimized.

Copy link
Contributor Author

@afabiani afabiani commented Jul 1, 2016

Hi Jeffrey,
still missing the rest call to GeoServer. The GeoNode fixtures are ready
though, don't know if we want to split te work into two different PRs.

We have documentation for this work available here
http://training.geonode.geo-solutions.it/006_adv_workshop/005_data_migration/index.html#geonode-data-migration-workshop

which should be ported into the official GeoNode documentation and enriched
with latest updates and improvements.

@jj0hns0n jj0hns0n added this to the 2.5 milestone Aug 21, 2016
@jj0hns0n jj0hns0n modified the milestones: 2.5, 2.7 Aug 26, 2016
jj0hns0n added a commit that referenced this issue Sep 29, 2016
* GeoNode Backup and Restore Management Commands

 - GeoServer Vectorial/Raster Data Full Backup&Restore

 - Backup & Restore Admin Page

 Bakup&Restore Admin Gui migrations

 - Document headers

 - Backup&Restore PR logging and minor fixes

 - fix migration issue

 - Backup & Restore Documentation

 - Minot update Backup & Restore docs

* Update backup.py
@afabiani afabiani closed this Oct 12, 2016
@jj0hns0n

This comment has been minimized.

Copy link
Member

@jj0hns0n jj0hns0n commented Oct 18, 2016

@afabiani can we migrate this documentation into the main GeoNode Docs now?

@afabiani

This comment has been minimized.

Copy link
Contributor Author

@afabiani afabiani commented Oct 18, 2016

Documentation is already there but it is not deployed by the continuous
integration system... it looks like someone has modified the docs jobs
removing the deployment stuff.

@jj0hns0n

This comment has been minimized.

Copy link
Member

@jj0hns0n jj0hns0n commented Oct 18, 2016

Something was erroring on the docs job and I disabled it recently. @afabiani do you have time to take a look at see if you can re-enable it?

@afabiani

This comment has been minimized.

Copy link
Contributor Author

@afabiani afabiani commented Oct 19, 2016

The problem is the only jenkins job I can see with my user is empty. It is
currently enables but it does not nothing. Other than this I don't know how
to deploy to http://docs.geonode.org/ since I am not aware of the server
credentials.

Maybe Ariel or Simone could send some pointers?

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Tue, Oct 18, 2016 at 8:22 PM, Jeffrey Johnson notifications@github.com
wrote:

Something was erroring on the docs job and I disabled it recently.
@afabiani https://github.com/afabiani do you have time to take a look
at see if you can re-enable it?


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
#2401 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABOARQUH50KeFtaNNI7pD_zXjWDDpBoqks5q1Q5pgaJpZM4HE0l3
.

@simod

This comment has been minimized.

Copy link
Member

@simod simod commented Oct 19, 2016

http://readthedocs.org/projects/geonode/builds/4531366/ this is what I see.

OSError: Could not find library geos_c or load any of its variants
['libgeos_c.so.1', 'libgeos_c.so']

2016-10-19 14:29 GMT+02:00 Alessio Fabiani notifications@github.com:

The problem is the only jenkins job I can see with my user is empty. It is
currently enables but it does not nothing. Other than this I don't know how
to deploy to http://docs.geonode.org/ since I am not aware of the server
credentials.

Maybe Ariel or Simone could send some pointers?

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Tue, Oct 18, 2016 at 8:22 PM, Jeffrey Johnson <notifications@github.com

wrote:

Something was erroring on the docs job and I disabled it recently.
@afabiani https://github.com/afabiani do you have time to take a look
at see if you can re-enable it?


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
#2401 (comment),
or mute the thread
<https://github.com/notifications/unsubscribe-
auth/ABOARQUH50KeFtaNNI7pD_zXjWDDpBoqks5q1Q5pgaJpZM4HE0l3>
.


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
#2401 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAvkdE_0aYTH8ZIM8TzL-SGfJDZO1azZks5q1g0kgaJpZM4HE0l3
.

Simone

@afabiani

This comment has been minimized.

Copy link
Contributor Author

@afabiani afabiani commented Oct 19, 2016

Mmm, it looks Shapely version issue. Shapely (if I recall correctly) has a
version of geos lib inside conflicting with the GDAL one.

There was a similar issue some time ago with the shapely version declared
on GeoNode setup.py maybe?!?

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Wed, Oct 19, 2016 at 4:09 PM, Simone Dalmasso notifications@github.com
wrote:

http://readthedocs.org/projects/geonode/builds/4531366/ this is what I
see.

OSError: Could not find library geos_c or load any of its variants
['libgeos_c.so.1', 'libgeos_c.so']

2016-10-19 14:29 GMT+02:00 Alessio Fabiani notifications@github.com:

The problem is the only jenkins job I can see with my user is empty. It
is
currently enables but it does not nothing. Other than this I don't know
how
to deploy to http://docs.geonode.org/ since I am not aware of the server
credentials.

Maybe Ariel or Simone could send some pointers?

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely
for
the attention and use of the named addressee(s) and may be confidential
or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure,
reproduction,
copying, distribution, or either dissemination, either whole or partial,
is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy
or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Tue, Oct 18, 2016 at 8:22 PM, Jeffrey Johnson <
notifications@github.com

wrote:

Something was erroring on the docs job and I disabled it recently.
@afabiani https://github.com/afabiani do you have time to take a
look
at see if you can re-enable it?


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#2401 (comment)
,
or mute the thread
<https://github.com/notifications/unsubscribe-
auth/ABOARQUH50KeFtaNNI7pD_zXjWDDpBoqks5q1Q5pgaJpZM4HE0l3>
.


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
#2401 (comment),
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAvkdE_0aYTH8ZIM8TzL-
SGfJDZO1azZks5q1g0kgaJpZM4HE0l3>
.

Simone


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
#2401 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABOARaYtZO_PEj0J2BUvWhJBdsukQyFpks5q1iSDgaJpZM4HE0l3
.

@jj0hns0n

This comment has been minimized.

Copy link
Member

@jj0hns0n jj0hns0n commented Oct 19, 2016

That jenkins job never worked. We had it setup with a post-commit hook in
github -> readthedocs, but it stopped working somehow. Can you take a look
at that and see if you can get it to work again?

On Wed, Oct 19, 2016 at 5:29 AM, Alessio Fabiani notifications@github.com
wrote:

The problem is the only jenkins job I can see with my user is empty. It is
currently enables but it does not nothing. Other than this I don't know how
to deploy to http://docs.geonode.org/ since I am not aware of the server
credentials.

Maybe Ariel or Simone could send some pointers?

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Tue, Oct 18, 2016 at 8:22 PM, Jeffrey Johnson <notifications@github.com

wrote:

Something was erroring on the docs job and I disabled it recently.
@afabiani https://github.com/afabiani do you have time to take a look
at see if you can re-enable it?


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
#2401 (comment),
or mute the thread
<https://github.com/notifications/unsubscribe-
auth/ABOARQUH50KeFtaNNI7pD_zXjWDDpBoqks5q1Q5pgaJpZM4HE0l3>

.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
#2401 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAe43iau7hxBC9VfGiAwIhMAQ_dJiypFks5q1g0ngaJpZM4HE0l3
.

@afabiani

This comment has been minimized.

Copy link
Contributor Author

@afabiani afabiani commented Oct 19, 2016

Yep, I'll try to fix it.

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Wed, Oct 19, 2016 at 4:58 PM, Jeffrey Johnson notifications@github.com
wrote:

That jenkins job never worked. We had it setup with a post-commit hook in
github -> readthedocs, but it stopped working somehow. Can you take a look
at that and see if you can get it to work again?

On Wed, Oct 19, 2016 at 5:29 AM, Alessio Fabiani <notifications@github.com

wrote:

The problem is the only jenkins job I can see with my user is empty. It
is
currently enables but it does not nothing. Other than this I don't know
how
to deploy to http://docs.geonode.org/ since I am not aware of the server
credentials.

Maybe Ariel or Simone could send some pointers?

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely
for
the attention and use of the named addressee(s) and may be confidential
or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure,
reproduction,
copying, distribution, or either dissemination, either whole or partial,
is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy
or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Tue, Oct 18, 2016 at 8:22 PM, Jeffrey Johnson <
notifications@github.com

wrote:

Something was erroring on the docs job and I disabled it recently.
@afabiani https://github.com/afabiani do you have time to take a
look
at see if you can re-enable it?


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#2401 (comment)
,
or mute the thread
<https://github.com/notifications/unsubscribe-
auth/ABOARQUH50KeFtaNNI7pD_zXjWDDpBoqks5q1Q5pgaJpZM4HE0l3>

.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
#2401 (comment),
or mute the thread
<https://github.com/notifications/unsubscribe-auth/
AAe43iau7hxBC9VfGiAwIhMAQ_dJiypFks5q1g0ngaJpZM4HE0l3>
.


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
#2401 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABOARUnlQC71ruhltV2WnrqdcxiuFNRxks5q1jAlgaJpZM4HE0l3
.

@afabiani

This comment has been minimized.

Copy link
Contributor Author

@afabiani afabiani commented Oct 19, 2016

Jeffrey, readthedocs fails due to "requirements.txt" file including
"Shapely".

requirements.txt should be used only by CIs (as far as I know) since pip
makes use of setup.py to install the software.

This is the commit

203cbb6

reverting it the only way to make readthedocs working is to workaround the
requirements.txt file using some trick, otherwise there is no hope to make
it work.

Once solved this issue, the next one seems to be related to the generation
of PDF

!pdfTeX error: pdflatex (file ./shp_table.png): libpng: internal error
==> Fatal error occurred, no output PDF file produced!

I guess here only an administrator of the project can change the options in
order to make readthedocs avoid building PDFs or fix the issue somehow.

For the moment I can't do much more than this.

Let me know how to proceed.

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Wed, Oct 19, 2016 at 5:04 PM, Alessio Fabiani <
alessio.fabiani@geo-solutions.it> wrote:

Yep, I'll try to fix it.

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Wed, Oct 19, 2016 at 4:58 PM, Jeffrey Johnson <notifications@github.com

wrote:

That jenkins job never worked. We had it setup with a post-commit hook in
github -> readthedocs, but it stopped working somehow. Can you take a look
at that and see if you can get it to work again?

On Wed, Oct 19, 2016 at 5:29 AM, Alessio Fabiani <
notifications@github.com>
wrote:

The problem is the only jenkins job I can see with my user is empty. It
is
currently enables but it does not nothing. Other than this I don't know
how
to deploy to http://docs.geonode.org/ since I am not aware of the
server
credentials.

Maybe Ariel or Simone could send some pointers?

Best Regards,
Alessio Fabiani.

GeoServer Professional Services from the experts!

Visit http://goo.gl/it488V for more information.

Ing. Alessio Fabiani
@alfa7691
Founder/Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 331 6233686

http://www.geo-solutions.it
http://twitter.com/geosolutions_it


AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio
stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely
for
the attention and use of the named addressee(s) and may be confidential
or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure,
reproduction,
copying, distribution, or either dissemination, either whole or
partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy
or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.


On Tue, Oct 18, 2016 at 8:22 PM, Jeffrey Johnson <
notifications@github.com

wrote:

Something was erroring on the docs job and I disabled it recently.
@afabiani https://github.com/afabiani do you have time to take a
look
at see if you can re-enable it?


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#2401 (comment)
-254594883>,
or mute the thread
<https://github.com/notifications/unsubscribe-
auth/ABOARQUH50KeFtaNNI7pD_zXjWDDpBoqks5q1Q5pgaJpZM4HE0l3>

.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#2401 (comment)
,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAe43iau7
hxBC9VfGiAwIhMAQ_dJiypFks5q1g0ngaJpZM4HE0l3>
.


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
#2401 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABOARUnlQC71ruhltV2WnrqdcxiuFNRxks5q1jAlgaJpZM4HE0l3
.

milafrerichs added a commit to milafrerichs/geonode that referenced this issue Nov 14, 2016
*  - Restoring missing parts of the docs
*  - update ext pakages versions

* Lock in version of gsconfig

Lock in the version until issue GeoNode#2544 is resolved

* gsconfig now utilizes an attribution dictionary and bumped to newest version

*  - update geonode exts version in order to fix pavement sync db

* README: fix syntax error

Heading "Docker Usage" was not rendered correctly.

* ol3-preview

* keep geoext as default

* Missing quotation mark

* Add support for EPSG:4326

* bump user-messages

* don't assume 'geoserver' in style url management

* tiles_url should be a XYZ source

* set_metadata returns four variables, which was causing an error of too many values to unpack

* 'name' no longer a ContentType field in Django 1.8+

* Added handling of postgres backed geogig stores

* fix layer style dropdown values

* Default to public schema if not defined

* added exception handler for when multiple legends are returned

* just update the tiles link url if needed, this will respect any changes to the url made by other apps like contrib.mp

* register models for actstream 0.5+ / Django 1.8+

* re enable publish as layer group

* adjusted text and html metadata links in the templates for documents and layers

* Changes in manual installation docs (GeoNode#2561)

minor changes in docs

* fix layer group endpoint

* fix for port changes: can't concatenate str & int

* check if layerfile_set exists

* Refactor to align with updated PG Geogig plugin: calls the plugin only to create the geogig repo, and calls gsconfig to create the datastore

* fix client/server handling for multi-file upload/import by storing the upload id in the session

* use .get explicitly instead of .all().filter(...)[0]

* use elif with mutually exclusive comparisons

* Invalidate layer in GeoWebCache after style_update PUT/POST

* send content-type:text/xml header

* use str.join() properly

* fix status code check

* update url for cache refresh

* prevent auto redirect when additional information is required.

* bump gsconfig to 1.0.6

*  - Paver setup_geoserver using the new 2.9.x

*  - remove layer_is FK constraints from layer_styles migrations

* Added documentation for configuring an AWS S3 Bucket with GeoNode

*  - test travis script with Java 8 (GeoNode#2584)

- test travis script with Java 8

 - test travis script with Java 8

* Adding instructions to add windows dependencies

* Adding gdal environment variables

* Update README

* Update README

* Update README

* Revert " - remove layer_is FK constraints from layer_styles migrations"

This reverts commit ea2b292.

* fix broken og:image link in meta tag in head

* fix exception during renders of admin forms using autocomplete_light

* change LayerStyles related name to snake_case

* Create new CONTRIBUTING file

Using CLAHub and OSGeo CLA

* restructure get_context_resourcetype for clarity

* add profiles & groups autocomplete config

* Groups have titles, not names

* Docker for development (GeoNode#2593)

* Refactor to align with updated PG Geogig plugin: calls the plugin only to create the geogig repo, and calls gsconfig to create the datastore

* prevent auto redirect when additional information is required.

* bump gsconfig to 1.0.6

*  - Paver setup_geoserver using the new 2.9.x

*  - remove layer_is FK constraints from layer_styles migrations

* Added documentation for configuring an AWS S3 Bucket with GeoNode

* fix broken og:image link in meta tag in head

* Revert " - remove layer_is FK constraints from layer_styles migrations"

This reverts commit ea2b292.

*  - test travis script with Java 8 (GeoNode#2584)

- test travis script with Java 8

 - test travis script with Java 8

* No specific versions in setup.py, only minimum

* Bump version to start 2.5 cycle

* Use published image for development

* Added docker-compose and docker-compose.override

* Pinned requirements

* Pull image in deployment, build image in development

* Makefile for tasks

* Added pull target

* Avoid autocompletelight 3

* Switch to 'latest' geonode/docker

* Requirements from travis

* Downgrade requirements

* Use requirements file

* Don't use project_name

* Use specific docker images

* s/genode/geonode

* Use geoserver latest

* Use latest tag for nginx

* Fix migration problems

* Use run instead of exec

* Fix requirements.txt

* Revert "Fix migration problems"

This reverts commit aa33ce6.

* Fix httplib version

* Fix tests

* Call docker-django from latest

* Use geonode/django in celery too (GeoNode#2594)

* make test works in docker (GeoNode#2595)

* Add context-specific search to /groups page

Templates that were originally built for ResourceBase-type content are
being overridden here for group objects (e.g., _group_search_content.html)

* groups do not have date or popular_count fields

* let custom search_content template work for both profiles & groups

* Custom sort filters depending on data type

* Add context-specific search (filtering by username) within /people

* if searching from /people context, use username instead of title

* url fix in README

* add name to AUTHORS

* geonode-user-accounts 1.0.13 (GeoNode#2603)

* Fix for issue 2599. The issue was that apache was allowing directory browsing. Added the options directive to remove it from the current list of options enforced for that directory.

* Use environment variables in settings.py (GeoNode#2596)

* Missing migrations (GeoNode#2604)

* geonode-user-accounts 1.0.13

* Missing migrations

* pep8 for migrations

* pep8

* Updated readme for docker (GeoNode#2607)

* Using docker images from hub

*  - (issue GeoNode#2070) Layer name cannot be a style name already on Geoserver

*  - (issue GeoNode#2075) Add lxml back into paver win_install_deps

* adding missing trans for GeoNode#1769

* sycing tsf

* use layer instance to revoke layer permissions, fixes GeoNode#2531 (GeoNode#2614)

use layer instance instead of resourcebase to revoke permission, fixes GeoNode#2531

* include data files in downstream installations should fix GeoNode#2452 (GeoNode#2615)

include data files in downstream installations should fix GeoNode#2452

* - Modify some settings and code to make geonode able to use QGIS Server as backend.
- Add some views, templates and resources to make geonode able to use QGIS Server as backend.
- Add sample setting to use QGIS Server backend.

* should fix GeoNode#2464 (GeoNode#2616)

bump haystack versions to support django 1.8

* Fixed migrations, settings.py, and pavement for development

* pavement: moved migrate_apps to yaml

* fix GeoNode#1718

* make debug default to true

* sycing for GeoNode#1769, after GeoNode#2612 merge

* fix upload issue, check if the js property exists first

* hierarchical tags support

* fix indentation

* add freeboard to requirements.txt

* bump taggit

* Don't pin versions in setup.py use >= or <=

Pinning should be done in requirements.txt

Reasoning is explained in https://packaging.python.org/requirements/

* Pin versions in requirements.txt

* Set to 2.5 final version for release

* update keywords integration test

* fix filename

* we dont use submodules anymore

* Updated instruction for configure ssl on geonode: with version 2.4 some path are changed (GeoNode#2571)

and is not necessary the step regarding python and java configuration because ssl is managed by apache mod_wsgi

* 2.5.0 is out, move master branch to 2.5.1-dev

* Delete fig.yml

* Do not flake8 migrations

* python-properties is now usually pre-installed in Ubuntu

And GeoNode works well with Ubuntu 14.04

* Fix typos in installation dev docs

* Fix GeoGig stats/logs URL for Layer info page. (GeoNode#2633)

The repoURL was using the GeoServer DataStore connection_parameters
value to contstruct the GeoGig repository URL, which looks like:

   http://<server>/geoserver/geogig/geoserver://<repo name>

The statistics and logs URL for GeoGig needs to use a repo URL like
this:

   http://<server>/geoserver/geogig/repos/<repo name>

* Do not pin versions on setup.py

* Upgrade django mptt

* Use a pattern for adding package data, fixes missing fixtures on packages

* Set development version for 2.5.3

* Add volume data container to geoserver

* Exclude remote services layers from map download feature.

* Make download links open in new tab (GeoNode#2642)

* Fix race condition during Raster upload/import

  - Removing a duplicate block of code for PENDING raster imports
  - Don't re-send the Import request if it's already been sent

* Add variables for building base_url

* local_settings.py should be called only once

* Provide defaults for optional ogc_server_settings (GeoNode#2647)

* Provide defaults for optional ogc_server_settings 

MAPFISH_PRINT_ENABLED, PRINT_NG_ENABLED, GEONODE_SECURITY_ENABLED, GEOGIG_ENABLED

* fixup

* Move master to 2.5.4

* Minor text fix for profile update

* fix QGIS path log when using qgis server backend (GeoNode#2648)

* Bugfix for updating style through UI

* Clear comment modal after adding comment

* Issue GeoNode#2401: GNIP: GeoNode Backup and Restore (GeoNode#2651)

* GeoNode Backup and Restore Management Commands

 - GeoServer Vectorial/Raster Data Full Backup&Restore

 - Backup & Restore Admin Page

 Bakup&Restore Admin Gui migrations

 - Document headers

 - Backup&Restore PR logging and minor fixes

 - fix migration issue

 - Backup & Restore Documentation

 - Minot update Backup & Restore docs

* Update backup.py

* Respond correctly when user removes the last related file for a layer upload (GeoNode#2660)

* bump guardian and manage the anonymous pk internally

* use names instead of slugs for keywords

* ini file was not an allowed file type for MANIFEST.in. This was causing the settings.ini file to not be included in the package.

* Fix small bug where {{ repoUrl }} was being used as geogig email due to incorrect input type in HTML

* Fixing missing and broken links to actions on the user's activity page

* Updating pycsw to the latest released version 2.0.2

* bump pycsw

* Update conf.py

* Update setup.py

* Update conf.py

* Update conf.py

* Update requirements.txt

* Update conf.py

*  - Fix the docs

* Updating Choose Files button to allow user to reupload the same file again without having to use Clear (GeoNode#2681)

* Use new UserActivity view (GeoNode#2680)

* truncate upload names over length to allow upload (GeoNode#2671)

One approach to the problem described in
GeoNode#2646

This patch uses the Django field definition to get the length, so this can be
controlled from that one place and won't get out of sync.

* remove mutable default values for kwargs (GeoNode#2668)

This subtle misunderstanding of Python tends to cause confusing bugs.

Suppose you have a definition statement like 'def function(keys=[]): ...'
This def statement is evaluated once, at import time, to create a function
object. It is at this time that '[]' is evaluated, and it is that ONE
list object which is retained as the default value for 'keys'.
Python doesn't store the expression and re-evaluate it every time the
default is needed, it evaluates it once at import time and the resulting
value is passed for every call where that arg is not given.

To explain this with code, the effect is something like this:

    default_keys = []
    def function(keys=default_keys):
        ...

When function() is called with a value for keys, no problem will be seen.
Even when it is called with no value for keys, and we default to that list,
you might not see a problem. The problem that tends to happen unpredictably
is that the mutable default value is mutated. Those changes are persistent
and globally visible to any call of the function which uses the default.

Then the default value is non-empty. Or information leaks across calls
that shouldn't be leaking. Or the same dict keeps growing forever.

To avoid this, we can use a sentinel value such as None, and then check
for that value in the body of the function. It is a cheap safeguard against
situations that can be very annoying.

* first of many docs fixes (GeoNode#2684)

* Fix the Resources section on profile detail page to work when no data exists in the category yet

* Incubation documentation fixes (GeoNode#2687)

* Fixed dead link [ci skip]

* Fixed some doc links [ci skip]

* Fixed License header in some po files

* Fixed packaging files copyright

* Added OSGeo copyright and CC-SA in documentation

* Fixed bug breaking Group Activity view

* Updated changelog for version 2.5.4

* Updating release info and some improvements to pavement for Xenial releases

* Fixing travis build

* previous adjustments to the setup.py and MANIFEST.ini were not allowing certain filetypes to be packaged, loading.gif was the most noticeable.

* Updated changelog for version 2.5.5

* Update release version

* Make resourcebase info panel template extendable

* Fixing syntax error: celery_app (GeoNode#2697)

* Sync auto generate avatar sizes with avatar sizes used in templates (GeoNode#2693)

*  2696 Part 1 - GNIP - Better management of View and Download permissions.

 2696 Part 1 - GNIP - Better management of View and Download permissions.

 - Fix flake8 formatting issues

* Updated AUTHORS list

* Update views.py

- Fix minor typo with brackets

* Update AUTHORS

* Enable update layers management command to accept the permissions dictionary. (GeoNode#2691)

* Insert missing sudo to chmod commands

This fixes "[Errno 13] Permission denied: '/home/geonode/geonode/geonode/uploaded/layers/" encountered by user when trying to upload layer files.

* Clean up extra ':'s (from ::: to ::)

* Language cleanup, deleted duplicate section

* Minor cleanup

* Process inbox messages using AJAX

* - removed import on INSTALLED_SCHEMES since its usage was removed on this commit  (aff43c0).
- limiting the version of celery to less then the 4.0 release, due to django-celery not having a release in over a year which would include the updates in master to support the new version of celery.  If you currently install Geonode it will install celery 4.0, but when attempting to use any django commands an ImportError occurs due to no module named timeutils.

* Split geoserver.helpers.set_attributes() (GeoNode#2699)

* Add conditional to geosites so signals are connected only if it is in INSTALLED_APPS.

* Added test for geonode.utils.set_attributes().

* Split helpers.set_attributes() into 2 functions.

* Renamed set_attributes() to set_attributes_from_geoserver().

* Moved really_set_attributes(), to geonode.utils and renamed to set_attributes().

* Removed unnecessary variable 'Attribute' from utils.

* Added check for layer/field pairs not in attribute_stats.

* flake8 formatting fixes.

* require celery version to be at least 3.1.18

When using `pip install -r requirements.txt` I was finding that my Celery
worker was not booting properly.

```
...
File "/env/lib/python2.7/site-packages/django/core/management/base.py", line 534, in check
    self.stderr.write(msg, lambda x: x)
TypeError: function takes exactly 1 argument (2 given)
```

This is an incompatibility between Celery 3.1.17 and Django 1.8.
celery/celery#2536

Fix: upgrade to Celery 3.1.18, which supports Django 1.8.
http://docs.celeryproject.org/en/latest/history/changelog-3.1.html#version-3-1-18

* The standalone TEMPLATE_* settings were deprecated in Django 1.8 (GeoNode#2711)

-  The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your default TEMPLATES dict: TEMPLATE_DIRS, TEMPLATE_CONTEXT_PROCESSORS, TEMPLATE_DEBUG. https://docs.djangoproject.com/en/1.8/topics/templates/#support-for-template-engines
- historic pep8 fixes

* Set SITEURL to server's host name
milafrerichs added a commit to milafrerichs/geonode that referenced this issue Nov 17, 2016
* Adds support for s3 storage and forces layer uploads to use the FileSystemStorage

* Fix issue GeoNode#2526

* Added LDAP install and configure steps in Admin workshop

* Add a name to AUTHORS

* Fill empty value for DATASTORE variable in docs

* Added an autocomplete template and additions to enable search by catalogue

* Created template and edited files to enable .txt and .html formats export for metadata

* Fixes admin interface for layers

AttributeError: 'NoneType' object has no attribute 'name'

django-polymorphic/django-polymorphic#201

* dj_database_url formats the port as an integer, whereas gsconfig is wanting a string for creating the feature store.

* addition to previous patch: format port as str

* bump some packages version

*  - Restoring missing parts of the docs

*  - update ext pakages versions

* Lock in version of gsconfig

Lock in the version until issue GeoNode#2544 is resolved

* gsconfig now utilizes an attribution dictionary and bumped to newest version

*  - update geonode exts version in order to fix pavement sync db

* README: fix syntax error

Heading "Docker Usage" was not rendered correctly.

* ol3-preview

* keep geoext as default

* Missing quotation mark

* Add support for EPSG:4326

* bump user-messages

* don't assume 'geoserver' in style url management

* tiles_url should be a XYZ source

* set_metadata returns four variables, which was causing an error of too many values to unpack

* 'name' no longer a ContentType field in Django 1.8+

* Added handling of postgres backed geogig stores

* fix layer style dropdown values

* Default to public schema if not defined

* added exception handler for when multiple legends are returned

* just update the tiles link url if needed, this will respect any changes to the url made by other apps like contrib.mp

* register models for actstream 0.5+ / Django 1.8+

* re enable publish as layer group

* adjusted text and html metadata links in the templates for documents and layers

* Changes in manual installation docs (GeoNode#2561)

minor changes in docs

* fix layer group endpoint

* fix for port changes: can't concatenate str & int

* check if layerfile_set exists

* Refactor to align with updated PG Geogig plugin: calls the plugin only to create the geogig repo, and calls gsconfig to create the datastore

* fix client/server handling for multi-file upload/import by storing the upload id in the session

* use .get explicitly instead of .all().filter(...)[0]

* use elif with mutually exclusive comparisons

* Invalidate layer in GeoWebCache after style_update PUT/POST

* send content-type:text/xml header

* use str.join() properly

* fix status code check

* update url for cache refresh

* prevent auto redirect when additional information is required.

* bump gsconfig to 1.0.6

*  - Paver setup_geoserver using the new 2.9.x

*  - remove layer_is FK constraints from layer_styles migrations

* Added documentation for configuring an AWS S3 Bucket with GeoNode

*  - test travis script with Java 8 (GeoNode#2584)

- test travis script with Java 8

 - test travis script with Java 8

* Adding instructions to add windows dependencies

* Adding gdal environment variables

* Update README

* Update README

* Update README

* Revert " - remove layer_is FK constraints from layer_styles migrations"

This reverts commit ea2b292.

* fix broken og:image link in meta tag in head

* fix exception during renders of admin forms using autocomplete_light

* change LayerStyles related name to snake_case

* Create new CONTRIBUTING file

Using CLAHub and OSGeo CLA

* restructure get_context_resourcetype for clarity

* add profiles & groups autocomplete config

* Groups have titles, not names

* Docker for development (GeoNode#2593)

* Refactor to align with updated PG Geogig plugin: calls the plugin only to create the geogig repo, and calls gsconfig to create the datastore

* prevent auto redirect when additional information is required.

* bump gsconfig to 1.0.6

*  - Paver setup_geoserver using the new 2.9.x

*  - remove layer_is FK constraints from layer_styles migrations

* Added documentation for configuring an AWS S3 Bucket with GeoNode

* fix broken og:image link in meta tag in head

* Revert " - remove layer_is FK constraints from layer_styles migrations"

This reverts commit ea2b292.

*  - test travis script with Java 8 (GeoNode#2584)

- test travis script with Java 8

 - test travis script with Java 8

* No specific versions in setup.py, only minimum

* Bump version to start 2.5 cycle

* Use published image for development

* Added docker-compose and docker-compose.override

* Pinned requirements

* Pull image in deployment, build image in development

* Makefile for tasks

* Added pull target

* Avoid autocompletelight 3

* Switch to 'latest' geonode/docker

* Requirements from travis

* Downgrade requirements

* Use requirements file

* Don't use project_name

* Use specific docker images

* s/genode/geonode

* Use geoserver latest

* Use latest tag for nginx

* Fix migration problems

* Use run instead of exec

* Fix requirements.txt

* Revert "Fix migration problems"

This reverts commit aa33ce6.

* Fix httplib version

* Fix tests

* Call docker-django from latest

* Use geonode/django in celery too (GeoNode#2594)

* make test works in docker (GeoNode#2595)

* Add context-specific search to /groups page

Templates that were originally built for ResourceBase-type content are
being overridden here for group objects (e.g., _group_search_content.html)

* groups do not have date or popular_count fields

* let custom search_content template work for both profiles & groups

* Custom sort filters depending on data type

* Add context-specific search (filtering by username) within /people

* if searching from /people context, use username instead of title

* url fix in README

* add name to AUTHORS

* geonode-user-accounts 1.0.13 (GeoNode#2603)

* Fix for issue 2599. The issue was that apache was allowing directory browsing. Added the options directive to remove it from the current list of options enforced for that directory.

* Use environment variables in settings.py (GeoNode#2596)

* Missing migrations (GeoNode#2604)

* geonode-user-accounts 1.0.13

* Missing migrations

* pep8 for migrations

* pep8

* Updated readme for docker (GeoNode#2607)

* Using docker images from hub

*  - (issue GeoNode#2070) Layer name cannot be a style name already on Geoserver

*  - (issue GeoNode#2075) Add lxml back into paver win_install_deps

* adding missing trans for GeoNode#1769

* sycing tsf

* use layer instance to revoke layer permissions, fixes GeoNode#2531 (GeoNode#2614)

use layer instance instead of resourcebase to revoke permission, fixes GeoNode#2531

* include data files in downstream installations should fix GeoNode#2452 (GeoNode#2615)

include data files in downstream installations should fix GeoNode#2452

* - Modify some settings and code to make geonode able to use QGIS Server as backend.
- Add some views, templates and resources to make geonode able to use QGIS Server as backend.
- Add sample setting to use QGIS Server backend.

* should fix GeoNode#2464 (GeoNode#2616)

bump haystack versions to support django 1.8

* Fixed migrations, settings.py, and pavement for development

* pavement: moved migrate_apps to yaml

* fix GeoNode#1718

* make debug default to true

* sycing for GeoNode#1769, after GeoNode#2612 merge

* fix upload issue, check if the js property exists first

* hierarchical tags support

* fix indentation

* add freeboard to requirements.txt

* bump taggit

* Don't pin versions in setup.py use >= or <=

Pinning should be done in requirements.txt

Reasoning is explained in https://packaging.python.org/requirements/

* Pin versions in requirements.txt

* Set to 2.5 final version for release

* update keywords integration test

* fix filename

* we dont use submodules anymore

* Updated instruction for configure ssl on geonode: with version 2.4 some path are changed (GeoNode#2571)

and is not necessary the step regarding python and java configuration because ssl is managed by apache mod_wsgi

* 2.5.0 is out, move master branch to 2.5.1-dev

* Delete fig.yml

* Do not flake8 migrations

* python-properties is now usually pre-installed in Ubuntu

And GeoNode works well with Ubuntu 14.04

* Fix typos in installation dev docs

* Fix GeoGig stats/logs URL for Layer info page. (GeoNode#2633)

The repoURL was using the GeoServer DataStore connection_parameters
value to contstruct the GeoGig repository URL, which looks like:

   http://<server>/geoserver/geogig/geoserver://<repo name>

The statistics and logs URL for GeoGig needs to use a repo URL like
this:

   http://<server>/geoserver/geogig/repos/<repo name>

* Do not pin versions on setup.py

* Upgrade django mptt

* Use a pattern for adding package data, fixes missing fixtures on packages

* Set development version for 2.5.3

* Add volume data container to geoserver

* Exclude remote services layers from map download feature.

* Make download links open in new tab (GeoNode#2642)

* Fix race condition during Raster upload/import

  - Removing a duplicate block of code for PENDING raster imports
  - Don't re-send the Import request if it's already been sent

* Add variables for building base_url

* local_settings.py should be called only once

* Provide defaults for optional ogc_server_settings (GeoNode#2647)

* Provide defaults for optional ogc_server_settings 

MAPFISH_PRINT_ENABLED, PRINT_NG_ENABLED, GEONODE_SECURITY_ENABLED, GEOGIG_ENABLED

* fixup

* Move master to 2.5.4

* Minor text fix for profile update

* fix QGIS path log when using qgis server backend (GeoNode#2648)

* Bugfix for updating style through UI

* Clear comment modal after adding comment

* Issue GeoNode#2401: GNIP: GeoNode Backup and Restore (GeoNode#2651)

* GeoNode Backup and Restore Management Commands

 - GeoServer Vectorial/Raster Data Full Backup&Restore

 - Backup & Restore Admin Page

 Bakup&Restore Admin Gui migrations

 - Document headers

 - Backup&Restore PR logging and minor fixes

 - fix migration issue

 - Backup & Restore Documentation

 - Minot update Backup & Restore docs

* Update backup.py

* Respond correctly when user removes the last related file for a layer upload (GeoNode#2660)

* bump guardian and manage the anonymous pk internally

* use names instead of slugs for keywords

* ini file was not an allowed file type for MANIFEST.in. This was causing the settings.ini file to not be included in the package.

* Fix small bug where {{ repoUrl }} was being used as geogig email due to incorrect input type in HTML

* Fixing missing and broken links to actions on the user's activity page

* Updating pycsw to the latest released version 2.0.2

* bump pycsw

* Update conf.py

* Update setup.py

* Update conf.py

* Update conf.py

* Update requirements.txt

* Update conf.py

*  - Fix the docs

* Updating Choose Files button to allow user to reupload the same file again without having to use Clear (GeoNode#2681)

* Use new UserActivity view (GeoNode#2680)

* truncate upload names over length to allow upload (GeoNode#2671)

One approach to the problem described in
GeoNode#2646

This patch uses the Django field definition to get the length, so this can be
controlled from that one place and won't get out of sync.

* remove mutable default values for kwargs (GeoNode#2668)

This subtle misunderstanding of Python tends to cause confusing bugs.

Suppose you have a definition statement like 'def function(keys=[]): ...'
This def statement is evaluated once, at import time, to create a function
object. It is at this time that '[]' is evaluated, and it is that ONE
list object which is retained as the default value for 'keys'.
Python doesn't store the expression and re-evaluate it every time the
default is needed, it evaluates it once at import time and the resulting
value is passed for every call where that arg is not given.

To explain this with code, the effect is something like this:

    default_keys = []
    def function(keys=default_keys):
        ...

When function() is called with a value for keys, no problem will be seen.
Even when it is called with no value for keys, and we default to that list,
you might not see a problem. The problem that tends to happen unpredictably
is that the mutable default value is mutated. Those changes are persistent
and globally visible to any call of the function which uses the default.

Then the default value is non-empty. Or information leaks across calls
that shouldn't be leaking. Or the same dict keeps growing forever.

To avoid this, we can use a sentinel value such as None, and then check
for that value in the body of the function. It is a cheap safeguard against
situations that can be very annoying.

* first of many docs fixes (GeoNode#2684)

* Fix the Resources section on profile detail page to work when no data exists in the category yet

* Incubation documentation fixes (GeoNode#2687)

* Fixed dead link [ci skip]

* Fixed some doc links [ci skip]

* Fixed License header in some po files

* Fixed packaging files copyright

* Added OSGeo copyright and CC-SA in documentation

* Fixed bug breaking Group Activity view

* Updated changelog for version 2.5.4

* Updating release info and some improvements to pavement for Xenial releases

* Fixing travis build

* previous adjustments to the setup.py and MANIFEST.ini were not allowing certain filetypes to be packaged, loading.gif was the most noticeable.

* Updated changelog for version 2.5.5

* Update release version

* Make resourcebase info panel template extendable

* Fixing syntax error: celery_app (GeoNode#2697)

* Sync auto generate avatar sizes with avatar sizes used in templates (GeoNode#2693)

*  2696 Part 1 - GNIP - Better management of View and Download permissions.

 2696 Part 1 - GNIP - Better management of View and Download permissions.

 - Fix flake8 formatting issues

* Updated AUTHORS list

* Update views.py

- Fix minor typo with brackets

* Add ol3-react based viewer as default map viewer

Add a new template for editing/showing new maps and change just the
viewer to use the new ol3-react based viewer
add all kinds of assets/deps for the ol3-react based viewer
ol3-cesium is a little tedious but is needed for 3d globe
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
5 participants
You can’t perform that action at this time.