Source code for easyadwords.utils

from suds.sudsobject import asdict
from datetime import datetime, timedelta


[docs]def serialize_soap_resp(resp): """ Convert Adwords SOAP response to serializable dict :param resp: SOAP response :return: Dictionary representation of response """ out = {} for k, v in asdict(resp).iteritems(): if hasattr(v, '__keylist__'): out[k] = serialize_soap_resp(v) elif isinstance(v, list): out[k] = [] for item in v: if hasattr(item, '__keylist__'): out[k].append(serialize_soap_resp(item)) else: out[k].append(item) else: try: out[k] = v.encode('utf-8') except AttributeError: out[k] = v return out
[docs]def date_range(start, end, ascending=True, date_format='%Y-%m-%d'): """ Simple datetime generator for dates between start and end (inclusive). :param start: Date to start at. :type start: datetime object or string representation of datetime. :param end: Date to stop at. :type end: datetime object or string representation of datetime. :param ascending: Toggle sorting of output. :type ascending: boolean :param date_format: If input is string, denotes string datetime format to convert from. :return: generator object for naive datetime objects """ if isinstance(start, str): start_date = datetime.strptime(start, date_format) else: start_date = start.replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) if isinstance(end, str): end_date = datetime.strptime(end, date_format) else: end_date = end.replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) assert end_date >= start_date days_apart = (end_date - start_date).days + 1 for i in (range(0, days_apart) if ascending else range(0, days_apart)[::-1]): yield start_date + timedelta(i)