Exemple #1
0
class BaseInterface(Interface):
    id = ID(required=True)
class UpdateClientInput(InputObjectType):
    id = ID(required=True)
    first_name = String()
    last_name = String()
    email = String()
class CreateCareerInput(InputObjectType):
    name = String(required=True)
    description = String(required=True)

    college_id = ID(required=True)
Exemple #4
0
class Score(ObjectType):
    id = ID()
    pointing = Float()
    last_query = String()
Exemple #5
0
class UpdateRefereeInput(InputObjectType, RefereeAttribute):
    """Update Referee Input fields derived from RefereeAttribute"""
    id = ID(required=True, description="Global Id of the Referee.")
Exemple #6
0
class Query:
    berth_products = DjangoConnectionField(
        BerthProductNode,
        description="**Requires permissions** to access payments.",
    )
    berth_product = Node.Field(
        BerthProductNode,
        description="**Requires permissions** to access payments.",
    )
    berth_product_for_width = Field(
        BerthProductNode,
        width=Decimal(required=True),
        description="**Requires permissions** to access payments.",
    )

    winter_storage_products = DjangoConnectionField(
        WinterStorageProductNode,
        description="**Requires permissions** to access payments.",
    )
    winter_storage_product = Node.Field(
        WinterStorageProductNode,
        description="**Requires permissions** to access payments.",
    )

    additional_products = DjangoConnectionField(
        AdditionalProductNode,
        product_type=AdditionalProductTypeEnum(),
        description="**Requires permissions** to access payments.",
    )
    additional_product = Node.Field(
        AdditionalProductNode,
        description="**Requires permissions** to access payments.",
    )
    additional_product_services = List(
        AdditionalProductServiceNode, product_type=AdditionalProductTypeEnum())

    order = Node.Field(
        OrderNode,
        description="**Requires permissions** to access payments.",
    )
    orders = DjangoConnectionField(
        OrderNode,
        statuses=List(OrderStatusEnum),
        order_type=OrderTypeEnum(),
        description="**Requires permissions** to access payments.",
    )
    order_refunds = DjangoConnectionField(
        OrderRefundNode,
        order_id=ID(required=True),
        description="Returns the Order Refund objects associated to the order."
        "\n\n**Requires permissions** to access payments.",
    )
    berth_switch_offer = Node.Field(
        BerthSwitchOfferNode,
        description="**Requires permissions** to access offers.",
    )
    berth_switch_offers = DjangoConnectionField(BerthSwitchOfferNode)

    order_details = Field(OrderDetailsType, order_number=String(required=True))

    @view_permission_required(BerthProduct)
    def resolve_berth_product_for_width(self, info, width, **kwargs):
        return BerthProduct.objects.get_in_range(width)

    def resolve_additional_products(self, info, **kwargs):
        product_type = kwargs.get("product_type")
        if product_type:
            product_type = AdditionalProductType(product_type)
            if product_type == AdditionalProductType.FIXED_SERVICE:
                return AdditionalProduct.objects.filter(
                    service__in=ProductServiceType.FIXED_SERVICES())
            elif product_type == AdditionalProductType.OPTIONAL_SERVICE:
                return AdditionalProduct.objects.filter(
                    service__in=ProductServiceType.OPTIONAL_SERVICES())

        return AdditionalProduct.objects.all()

    def resolve_additional_product_services(self, info, **kwargs):
        service_list = list(ProductServiceType)
        product_type = kwargs.get("product_type")

        if product_type:
            product_type = AdditionalProductType(product_type)
            if product_type == AdditionalProductType.FIXED_SERVICE:
                service_list = ProductServiceType.FIXED_SERVICES()
            elif product_type == AdditionalProductType.OPTIONAL_SERVICE:
                service_list = ProductServiceType.OPTIONAL_SERVICES()

        return [
            AdditionalProductServiceNode(service=service)
            for service in service_list
        ]

    def resolve_orders(self, info, order_type=None, statuses=None, **kwargs):
        qs = Order.objects.all()
        if order_type:
            if order_type == "BERTH":
                qs = Order.objects.berth_orders()
            else:
                qs = Order.objects.winter_storage_orders()

        if statuses:
            qs = qs.filter(status__in=statuses)
        return qs

    def resolve_order_refunds(self, info, order_id, **kwargs):
        return OrderRefund.objects.filter(
            order_id=from_global_id(order_id, OrderNode))

    def resolve_order_details(self, info, order_number):
        try:
            order = Order.objects.get(order_number=order_number)
        except Order.DoesNotExist as e:
            raise VenepaikkaGraphQLError(e)

        is_application_order = (hasattr(order, "lease") and getattr(
            order.lease, "application", None) is not None)

        order_type = Query._get_order_type(order)

        if isinstance(order.lease, BerthLease):
            place_number = order.lease.berth.number
            section_identifier = order.lease.berth.pier.identifier
            area_name = order.lease.berth.pier.harbor.name
        elif isinstance(order.lease, WinterStorageLease):
            if order.lease.place:
                place_number = str(order.lease.place.number)
                section_identifier = order.lease.place.winter_storage_section.identifier
                area_name = order.lease.place.winter_storage_section.area.name
            else:
                # unmarked ws lease
                place_number = None
                section_identifier = order.lease.section.identifier
                area_name = order.lease.section.area.name
        else:
            place_number = None
            section_identifier = None
            area_name = None

        return OrderDetailsType(
            status=order.status,
            order_type=order_type,
            area=area_name,
            section=section_identifier,
            place=place_number,
            is_application_order=is_application_order,
        )

    @staticmethod
    def _get_order_type(order):
        # in graphene-python, all resolvers are implictly staticmethods, so need to make this utility static too.
        order_type = OrderTypeEnum.UNKNOWN
        if order.order_type == OrderType.ADDITIONAL_PRODUCT_ORDER:
            order_type = OrderTypeEnum.ADDITIONAL_PRODUCT
        elif order.product:
            if isinstance(order.product, BerthProduct):
                order_type = OrderTypeEnum.BERTH
            elif isinstance(order.product, WinterStorageProduct):
                order_type = OrderTypeEnum.WINTER_STORAGE
        elif order.lease:
            if isinstance(order.lease, BerthLease):
                order_type = OrderTypeEnum.BERTH
            elif isinstance(order.lease, WinterStorageLease):
                order_type = OrderTypeEnum.WINTER_STORAGE
        return order_type
