Enhancement (DELETE) and Bug fixes (around POST response)

1. In fetch(), the check for negative response to raise HALNavigatorError,
       if raise_exc and not self.response:
            raise HALNavigatorError(self.response.text,
                                    status=self.status,
                                    nav=self,
                                    response=self.response,
            )    
   Is not too late in the flow?. I feel it should be checked before processing the response body 

2. PostResponse can have properties, hence implemented __call__ to return properties

3. DELETE method is similar to POST from Navigator perspective (non-idempotent) 
  Hence,
         a) Reused logic from POST to implement support for DELETE
         b) renamed PostResponse to HALResponse 
         c) renamed  create() to post() for clarity
   In order to provide backward compatibility, I created alias "create"  to "post"

4. HALNavigator should not allow POST if the uri is templated. The check for templated_uri 
   was missing. Created a wrapper function (@template_uri_check) to re-use for all methods - GET/POST/DELETE

TODO:
1. Enforce templated_uri check for all HTTP calls. Add test coverage 
2. a link usually have 'method' property (default to 'GET'), which can be used to restrict http operations. this helps to raise NotImplementedError and can have a controlled default function e.g autofetch
Please see my comment on Create.
On 31 Oct 2014 08:35, "Josh Kuhn" <notifications@github.com> wrote:

> In restnavigator/halnav.py:
>
> >              return self._copy(uri=response.headers['Location'])
> >          else:
> > -            return PostResponse(parent=self, response=response)
> > +            # response.status_code  in [httplib.OK, httplib.NO_CONTENT]
> > +            # Expected only httplib.OK has some description
> > +            return HALResponse(parent=self, response=response)
> > +
> > +    create = post
> > +
> > +    @template_uri_check
> > +    #@method_validation(allowed_list=['DELETE'])
> > +    def delete(self,
>
> delete, patch and put are all good additions I've been meaning to add in.
> I think delete is fine as the name for this method (see my comments on
> post vs. create). I think put might be better as "set", and patch is
> probably fine as well. delete and patch are commonly understood correctly,
> so I don't see a benefit to renaming them. get/post/put are all abused in
> various ways commonly so I think it's better to use different vocabulary
> for them
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/deontologician/rest_navigator/pull/8/files#r19656226>.
>