コード例 #1
0
    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()
コード例 #2
0
    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
コード例 #3
0
    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()
コード例 #4
0
    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]))
コード例 #5
0
    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]))