Exemple #7
0
 class Arguments:
     id = ID(required=True)
Exemple #8
0
def convert_field_to_id(field, registry=None):
    return ID(description=field.help_text)
Exemple #9
0
class CreditCard(ObjectType):
    id = ID()
    number = String()
    expiration_date = String()
Exemple #10
0
class Investigator(ObjectType):
    id = ID()
    first_name = String()
    surname = String()
    email = String()
Exemple #11
0
class UpdateCoachInput(InputObjectType, CoachAttribute):
    """Update Coach Input fields derived from CoachAttribute"""
    id = ID(required=True, description="Global Id of the Coach.")
Exemple #12
0
 class Arguments:
     parent = ID(required=True)
     registration_preferences = String()
Exemple #13
0
 def __init__(self, type, resolver=default_model_resolver):
     super().__init__(type, id=ID(), resolver=resolver)
Exemple #14
0
class GInvestmentBucketConfigurationUpdate(InputObjectType):
    """
    Represents one choice of stock for a bucket
    """
    id_value = ID()
    quantity = Float()
    def __init__(self, _type, *args, **kwargs):
        kwargs['id'] = ID(
            required=True,
            description='Django object unique identification field')

        super(DjangoObjectField, self).__init__(_type, *args, **kwargs)
Exemple #16
0
class Debt(ObjectType):
    id = ID()
    name = String()
    value = Float()
Exemple #17
0
def convert_field_to_id(field, registry=None):
    return ID(description=field.db_field, required=field.required)
Exemple #18
0
class TemplateInput(InputObjectType):
    title = String()
    description = String()
    author = ID()

    contents = List(NonNull(TemplateSectionInput))
def convert_field_to_id(field, registry=None):
    return ID(description=field.help_text, required=not field.null)
Exemple #20
0
class ProductInterface(CommonAttributes, DBInterface):
    company = ID()
    product_categories = List(ProductCategory)
Exemple #21
0
class DBInterface(Interface):
    _id = ID(required=True)
    creation_date = DateTime(required=True)
    modified_date = DateTime(required=True)
