Skip to content

Commit

Permalink
Merge pull request GeoNode#115 from cga-harvard/legacy-rp-update
Browse files Browse the repository at this point in the history
Query Error fix and Django Admin Update
  • Loading branch information
capooti committed May 4, 2016
2 parents bae6989 + 5c03291 commit 3218d7b
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 21 deletions.
55 changes: 50 additions & 5 deletions geonode/contrib/datatables/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from django.contrib import admin
from geonode.maps.models import LayerAttribute
from django import forms
from geonode.maps.models import Layer, LayerAttribute
from .models import DataTable, DataTableAttribute, TableJoin, JoinTarget, JoinTargetFormatType, GeocodeType, LatLngTableMappingRecord
import string

class DataTableAdmin(admin.ModelAdmin):
model = DataTable
Expand All @@ -23,26 +25,69 @@ class DataTableAttributeAdmin(admin.ModelAdmin):
class LatLngTableMappingRecordAdmin(admin.ModelAdmin):
search_fields = ('title',)
list_display = ('datatable', 'lat_attribute', 'lng_attribute', 'layer', 'mapped_record_count', 'unmapped_record_count', 'created')
list_filter = ('datatable', 'layer', )
list_filter = ('datatable',)# 'layer', )



class TableJoinAdmin(admin.ModelAdmin):
model = TableJoin


class JoinTargetAdminForm(forms.ModelForm):
"""
Limit the JoinTarget Layer and LayerAttribute choices.
(If not limited, the page can take many minutes--or never load
e.g. listing 20k+ layers and all of the attributes in those layers
)
"""
def __init__(self, *args, **kwargs):
super(JoinTargetAdminForm, self).__init__(*args, **kwargs)

selected_layer_id = kwargs.get('initial', {}).get('layer', None)

# Is this an existing/saved Join Target?
#
if self.instance and self.instance.id:
# Yes, limit choices to the chosen layer and its attributes
#
self.fields['layer'].queryset = Layer.objects.filter(\
pk=self.instance.layer.id)
self.fields['attribute'].queryset = LayerAttribute.objects.filter(\
layer=self.instance.layer.id)

elif selected_layer_id and selected_layer_id.isdigit():
self.fields['layer'].queryset = Layer.objects.filter(\
pk=selected_layer_id)
self.fields['attribute'].queryset = LayerAttribute.objects.filter(\
layer=selected_layer_id)


elif 'initial' in kwargs:
# We can't "afford" to list everything.
# Don't list any layers or their attributes
# - An admin template instructs the user on how
# to add a new JoinTarget via the Layer admin
#
self.fields['layer'].queryset = Layer.objects.none()
self.fields['attribute'].queryset = LayerAttribute.objects.none()



class JoinTargetAdmin(admin.ModelAdmin):
model = JoinTarget
form = JoinTargetAdminForm
list_display = ('name', 'layer', 'attribute', 'geocode_type', 'expected_format', 'year')
readonly_fields = ('return_to_layer_admin', )

def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'attribute':
if request.GET.get('layer', None) is not None:
layer_id = request.GET.get('layer', 'nope')
if layer_id.isdigit():
kwargs["queryset"] = LayerAttribute.objects.filter(
layer=request.GET.get('layer'))
return super(JoinTargetAdmin, self).formfield_for_foreignkey(
db_field, request, **kwargs)
return super(JoinTargetAdmin, self).formfield_for_foreignkey(\
db_field, request, **kwargs)


class JoinTargetFormatTypeAdmin(admin.ModelAdmin):
search_fields = ('name',)
Expand Down
26 changes: 13 additions & 13 deletions geonode/contrib/datatables/db_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,35 +10,35 @@
def get_datastore_connection_string(url_format=False):
"""
Create a connection string to access the database directly
Use: settings.DATABASES[CHOSEN_DB_SETTING]
e.g. "dbname='wmdb' user='username' password='the-pw' port=123 host=db.hostname.edu"
"""
global DB_PARAM_NAMES, CHOSEN_DB_SETTING
assert hasattr(settings, 'DATABASES'), "settings.DATABASES attribute not found in the settings file."
assert settings.DATABASES.has_key(CHOSEN_DB_SETTING)\
, "settings.DATABASES does not have a '%s' key. Please check your settings file." % CHOSEN_DB_SETTING

