Ejemplo n.º 1
0
    def handle(self, *args, **options):

        self.stdout.write(self.style.SUCCESS('Start Sync Data'))
        logger_api.info('Start Sync Data {0}'.format(datetime.datetime.now()))

        # try:
        #     self.stdout.write(self.style.SUCCESS('Start change active user to False'))
        #     from apps.user.models.base import BaseUser
        #     BaseUser.objects.filter(user_is_test=False).update(is_active=False)
        #
        #     self.stdout.write(self.style.SUCCESS('End change active user to False'))
        # except:
        #     pass

        try:
            self.stdout.write(self.style.SUCCESS('Start Sync Teachers'))
            BagheriApi().set_teachers()
            self.stdout.write(self.style.SUCCESS('End Sync Teachers'))
        except:
            pass

        try:
            self.stdout.write(self.style.SUCCESS('Start Sync Provinces'))
            BagheriApi().set_provinces()
            self.stdout.write(self.style.SUCCESS('End Sync Provinces'))
        except:
            pass

        try:
            self.stdout.write(self.style.SUCCESS('Start Sync Counties'))
            BagheriApi().set_counties()
            self.stdout.write(self.style.SUCCESS('End Sync Counties'))
        except:
            pass

        try:
            self.stdout.write(self.style.SUCCESS('Start Sync Camps'))
            BagheriApi().set_camps()
            self.stdout.write(self.style.SUCCESS('End Sync Camps'))
        except:
            pass

        try:
        #     self.stdout.write(self.style.SUCCESS('Start Sync Schools'))
        #     from apps.league.models import School
        #     School.objects.all().update(active=False)
            BagheriApi().set_schools()
        #     self.stdout.write(self.style.SUCCESS('End Sync Schools'))
        except:
            pass

        try:
            self.stdout.write(self.style.SUCCESS('Start Sync Students'))
            BagheriApi().set_students()
            self.stdout.write(self.style.SUCCESS('End Sync Students'))
        except:
            pass

        self.stdout.write(self.style.SUCCESS('End Sync Data'))
        logger_api.info('End Sync Data {0}'.format(datetime.datetime.now()))
Ejemplo n.º 2
0
    def set_teachers(self, next_url=None):
        token = self.get_token()
        print(next_url)

        if next_url is None:
            get_res = requests.get(
                url=self.server_api + "/api/v1/teachers/",
                headers={"authorization": "JWT " + token}
            )

        else:
            get_res = requests.get(
                url=next_url,
                headers={"authorization": "JWT " + token}
            )

        if get_res.status_code == 200:
            results = get_res.json()
            next_url = results["next"]
            teachers = results["results"]
            # 1: coach | 2:camp | 3: county | 4:province | 5: province_f | 6:province_m | 7: country
            level_choices = {1: 4, 2: 3, 3: 8, 4: 9, 5: 6, 6: 5, 7: 7}

            list_error_teachers = []
            for _teacher in teachers:
                try:
                    teacher = Teacher.objects.filter(username=_teacher["username"])
                    if not teacher.exists():
                        teacher = Teacher()
                        teacher.username = _teacher["username"]
                        teacher.password = _teacher["username"]
                    else:
                        teacher = teacher.get()

                    teacher.first_name = _teacher["first_name"]
                    teacher.last_name = _teacher["last_name"]
                    teacher.gender = _teacher["gender"]
                    teacher.is_active = True

                    # if BaseUser.objects.filter(phone_number=_teacher["phone_number"]).exclude(id=teacher.id).exists():
                    #     list_error_teachers.append({
                    #         "teacher_phone_error": _teacher
                    #     })
                    #     continue

                    teacher.phone_number = _teacher["phone_number"]

                    teacher.save()

                    try:
                        teacher.coach_levels.clear()
                    except Exception as e:
                        print(e)

                    try:
                        for level in _teacher["levels"]:
                            teacher.coach_levels.add(level_choices[level])
                    except:
                        list_error_teachers.append({
                            "teacher_coach_levels_error": _teacher
                        })
                        continue

                    teacher.updated_at = datetime.datetime.now()
                    teacher.save()

                except Exception as e:

                    logger_api.error(
                        "teacher has error >> {0}".format(datetime.datetime.now()),
                        extra={
                            "teachers error": (_teacher, e),
                        })
                    continue

            if list_error_teachers:
                logger_api.error(
                    "teachers bagheri api {0} >> ".format(datetime.datetime.now()) + str(next_url),
                    extra={
                        "teachers error": list_error_teachers,
                    })

            if next_url:
                self.set_teachers(next_url=next_url)

            else:
                logger_api.info("Completed teachers completion.")

        elif get_res.status_code == 401:
            self.set_teachers(next_url)

        else:
            logger_api.error("teachers bagheri api", extra={
                "detail": {
                    "error": get_res,
                }
            })
