Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I use the edit_post function in PyTumblr?

I am trying to edit some posts in my tumblr blog using PyTumblr and the edit_post function, but I can't figure out exactly what parameters are needed. I try to put the tags parameter but it's not accepted.

I have tried this:

client = pytumblr.TumblrRestClient(CONSUMER_KEY, CONSUMER_SECRET,
                                   OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
client.edit_post('nameofblog', {'id': 39228373})

And it gives me the following error:

TypeError: edit_post() takes exactly 2 arguments (3 given)

Any ideas?

This is the function:

    def edit_post(self, blogname, **kwargs):
            """
    Edits a post with a given id

    :param blogname: a string, the url of the blog you want to edit
    :param tags: a list of tags that you want applied to the post
    :param tweet: a string, the customized tweet that you want
    :param date: a string, the GMT date and time of the post
    :param format: a string, sets the format type of the post. html or markdown
    :param slug: a string, a short text summary to the end of the post url

    :returns: a dict created from the JSON response
    """
      url = "/v2/blog/%s/post/edit" % blogname
      return self.send_api_request('post', url, kwargs)
like image 542
IordanouGiannis Avatar asked Dec 11 '13 11:12

IordanouGiannis


2 Answers

The PyTumblr library offers a thin layer over the Tumblr REST API, and all arguments apart from the blog name should be passed in as keyword arguments.

The TumblrRestClient.edit_post() method, then, acts as a proxy for the /post/edit endpoint, and it takes all the same parameters.

As such, you'd call it like:

client = pytumblr.TumblrRestClient(CONSUMER_KEY, CONSUMER_SECRET,
                               OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
client.edit_post('nameofblog', id=39228373)

That is not to say that if you have a dictionary object with post details, you cannot make use of that.

If you wanted to set the title of a given post id, you could use:

post = {'id': 39228373, 'title': 'New title!'}
client.edit_post('nameofblog', **post)

Here the post dictionary is being applied to the .edit_post() method call as separate keyword arguments using the ** syntax. Python then takes each key-value pair in the input dictionary and applies that pair as a keyword argument.

You should be able to set any of the parameters applicable to your post type, listed under the posting documentation.

The problem then, is that the .edit_post() method leaves the valid_params argument to self. send_api_request() to the default empty list, leading to a guaranteed validation exception for anything you pass in. This must be a bug, and I commented on Mike's issue to point this out to the developer.

like image 68
Martijn Pieters Avatar answered Oct 20 '22 02:10

Martijn Pieters


Passing an ID is not well documented, so I asked:

client.edit_post("nameofblog", id=39228373, other="details", tags=["are", "cool"])

Ref: http://github.com/tumblr/pytumblr/issues/29

like image 1
mikedidthis Avatar answered Oct 20 '22 02:10

mikedidthis