Releases: facebook/facebook-python-business-sdk
Releases · facebook/facebook-python-business-sdk
Fixed DPA Objects
Fixed a few minor issues with new DPA Objects
- id field missing in ProductAudience
- Fixed add_user/remove_user calls in ProductCatalog
DPA and Business Manager
- Added Business object
- Added DPA objects
- Added rf_prediction_id to AdSet
- Objects that can archive will POST status as delete instead of issuing a DELETE request
Adding more tests, new product features
- Added more integration tests
- Delete remote objects after tests run
- Fixed get_ad_images() failing
- Added CanValidate mixin for remote_validate() feature
- Fix printing nested AbstractObjects
Stability and cleanup
- Added thumbnail_url to AdCreative object
- Added AutoComplete object
- Added get_by_ids() method e.g.
AdSet.get_by_ids(ids=[123123,123123])
- Added the ability to define default account ID e.g.
FacebookAdsApi.set_default_account_id('act_123123')
- Python 3 and 2.6 dict comprehension compatibility (thanks @agriffis!)
- Failing tests fixed
- Fixed bug with ABSOLUTE_OCPM not supplying API with allcaps (as speced)
Bumped version to 2.2.2
- Calling
del object['key']
will correctly update the change history, thus removing the key as a parameter in API request. CanArchive
mixin has been added which allows campaigns, ad sets, and ad groups to be archived by callingremote_archive()
- Error handling has been much improved
try:
account = AdAccount('invalid-account-id')
account.remote_read()
except FacebookRequestError, e:
print e.api_error_message()
print e.api_error_code()
Check the exceptions.FacebookRequestError object for more method calls!
- Fixed
activities
endpoints. - You can now reference
EdgeIterator
objects as if they're arrays:
adgroups = account.get_ad_groups() # returns EdgeIterator object
print adgroups[0]
print adgroups[1]
- Calling
remote_update()
will now return a correctly updated object without having to callremote_read()
again. Note: This is optimistic-- we do not re-fetch the data.
adgroup = AdGroup(123123)
adgroup.remote_read(fields=['name'])
print adgroup['name'] # Outputs "Hello World"
adgroup['name'] = 'Changed Name'
print adgroup.remote_update()
Output:
<AdGroup> {
"name": "Changed Name"
}
CustomAudience
fields are now all defined- Examples for
CustomAudience
have been added.
Quality of life improvements and bug fixes
- You can now optionally specify an access token inside your config.json to make it easier to run tests.
- Object collections are friendlier to native python functions:
print adaccount_object
orprint len(adaccount.get_ad_groups())
will behave as expected and not spit out random strings - You can also now call .total() on object collections:
print adaccount.get_ad_groups().total()
will output total number of ad groups for that account (not just what's in the array) - Pagination has been tweaked, pagination can be done with the following code:
adgroups = account.get_ad_groups(fields=['name'])
while True:
for adgroup in adgroups:
print adgroup['name']
if not adgroups.load_next_page():
break
- Fixed method calls for endpoints that did not return cursor-friendly responses: get_conversion_stats() or get_stats() (which just return JSON objects).
Releasing version to 2.2.0
- Added changes for Custom Audiences
- Added support for Reach Frequency Predictions
- Some code organization
Fixed install regression caused by 0.2.1 README change
Merge pull request #9 from bensigelman/master detect file presence correctly
Fixed installation using pip
- pip install relying on old README file fixed
Adding more parity with PHP SDK
- Added ObjectStorySpec and specs module
- Moved integration tests to their own file
- Added ValidatesFields mixin
- Added bootstrap.auth() function to make using REPL easier
- Deprecated remote_create_with_filename
- Deprecated AbstractObject child method
- Renamed _read_update() to _set_data()