Exemple #22
0
 class Arguments:
     company_id = ID(required=True)
     product_form_data = NewProductFormInput(required=True)
def convert_form_field_to_id(field):
    return ID(required=field.required)
Exemple #24
0
 class Input:
     id = ID()
     text = String(required=True)
class UpdateSkillInput(InputObjectType):
    id = ID(required=True)
    name = String()
Exemple #26
0
 class Input:
     id = ID()
     data = GenericScalar()
class UpdateCollegeInput(InputObjectType):
    id = ID(required=True)
    name = String()
Exemple #28
0
 class Input:
     id = ID()
class UpdateCareerInput(InputObjectType):
    id = ID(required=True)
    name = String()
    description = String()

    college_id = ID()
Exemple #30
0
class Query(object):
    course = Field(CourseType, course_id=ID())
    course_availability = Field(CourseAvailabilityType, availability_id=ID())
    course_category = Field(CourseCategoryType, category_id=ID())
    course_note = Field(CourseNoteType, note_id=ID())
    enrollment = Field(EnrollmentType, enrollment_id=ID())
    enrollment_note = Field(EnrollmentNoteType, note_id=ID())
    interest = Field(InterestType, interest_id=ID())

    courses = List(CourseType,
                   category_id=ID(),
                   course_ids=List(ID),
                   user_id=ID())
    course_availabilities = List(CourseAvailabilityType,
                                 course_id=ID(),
                                 availability_ids=List(ID))
    course_categories = List(CourseCategoryType)
    course_notes = List(CourseNoteType, course_id=ID(required=True))
    enrollments = List(EnrollmentType,
                       student_id=ID(),
                       course_id=ID(),
                       student_ids=List(ID))
    enrollment_notes = List(EnrollmentNoteType,
                            enrollment_id=ID(required=True))
    interests = List(InterestType, parent_id=ID(), course_id=ID())

    # custom methods
    num_recent_sessions = Int(timeframe=LookbackTimeframe(required=True))
    popular_categories = List(PopularCategoryType,
                              timeframe=LookbackTimeframe(required=True))

    @login_required
    def resolve_course_availability(self, info, **kwargs):
        availability_id = kwargs.get("availability_id")

        if availability_id:
            return CourseAvailability.objects.get(id=availability_id)

        return None

    @login_required
    def resolve_course_availabilities(self, info, **kwargs):
        course_id = kwargs.get("course_id")
        availability_ids = kwargs.get("availability_ids")

        if course_id:
            return CourseAvailability.objects.filter(course_id=course_id)

        if availability_ids:
            return CourseAvailability.objects.filter(id__in=availability_ids)

        return None

    @login_required
    def resolve_course(self, info, **kwargs):
        course_id = kwargs.get("course_id")

        if course_id:
            return Course.objects.get(id=course_id)

        return None

    @login_required
    def resolve_course_category(self, info, **kwargs):
        category_id = kwargs.get("category_id")

        if category_id:
            return CourseCategory.objects.get(id=category_id)

        return None

    @login_required
    def resolve_course_note(self, info, **kwargs):
        note_id = kwargs.get("course_note")

        if note_id:
            return CourseNote.objects.get(id=note_id)

        return None

    @login_required
    def resolve_enrollment(self, info, **kwargs):
        enrollment_id = kwargs.get("enrollment_id")

        if enrollment_id:
            return Enrollment.objects.get(id=enrollment_id)

        return None

    @login_required
    def resolve_enrollment_note(self, info, **kwargs):
        note_id = kwargs.get("note_id")

        if note_id:
            return Enrollment.objects.get(id=note_id)

        return None

    @login_required
    def resolve_interest(self, info, **kwargs):
        interest_id = kwargs.get("interest_id")

        if interest_id:
            return Interest.objects.get(id=interest_id)

        return None

    @login_required
    def resolve_courses(self, info, **kwargs):
        category_id = kwargs.get("category_id")
        course_ids = kwargs.get("course_ids")
        user_id = kwargs.get("user_id")

        if category_id:
            return Course.objects.filter(course_category=category_id)
        if course_ids:
            course_ids = [
                course_id for course_id in course_ids
                if Course.objects.filter(id=course_id).exists()
            ]
            return Course.objects.filter(id__in=course_ids)
        if user_id:
            if Instructor.objects.filter(user_id=user_id).exists():
                return Course.objects.filter(instructor_id=user_id)
            if Parent.objects.filter(user_id=user_id).exists():
                parent = Parent.objects.get(user_id=user_id)
                student_course_ids = set()
                for student_id in parent.student_list:
                    for enrollment in Enrollment.objects.filter(
                            student=student_id):
                        student_course_ids.add(enrollment.course.id)
                return Course.objects.filter(id__in=student_course_ids)
        return Course.objects.all()

    @login_required
    def resolve_course_categories(self, info, **kwargs):
        categories = CourseCategory.objects.all()
        sorted_categories = sorted(categories,
                                   key=lambda t: -t.active_tuition_rule_count)
        return sorted_categories

    @login_required
    def resolve_course_notes(self, info, **kwargs):
        course_id = kwargs.get("course_id")

        return CourseNote.objects.filter(course__id=course_id)

    @login_required
    def resolve_enrollments(self, info, **kwargs):
        student_id = kwargs.get("student_id")
        course_id = kwargs.get("course_id")
        student_ids = kwargs.get("student_ids")
        enrollment_list = []

        queryset = Enrollment.objects

        if student_id:
            queryset = queryset.filter(student=student_id)
        if course_id:
            queryset = queryset.filter(course=course_id)
        if student_ids:
            enrollment_list = Enrollment.objects.filter(
                student_id__in=student_ids)
        return enrollment_list or queryset.all()

    @login_required
    def resolve_enrollment_notes(self, info, **kwargs):
        enrollment_id = kwargs.get("enrollment_id")

        return EnrollmentNote.objects.filter(enrollment_id=enrollment_id)

    def resolve_num_recent_sessions(self, info, timeframe, **kwargs):
        now = arrow.now()

        if timeframe == LookbackTimeframe.YESTERDAY:
            return Session.objects.filter(
                start_datetime__gte=now.shift(days=-1).datetime,
                start_datetime__lte=now.datetime,
            ).count()
        elif timeframe == LookbackTimeframe.LAST_WEEK:
            return Session.objects.filter(
                start_datetime__gte=now.shift(weeks=-1).datetime,
                start_datetime__lte=now.datetime,
            ).count()
        elif timeframe == LookbackTimeframe.LAST_MONTH:
            return Session.objects.filter(
                start_datetime__gte=now.shift(months=-1).datetime,
                start_datetime__lte=now.datetime,
            ).count()
        elif timeframe == LookbackTimeframe.ALL_TIME:
            return Session.objects.filter(
                start_datetime__lte=now.datetime).count()

        return None

    def resolve_popular_categories(self, info, timeframe, **kwargs):
        category_counts = []
        categories = CourseCategory.objects.all()

        for category in categories:
            courses = category.course_set.all()
            num_sessions = 0
            now = arrow.now()

            for course in courses:
                if timeframe == LookbackTimeframe.YESTERDAY:
                    num_sessions += course.session_set.filter(
                        start_datetime__gte=now.shift(days=-1).datetime,
                        start_datetime__lte=now.datetime,
                    ).count()
                elif timeframe == LookbackTimeframe.LAST_WEEK:
                    num_sessions += course.session_set.filter(
                        start_datetime__gte=now.shift(weeks=-1).datetime,
                        start_datetime__lte=now.datetime,
                    ).count()
                elif timeframe == LookbackTimeframe.LAST_MONTH:
                    num_sessions += course.session_set.filter(
                        start_datetime__gte=now.shift(months=-1).datetime,
                        start_datetime__lte=now.datetime,
                    ).count()
                elif timeframe == LookbackTimeframe.ALL_TIME:
                    num_sessions += course.session_set.filter(
                        start_datetime__lte=now.datetime).count()

            category_counts.append({
                "category": category,
                "num_sessions": num_sessions
            })

        top_5_categories = sorted(category_counts,
                                  key=lambda item: item["num_sessions"],
                                  reverse=True)[:5]

        return top_5_categories

    @login_required
    def resolve_interests(self, info, **kwargs):
        parent_id = kwargs.get("parent_id")
        course_id = kwargs.get("course_id")

        if parent_id:
            return Interest.objects.filter(parent__user__id=parent_id)

        if course_id:
            return Interest.objects.filter(course=course_id)

        return None