def __getstate__(self): """ For pickling the report when passing it to Celery. """ logging = get_task_logger() # logging lis likely to happen within celery. # pickle only what the report needs from the request object request = dict( GET=self.request.GET, META=dict( QUERY_STRING=self.request.META.get('QUERY_STRING'), PATH_INFO=self.request.META.get('PATH_INFO') ), datespan=self.request.datespan, couch_user=None ) try: request.update(couch_user=self.request.couch_user.get_id) except Exception as e: logging.error("Could not pickle the couch_user id from the request object for report %s. Error: %s" % (self.name, e)) return dict( request=request, request_params=self.request_params, domain=self.domain, context={} )
def __setstate__(self, state): """ For unpickling a pickled report. """ logging = get_task_logger() # logging lis likely to happen within celery. self.domain = state.get('domain') self.context = state.get('context', {}) class FakeHttpRequest(object): GET = {} META = {} couch_user = None datespan = None request_data = state.get('request') request = FakeHttpRequest() request.GET = request_data.get('GET', {}) request.META = request_data.get('META', {}) request.datespan = request_data.get('datespan') try: couch_user = CouchUser.get(request_data.get('couch_user')) request.couch_user = couch_user except Exception as e: logging.error("Could not unpickle couch_user from request for report %s. Error: %s" % (self.name, e)) self.request = request self._caching = True self.request_params = state.get('request_params') self._update_initial_context()
def __setstate__(self, state): """ For un-pickling the DateSpan object. """ logging = get_task_logger( __name__) # logging is likely to happen within celery try: self.startdate = dateutil.parser.parse( state.get('startdate')) if state.get('startdate') else None self.enddate = dateutil.parser.parse( state.get('enddate')) if state.get('enddate') else None except Exception as e: logging.error( "Could not unpack start and end dates for DateSpan. Error: %s" % e) self.format = state.get('format', ISO_DATE_FORMAT) self.inclusive = state.get('inclusive', True) self.timezone = pytz.utc self.is_default = state.get('is_default', False) self.max_days = state.get('max_days') try: self.timezone = pytz.timezone(state.get('timezone')) except Exception as e: logging.error("Could not unpack timezone for DateSpan. Error: %s" % e)
def __setstate__(self, state): """ For un-pickling the DateSpan object. """ logging = get_task_logger(__name__) # logging is likely to happen within celery try: self.startdate = dateutil.parser.parse(state.get('startdate')) if state.get('startdate') else None self.enddate = dateutil.parser.parse(state.get('enddate')) if state.get('enddate') else None except Exception as e: logging.error("Could not unpack start and end dates for DateSpan. Error: %s" % e) self.format = state.get('format', DEFAULT_DATE_FORMAT) self.inclusive = state.get('inclusive', True) self.timezone = pytz.utc self.is_default = state.get('is_default', False) try: self.timezone = pytz.timezone(state.get('timezone')) except Exception as e: logging.error("Could not unpack timezone for DateSpan. Error: %s" % e)
def get_logger(self, *args, **kwargs): return get_task_logger(*args, **dict(kwargs, name=self.uid))
def setUp(self): logger = get_task_logger() logger.handlers = [] logging.root.manager.loggerDict.pop(logger.name, None) self.uid = uuid()
from celery.log import get_task_logger from celery.task import task from couchdbkit.exceptions import ResourceNotFound from corehq.apps.migration.post import post_data from corehq.apps.migration.util.submission_xml import prepare_for_resubmission from corehq.apps.users.models import CommCareUser from couchforms.models import XFormInstance logging = get_task_logger() def _resubmit_form(url, form, user_id_mapping, owner_id_mapping): xml = prepare_for_resubmission(form.get_xml(), user_id_mapping, owner_id_mapping, salt=url) if form.get_id in xml: return "", ["New form still has old instanceID: %s" % form.get_id] results, errors = post_data(xml, url, submit_time=form.received_on) return results, errors def check_form_domain(form, domain): if form.domain == domain: return True else: raise Exception("Form %s has mismatch between user's domain (%s) and form's domain (%s)" % ( form.get_id, domain, form.domain )) def forms_for_users(user_ids, domain): """ The current implementation loads all form objects into memory and sorts them by date You could stream instead by going through all submissions sorted by date in couch and submitting the ones submitted by a user in user_mapping