From 8ab1011021ca0736bb4b004437633a3a4545c5f5 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Fri, 21 Nov 2014 13:33:16 +0000 Subject: Better error if Open311 returns nil service list. If an Open311 server responded with e.g. '', you got a strange hash error as the code treated it as one undef service. Spot this at the same point we check anything was returned. Also remove a couple of warnings due to lc of a maybe-undef variable. --- perllib/Open311/PopulateServiceList.pm | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/perllib/Open311/PopulateServiceList.pm b/perllib/Open311/PopulateServiceList.pm index c47ab143d..0f6e32893 100644 --- a/perllib/Open311/PopulateServiceList.pm +++ b/perllib/Open311/PopulateServiceList.pm @@ -40,11 +40,11 @@ sub process_body { $self->_check_endpoints; my $list = $open311->get_service_list; - unless ( $list ) { - my $id = $self->_current_body->id; - my $mapit_url = mySociety::Config::get('MAPIT_URL'); - my $areas = join( ",", keys %{$self->_current_body->areas} ); + unless ( $list && $list->{service} ) { if ($self->verbose >= 1) { + my $id = $self->_current_body->id; + my $mapit_url = mySociety::Config::get('MAPIT_URL'); + my $areas = join( ",", keys %{$self->_current_body->areas} ); warn "Body $id for areas $areas - $mapit_url/areas/$areas.html - did not return a service list\n"; warn $open311->error; } @@ -156,9 +156,10 @@ sub _handle_existing_contact { } } - if ( $contact and lc( $self->_current_service->{metadata} ) eq 'true' ) { + my $metadata = $self->_current_service->{metadata} || ''; + if ( $contact and lc($metadata) eq 'true' ) { $self->_add_meta_to_contact( $contact ); - } elsif ( $contact and $contact->extra and lc( $self->_current_service->{metadata} ) eq 'false' ) { + } elsif ( $contact and $contact->extra and lc($metadata) eq 'false' ) { $contact->update( { extra => undef } ); } @@ -192,7 +193,8 @@ sub _create_contact { return; } - if ( $contact and lc( $self->_current_service->{metadata} ) eq 'true' ) { + my $metadata = $self->_current_service->{metadata} || ''; + if ( $contact and lc($metadata) eq 'true' ) { $self->_add_meta_to_contact( $contact ); } @@ -205,7 +207,7 @@ sub _create_contact { sub _add_meta_to_contact { my ( $self, $contact ) = @_; - print "Fetching meta data for $self->_current_service->{service_code}\n" if $self->verbose >= 2; + print "Fetching meta data for " . $self->_current_service->{service_code} . "\n" if $self->verbose >= 2; my $meta_data = $self->_current_open311->get_service_meta_info( $self->_current_service->{service_code} ); if ( ref $meta_data->{ attributes }->{ attribute } eq 'HASH' ) { -- cgit v1.2.3 From 2bab62e9e6276cd3e8b0aaddf3a1363c1efa726c Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Wed, 26 Nov 2014 12:14:53 +0000 Subject: Only have jurisdiction_id in request if present. So don't request '...services.xml?jurisdiction_id=' as that can lead to an error from an Open311 server that expects either no parameter at all or a stated jurisdiction_id. --- perllib/Open311.pm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/perllib/Open311.pm b/perllib/Open311.pm index 1ab60bd4e..424054f53 100644 --- a/perllib/Open311.pm +++ b/perllib/Open311.pm @@ -368,7 +368,8 @@ sub _get { my $uri = URI->new( $self->endpoint ); - $params->{ jurisdiction_id } = $self->jurisdiction; + $params->{ jurisdiction_id } = $self->jurisdiction + if $self->jurisdiction; $uri->path( $uri->path . $path ); $uri->query_form( $params ); @@ -412,12 +413,11 @@ sub _post { my $uri = URI->new( $self->endpoint ); $uri->path( $uri->path . $path ); - my $req = POST $uri->as_string, - [ - jurisdiction_id => $self->jurisdiction, - api_key => $self->api_key, - %{ $params } - ]; + $params->{jurisdiction_id} = $self->jurisdiction + if $self->jurisdiction; + $params->{api_key} = $self->api_key + if $self->api_key; + my $req = POST $uri->as_string, $params; $self->debug_details( $self->debug_details . "\nrequest:" . $req->as_string ); -- cgit v1.2.3