Hi Christian,

Here is the core of the extension.  The `model` and `uri_object_key` issues 
are due to the resources.review.get_object() request.  Maybe I should be 
going directly to the database model instead of going through the webapi?

class SampleExtensionResource(WebAPIResource):
    """Resource for review voting"""
    name = 'ballot_box'
    uri_name = 'ballot_box'
    allowed_methods = ('POST')


    def has_access_permissions(self, request, *args, **kwargs):
        return review_request.is_accessible_by(request.user)
    
    def create(self, request, *args, **kwargs):
        
        try:
            # v--- problem is there
            review = resources.review.get_object(request, *args, **kwargs)
        except ObjectDoesNotExist:
             # TODO - need to return a proper failure message here
            return HttpResponse("Unable to lookup review")


        if not resources.review.has_modify_permissions(request, review):
            return self.get_no_access_error(request.user)


        comment_kwargs = {
                'body_top_text_type': 'plain',
                'body_bottom': '', 'body_bottom_text_type': 'plain',
                'public': 1,
                'ship_it': True,
                'body_top': "TODO - Add real comment here"
        }
        new_comment = self.create_comment(fields=(), review=review, **
comment_kwargs)
        review.general_comments.add(new_comment)


        # TODO - probably need a json response
        response = "OK"
        return HttpResponse(response)

Regards,
Eric

On Friday, May 6, 2016 at 10:07:31 PM UTC+12, Christian Hammond wrote:
>
> Hi Eric,
>
> The `model` and `uri_object_key` are configurations for a resource's 
> implementation, and aren't related to the data provided by the caller.
>
> The `model` attribute is optionally used to associate a WebAPIResource 
> subclass with a particular database model. If set, many of the operations 
> (GET requests to lists or to objects, DELETEs, etc.) are implemented for 
> you, but otherwise, you have to implement those yourself (by overriding 
> get(), get_list(), delete(), etc.).
>
> `uri_object_key` defines the name of the capture group in the URL's regex 
> that captures the iD used to look up the appropriate object (defined by 
> `model`) in the database.
>
> You don't need to do anything with Backbone to make use of the API. a 
> $.post() should be fine. However, it sounds like maybe the WebAPIResource 
> isn't implemented fully.
>
> Can you show me the code you've written, how you're calling into the API, 
> and what the results are when you do so? We can help you write the 
> WebAPIResource to do what you need.
>
> Christian
>
> -- 
> Christian Hammond
> President/CEO of Beanbag <https://www.beanbaginc.com/>
> Makers of Review Board <https://www.reviewboard.org/>
>
> On Wed, May 4, 2016 at 9:04 PM, Eric Holmberg <[email protected] 
> <javascript:>> wrote:
>
>> I have created a WebAPIResource extension based upon the instructions in 
>> https://www.reviewboard.org/docs/manual/2.0/extending/extensions/webapi/ 
>> which is called based upon the user clicking on a menu item which was 
>> created by ReviewRequestDropdownActionHook.
>>
>> How do I actually do the POST call?
>>
>> I tried just the usual jQuery $.post(...), but djblets/webapi/
>> resources.base.py tries to get the "model" and "uri_object_keys" and 
>> fails since they are not part of the post data.  It looks like I need to 
>> create a view and model by deriving from Backbone.View.extend 
>> Backbone.Model.extend, 
>> but I haven't found any concise examples that I can understand well enough 
>> to use as a template.
>>
>> My use case:
>>
>>    1. Based upon a UI event, post to the WebAPIResource
>>    2. In the WebAPIResource.create method:
>>       1. Lookup current review, post a comment based upon the approval 
>>       request (similar to a ship-it comment)
>>       2. Log vote into a new database model
>>       3. Query the existing votes and if everything looks good, trigger 
>>       a merge of the change or rejection email
>>    
>>
>> Note that I'm not a Javascript or web programmer since my background is 
>> C++ and Python, so I'm sorry if my question is elementary.
>>
>> Regards,
>> Eric
>>
>>
>>
>>
>> -- 
>> Supercharge your Review Board with Power Pack: 
>> https://www.reviewboard.org/powerpack/
>> Want us to host Review Board for you? Check out RBCommons: 
>> https://rbcommons.com/
>> Happy user? Let us know! https://www.reviewboard.org/users/
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "reviewboard" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
Supercharge your Review Board with Power Pack: 
https://www.reviewboard.org/powerpack/
Want us to host Review Board for you? Check out RBCommons: 
https://rbcommons.com/
Happy user? Let us know! https://www.reviewboard.org/users/
--- 
You received this message because you are subscribed to the Google Groups 
"reviewboard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to