John
John

Reputation: 2147

submit request (post) internally in python-eve

I have a resource in eve e.g. ABC, I want to manipulate another resource e.g. BCD when some condition meet while I am posting a new item to ABC, I know I can hook the event for post/pre_POST_ABC but is there a 'internal' way to do post on BCD without going through via the HTTP again?

Upvotes: 3

Views: 2269

Answers (1)

Nicola Iarocci
Nicola Iarocci

Reputation: 6576

In your callback function you could either:

A) use the data driver to store data directly to the database

Something like this:

def update_ABC(request, payload):    
    accounts = app.data.driver.db['abc_collection']
    account = accounts.insert(docs)

app = Eve()
app.on_post_POST_ABC += update_ABC
app.run()

Would do the trick. You would be bypassing the framework this way, and storing directly on the database.

B) Use app.test_client.post() to POST through directly through the application.

app.test_client().post('/bcd', json.dumps({"field":"value"}, content_type='application_json'))

This is probably a better option since the request goes through the framework (meta fields like data_created are handled for you.)

Update: With v0.5+ you can now use post_internal to achieve the same result. There are equivalent internal methods available for other CRUD methods as well.

Upvotes: 7

Related Questions