Ejemplo n.º 3
0
    def set_students(self, next_url=None):
        token = self.get_token()
        print(next_url)

        if next_url is None:
            get_res = requests.get(
                url=self.server_api + "/api/v1/students/?limit=100",
                headers={"authorization": "JWT " + token}
            )

        else:
            get_res = requests.get(
                url=next_url,
                headers={"authorization": "JWT " + token}
            )

        if get_res.status_code == 200:
            results = get_res.json()
            next_url = results["next"]
            students = results["results"]
            list_error_student = []
            for _student in students:
                try:
                    student = Student.objects.filter(username=_student["username"])
                    if not student.exists():
                        student = Student()
                        student.username = _student["username"]
                        student.password = _student["username"]
                    else:
                        student = student.get()

                    student.first_name = _student["first_name"]
                    student.last_name = _student["last_name"]
                    student.gender = _student["gender"]
                    student.is_active = True

                    # if BaseUser.objects.filter(phone_number=_student["phone_number"]).exclude(id=student.id).exists():
                    #     list_error_student.append({
                    #         "student_phone_error": _student
                    #     })
                    #     continue

                    student.phone_number = _student["phone_number"]
                    try:
                        school = School.objects.get(code_bagheri=_student["school_code"])
                    except:
                        list_error_student.append({
                            "school_not_find": _student
                        })
                        continue

                    student.school = school
                    student.updated_at = datetime.datetime.now()

                    student.save()

                except Exception as e:
                    logger_api.error(
                        "student has error >> {0}".format(datetime.datetime.now()),
                        extra={
                            "student error": _student,
                            "error": e,
                        })
                    continue

            if list_error_student:
                logger_api.error(
                    "student bagheri api {0} >> ".format(datetime.datetime.now()) + str(next_url),
                    extra={
                        "student error": list_error_student,
                    })

            if next_url:
                self.set_students(next_url=next_url)

            else:
                logger_api.info("Completed student completion.")

        elif get_res.status_code == 401:
            self.set_students(next_url)

        else:
            logger_api.error("province bagheri api", extra={
                "detail": {
                    "error": get_res,
                }
            })
Ejemplo n.º 4
0
    def set_schools(self, next_url=None):
        token = self.get_token()
        print(next_url)
        students_count = {
            "1": 50,
            "2": 75,
            "3": 100,
            "4": 150,
            "5": 200,
            "6": 300,
        }

        if next_url is None:
            get_res = requests.get(
                url=self.server_api + "/api/v1/schools/?limit=100",
                headers={"authorization": "JWT " + token}
            )

        else:
            get_res = requests.get(
                url=next_url,
                headers={"authorization": "JWT " + token}
            )

        if get_res.status_code == 200:
            results = get_res.json()
            next_url = results["next"]
            schools = results["results"]
            list_error_school = []
            for _school in schools:
                school = School.objects.filter(code_bagheri=_school["code"])
                if not school.exists():
                    school = School()
                    school.code_bagheri = _school["code"]
                else:
                    school = school.get()

                school.name = _school["name"]
                school.gender = _school["gender"]
                school.student_count = students_count.get(str(_school["students_count"]), 400)
                school.anjoman_count = _school["number_of_users"]

                try:
                    school.county = County.objects.get(code=_school["county_id"])
                except:
                    list_error_school.append({
                        "school.county": _school
                    })
                    continue

                try:
                    school.province = Province.objects.get(code=_school["province_id"])
                except:
                    list_error_school.append({
                        "school.province": _school
                    })
                    continue

                # if _school["camp_id"] is not None:
                #     try:
                #         school.camp = Camp.objects.get(code=_school["camp_id"])
                #     except:
                #         list_error_school.append({
                #             "school.camp": _school
                #         })
                #         # continue

                try:
                    school.teacher = Teacher.objects.get(username=_school["teacher_id"])

                except:
                    list_error_school.append({
                        "school.Teacher": _school
                    })
                    continue

                school.updated_at = datetime.datetime.now()
                school.active = True
                school.save()

            if list_error_school:
                logger_api.error(
                    "schools bagheri api {0} >> ".format(datetime.datetime.now()) + str(next_url),
                    extra={
                        "school error": list_error_school,
                    })

            if next_url:
                self.set_schools(next_url=next_url)

            else:
                logger_api.info("Completed schools completion.")

        elif get_res.status_code == 401:
            self.set_schools(next_url)

        else:
            logger_api.error("province bagheri api", extra={
                "detail": {
                    "error": get_res,
                }
            })