db_params = settings.DATABASES[CHOSEN_DB_SETTING]
db_params = settings.DATABASES[CHOSEN_DB_SETTING]

for attr in DB_PARAM_NAMES:
assert db_params.has_key(attr), "Check your settings file. DATABASES['default'] does not specify a '%s'" % attr


if url_format:
# connection_string = "postgresql://%s:%s@%s:%s/%s" % (db['USER'], db['PASSWORD'], db['HOST'], db['PORT'], db['NAME'])
# connection_string = "postgresql://%s:%s@%s:%s/%s" % (db['USER'], db['PASSWORD'], db['HOST'], db['PORT'], db['NAME'])
conn_str = "postgresql://%s:%s@%s:%s/%s" % \
(db_params['USER'], db_params['PASSWORD'], db_params['HOST'], db_params['PORT'], db_params['NAME'])
else:
(db_params['USER'], db_params['PASSWORD'], db_params['HOST'], db_params['PORT'], db_params['NAME'])
else:
conn_str = """dbname='%s' user='%s' password='%s' port=%s host='%s'""" % \
tuple([db_params.get(x) for x in DB_PARAM_NAMES])



#print 'conn_str', conn_str
return conn_str

'''
"dbname='" +
db['NAME'] +
Expand All @@ -51,4 +51,4 @@ def get_datastore_connection_string(url_format=False):
" host='" +
db['HOST'] +
"'"
'''
'''
2 changes: 1 addition & 1 deletion geonode/contrib/datatables/name_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def get_unique_viewname(layer_name, table_name):
attempts.append(unique_vname) # save the attempt

# Is this a unique name? Yes, return it.
if not does_table_name_exist(table_name):
if not does_table_name_exist(unique_vname):
return unique_vname

# Not unique. Add 2 to 11 random chars to end of table_name
Expand Down
3 changes: 2 additions & 1 deletion geonode/contrib/datatables/utils_joins.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,10 @@ def does_table_name_exist(table_name):
stmt_count = ("SELECT COUNT(table_name) "
"FROM information_schema.tables "
"WHERE table_schema='public' "
"AND table_name = '{0}'';".format(\
"AND table_name = '{0}';".format(\
table_name))

#print 'stmt_count', stmt_count
conn = psycopg2.connect(get_datastore_connection_string())

try:
Expand Down
2 changes: 1 addition & 1 deletion geonode/contrib/dataverse_layer_metadata/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class DataverseLayerMetadataAdmin(admin.ModelAdmin):
form = DataverseLayerMetadataAdminForm
save_on_top = True
search_fields = ('map_layer__name', 'dataverse_name', 'dataset_name', 'datafile_label', 'dataset_description')
list_display = ('map_layer', 'dataset_name', 'datafile_id', 'datafile_label', 'dataverse_name', )
list_display = ('map_layer', 'dataset_name', 'datafile_id', 'datafile_label', 'dataverse_name', 'modified', 'created')
list_filter = ('dataset_is_public', 'dataverse_name', )
readonly_fields = ('modified', 'created', 'dataset_is_public', 'datafile_create_datetime', 'datafile_expected_md5_checksum' )
fieldsets = (
Expand Down
29 changes: 29 additions & 0 deletions geonode/templates/admin/datatables/jointarget/change_form.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{% extends "admin/change_form.html" %}

{% block pretitle %}
<div id="go-to-layer" style="display:block; border:2px solid #006699; padding:10px; padding:15px; margin:10px 0; width:660px;">
<p id="msg-different-layer" style="display:none;">To choose a different Layer:</p>
<p id="msg-new-jointarget" style="display:none;">To choose a new Join Target:</p>
<ul>
<li>Go to the <a href="{% url admin:maps_layer_changelist %}">Layer admin</a></li>
<li>Click "<b>Add as Join Target</b>" next to your chosen layer</li>
</ul>
</div>
<script type="text/javascript">
$(document).ready(function () {

if ($("#id_layer option:selected").val().length > 0){
$('#msg-different-layer').show();
//$('#go-to-layer').css("border","2px solid #006699");
} else {
$('#msg-new-jointarget').show();
$('#go-to-layer').css("border","2px solid red");
}


//if(window.location.href.indexOf("add") > -1) {
//
//}
});
</script>
{% endblock %}

0 comments on commit 3218d7b

Please sign in to comment.