Refactored campaign.py to use datastore