Ejemplo n.º 5
0
    def set_camps(self, next_url=None):
        token = self.get_token()
        print(next_url)

        if next_url is None:
            get_res = requests.get(
                url=self.server_api + "/api/v1/camps/",
                headers={"authorization": "JWT " + token}
            )

        else:
            get_res = requests.get(
                url=next_url,
                headers={"authorization": "JWT " + token}
            )

        if get_res.status_code == 200:
            results = get_res.json()
            next_url = results["next"]
            camps = results["results"]

            list_error_camps = []
            for _camp in camps:
                camp = Camp.objects.filter(code=_camp["camp_id"])
                if not camp.exists():
                    camp = Camp()
                    camp.slug = _camp["camp_id"]
                    camp.code = _camp["camp_id"]
                else:
                    camp = camp.get()

                try:
                    camp.county = County.objects.get(code=_camp["county_id"])
                except:
                    list_error_camps.append({
                        "camp_error": _camp
                    })
                    continue

                camp.title = _camp["name"]

                try:
                    camp.coach = Teacher.objects.get(username=_camp["teacher_id"])
                except:
                    list_error_camps.append({
                        "teacher_error": _camp
                    })
                    continue

                camp.save()

            if list_error_camps:
                logger_api.error(
                    "camps bagheri api {0} >> ".format(datetime.datetime.now()) + str(next_url),
                    extra={
                        "camp error": list_error_camps,
                    })

            if next_url:
                self.set_camps(next_url=next_url)

            else:
                logger_api.info("Completed camps completion.")

        elif get_res.status_code == 401:
            self.set_camps(next_url)

        else:
            logger_api.error("province bagheri api", extra={
                "detail": {
                    "error": get_res,
                }
            })
Ejemplo n.º 6
0
    def set_provinces(self, next_url=None):
        token = self.get_token()
        print(next_url)

        if next_url is None:
            get_res = requests.get(
                url=self.server_api + "/api/v1/provinces/",
                headers={"authorization": "JWT " + token}
            )

        else:
            get_res = requests.get(
                url=next_url,
                headers={"authorization": "JWT " + token}
            )

        if get_res.status_code == 200:
            results = get_res.json()
            next_url = results["next"]
            provinces = results["results"]

            list_error_teacher = []
            for _province in provinces:
                province = Province.objects.filter(code=_province["code"])
                if not province.exists():
                    province = Province()
                    province.slug = _province["code"]
                    province.code = _province["code"]
                else:
                    province = province.get()

                province.title = _province["name"]
                province.save()
                province.coaches.clear()

                try:
                    if _province["teacher_id"]:
                        province.coaches.add(Teacher.objects.get(username=_province["teacher_id"]))
                except:
                    list_error_teacher.append({
                        "province_name": _province["name"],
                        "teacher_error": _province["teacher_id"]
                    })

                try:
                    if _province["teacher_id_f"]:
                        province.coaches.add(Teacher.objects.get(username=_province["teacher_id_f"]))
                except:
                    list_error_teacher.append({
                        "province_name": _province["name"],
                        "teacher_error": _province["teacher_id_f"]
                    })

                try:
                    if _province["teacher_id_m"]:
                        province.coaches.add(Teacher.objects.get(username=_province["teacher_id_m"]))
                except:
                    list_error_teacher.append({
                        "province_name": _province["name"],
                        "teacher_error": _province["teacher_id_m"]
                    })

                province.save()

            if list_error_teacher:
                logger_api.error(
                    "province bagheri api {0} >> ".format(datetime.datetime.now()) + str(next_url),
                    extra={
                        "teachers_error_not_found": list_error_teacher,
                    })

            if next_url:
                self.set_provinces(next_url=next_url)

            else:
                logger_api.info("Completed provinces completion.")

        elif get_res.status_code == 401:
            self.set_provinces(next_url)

        else:
            logger_api.error("province bagheri api", extra={
                "detail": {
                    "error": get_res,
                }
            })