def populate_poll_poll_date(apps, schema_editor): Poll = apps.get_model("polls", "Poll") Org = apps.get_model("orgs", "Org") agent = getattr(settings, "SITE_API_USER_AGENT", None) host = settings.SITE_API_HOST for org in Org.objects.all(): temba_client = TembaClient(host, org.api_token, user_agent=agent) api_flows = temba_client.get_flows() flows_date = dict() for flow in api_flows: flows_date[flow.uuid] = datetime_to_json_date(flow.created_on) for poll in Poll.objects.filter(org=org): json_date = flows_date.get(poll.flow_uuid, None) if json_date: date = json_date_to_datetime(json_date) else: logger.info( "using created_on for flow_date on poll with id %s" % poll.pk) date = poll.created_on poll.poll_date = date poll.save()
def _prepare_rapidpro_client(self, rapidpro_api_gateway_url=None, rapidpro_api_token=None): if rapidpro_api_gateway_url is None: rapidpro_api_gateway_url = self.rapidpro_api_gateway_url if rapidpro_api_token is None: rapidpro_api_token = self.rapidpro_api_token client = TembaClient(rapidpro_api_gateway_url, rapidpro_api_token) return client
def populate_poll_poll_date(apps, schema_editor): Poll = apps.get_model('polls', "Poll") Org = apps.get_model('orgs', "Org") agent = getattr(settings, 'SITE_API_USER_AGENT', None) host = settings.SITE_API_HOST for org in Org.objects.all(): temba_client = TembaClient(host, org.api_token, user_agent=agent) api_flows = temba_client.get_flows() flows_date = dict() for flow in api_flows: flows_date[flow.uuid] = datetime_to_json_date(flow.created_on) for poll in Poll.objects.filter(org=org): json_date = flows_date.get(poll.flow_uuid, None) if json_date: date = json_date_to_datetime(json_date) else: print "using created_on for flow_date on poll with id %s" % poll.pk date = poll.created_on poll.poll_date = date poll.save()
def populate_response_categories(apps, schema_editor): Poll = apps.get_model("polls", "Poll") PollQuestion = apps.get_model("polls", "PollQuestion") PollResponseCategory = apps.get_model("polls", "PollResponseCategory") deactivated = 0 successes = 0 deactivated_ids = [] start = time.time() for poll in Poll.objects.filter(is_active=True): org = poll.org user = poll.created_by host = getattr(settings, "SITE_API_HOST", None) agent = getattr(settings, "SITE_API_USER_AGENT", None) if not host: host = settings.API_ENDPOINT temba_client = TembaClient(host, org.api_token, user_agent=agent) try: flow_definition = temba_client.get_flow_definition( poll.flow_uuid) base_language = flow_definition.base_language poll.base_language = base_language poll.save() for ruleset in flow_definition.rule_sets: label = ruleset["label"] ruleset_uuid = ruleset["uuid"] ruleset_type = ruleset["ruleset_type"] existing_questions = PollQuestion.objects.filter( ruleset_uuid=ruleset_uuid, poll=poll) if existing_questions: existing_questions.update(ruleset_type=ruleset_type) poll_question = existing_questions.first() logger.info("Updated ruleset - %s" % ruleset_uuid) else: poll_question = PollQuestion.objects.create( poll=poll, ruleset_uuid=ruleset_uuid, title=label, ruleset_type=ruleset_type, is_active=False, created_by=user, modified_by=user, ) logger.info("Created ruleset - %s" % ruleset_uuid) for rule in ruleset["rules"]: category = rule["category"][base_language] existing_response_category = PollResponseCategory.objects.filter( question=poll_question, rule_uuid=rule["uuid"]) if existing_response_category: existing_response_category.update( category=category) logger.info("Updated rule - %s" % rule["uuid"]) else: PollResponseCategory.objects.create( question=poll_question, rule_uuid=rule["uuid"], category=category) logger.info("Created rule - %s" % rule["uuid"]) logger.info("Done ruleset - %s" % ruleset_uuid) logger.info("Done poll - %d on org %d" % (poll.pk, org.pk)) successes += 1 except TembaBadRequestError: poll.is_active = False poll.save() deactivated_ids.append(poll.pk) deactivated += 1 logger.info("Hidden poll - %d on org %d" % (poll.pk, org.pk)) except Exception as e: raise e logger.info("Finished populating %d polls in %ss" % (successes, time.time() - start)) logger.info("Deactivated %d polls" % deactivated) logger.info("Deactivated ids are %s" % ",".join([six.text_type(elt) for elt in deactivated_ids]))
def populate_response_categories(apps, schema_editor): Poll = apps.get_model("polls", "Poll") PollQuestion = apps.get_model("polls", "PollQuestion") PollResponseCategory = apps.get_model("polls", "PollResponseCategory") deactivated = 0 successes = 0 deactivated_ids = [] start = time.time() for poll in Poll.objects.filter(is_active=True): org = poll.org user = poll.created_by host = getattr(settings, "SITE_API_HOST", None) agent = getattr(settings, "SITE_API_USER_AGENT", None) if not host: host = settings.API_ENDPOINT temba_client = TembaClient(host, org.api_token, user_agent=agent) try: flow_definition = temba_client.get_flow_definition(poll.flow_uuid) base_language = flow_definition.base_language poll.base_language = base_language poll.save() for ruleset in flow_definition.rule_sets: label = ruleset["label"] ruleset_uuid = ruleset["uuid"] ruleset_type = ruleset["ruleset_type"] existing_questions = PollQuestion.objects.filter(ruleset_uuid=ruleset_uuid, poll=poll) if existing_questions: existing_questions.update(ruleset_type=ruleset_type) poll_question = existing_questions.first() logger.info("Updated ruleset - %s" % ruleset_uuid) else: poll_question = PollQuestion.objects.create( poll=poll, ruleset_uuid=ruleset_uuid, title=label, ruleset_type=ruleset_type, is_active=False, created_by=user, modified_by=user, ) logger.info("Created ruleset - %s" % ruleset_uuid) for rule in ruleset["rules"]: category = rule["category"][base_language] existing_response_category = PollResponseCategory.objects.filter( question=poll_question, rule_uuid=rule["uuid"] ) if existing_response_category: existing_response_category.update(category=category) logger.info("Updated rule - %s" % rule["uuid"]) else: PollResponseCategory.objects.create( question=poll_question, rule_uuid=rule["uuid"], category=category ) logger.info("Created rule - %s" % rule["uuid"]) logger.info("Done ruleset - %s" % ruleset_uuid) logger.info("Done poll - %d on org %d" % (poll.pk, org.pk)) successes += 1 except TembaBadRequestError: poll.is_active = False poll.save() deactivated_ids.append(poll.pk) deactivated += 1 logger.info("Hidden poll - %d on org %d" % (poll.pk, org.pk)) except Exception as e: raise e logger.info("Finished populating %d polls in %ss" % (successes, time.time() - start)) logger.info("Deactivated %d polls" % deactivated) logger.info("Deactivated ids are %s" % ",".join([six.text_type(elt) for elt in deactivated_ids]))