whop-sdk 0.0.1__py3-none-any.whl → 0.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of whop-sdk might be problematic. Click here for more details.

Files changed (126) hide show
  1. whop_sdk/_client.py +65 -2
  2. whop_sdk/_version.py +1 -1
  3. whop_sdk/resources/__init__.py +98 -0
  4. whop_sdk/resources/checkout_configurations.py +16 -12
  5. whop_sdk/resources/course_chapters.py +602 -0
  6. whop_sdk/resources/course_lessons.py +722 -0
  7. whop_sdk/resources/courses.py +713 -0
  8. whop_sdk/resources/experiences.py +107 -0
  9. whop_sdk/resources/forum_posts.py +123 -1
  10. whop_sdk/resources/forums.py +446 -0
  11. whop_sdk/resources/members.py +429 -0
  12. whop_sdk/resources/memberships.py +16 -8
  13. whop_sdk/resources/messages.py +113 -1
  14. whop_sdk/resources/payments.py +3 -26
  15. whop_sdk/resources/plans.py +84 -6
  16. whop_sdk/resources/products.py +8 -16
  17. whop_sdk/resources/promo_codes.py +652 -0
  18. whop_sdk/resources/reviews.py +315 -0
  19. whop_sdk/types/__init__.py +64 -0
  20. whop_sdk/types/app_list_response.py +16 -1
  21. whop_sdk/types/assessment_question_types.py +7 -0
  22. whop_sdk/types/billing_reasons.py +9 -0
  23. whop_sdk/types/card_brands.py +24 -0
  24. whop_sdk/types/checkout_configuration_create_params.py +70 -7
  25. whop_sdk/types/checkout_configuration_list_response.py +12 -9
  26. whop_sdk/types/course.py +109 -0
  27. whop_sdk/types/course_chapter.py +32 -0
  28. whop_sdk/types/course_chapter_create_params.py +16 -0
  29. whop_sdk/types/course_chapter_delete_response.py +7 -0
  30. whop_sdk/types/course_chapter_list_params.py +25 -0
  31. whop_sdk/types/course_chapter_list_response.py +16 -0
  32. whop_sdk/types/course_chapter_update_params.py +12 -0
  33. whop_sdk/types/course_create_params.py +41 -0
  34. whop_sdk/types/course_delete_response.py +7 -0
  35. whop_sdk/types/course_lesson_create_params.py +27 -0
  36. whop_sdk/types/course_lesson_delete_response.py +7 -0
  37. whop_sdk/types/course_lesson_interaction_completed_webhook_event.py +26 -0
  38. whop_sdk/types/course_lesson_list_params.py +28 -0
  39. whop_sdk/types/course_lesson_list_response.py +35 -0
  40. whop_sdk/types/course_lesson_update_params.py +144 -0
  41. whop_sdk/types/course_list_params.py +28 -0
  42. whop_sdk/types/course_list_response.py +77 -0
  43. whop_sdk/types/course_update_params.py +89 -0
  44. whop_sdk/types/entry_approved_webhook_event.py +26 -0
  45. whop_sdk/types/entry_created_webhook_event.py +26 -0
  46. whop_sdk/types/entry_deleted_webhook_event.py +26 -0
  47. whop_sdk/types/entry_denied_webhook_event.py +26 -0
  48. whop_sdk/types/experience_duplicate_params.py +13 -0
  49. whop_sdk/types/experience_list_response.py +27 -1
  50. whop_sdk/types/forum_list_params.py +28 -0
  51. whop_sdk/types/forum_list_response.py +33 -0
  52. whop_sdk/types/forum_post_list_response.py +7 -0
  53. whop_sdk/types/forum_post_update_params.py +41 -0
  54. whop_sdk/types/forum_update_params.py +23 -0
  55. whop_sdk/types/invoice_create_params.py +10 -2
  56. whop_sdk/types/languages.py +30 -0
  57. whop_sdk/types/ledger_account_retrieve_response.py +15 -1
  58. whop_sdk/types/lesson.py +159 -0
  59. whop_sdk/types/lesson_types.py +7 -0
  60. whop_sdk/types/lesson_visibilities.py +7 -0
  61. whop_sdk/types/member_list_params.py +73 -0
  62. whop_sdk/types/member_list_response.py +65 -0
  63. whop_sdk/types/member_retrieve_response.py +79 -0
  64. whop_sdk/types/membership_activated_webhook_event.py +29 -0
  65. whop_sdk/types/membership_deactivated_webhook_event.py +29 -0
  66. whop_sdk/types/membership_list_params.py +7 -4
  67. whop_sdk/types/membership_list_response.py +12 -1
  68. whop_sdk/types/message_update_params.py +35 -0
  69. whop_sdk/types/payment_failed_webhook_event.py +26 -0
  70. whop_sdk/types/payment_list_params.py +2 -7
  71. whop_sdk/types/payment_list_response.py +23 -13
  72. whop_sdk/types/payment_method_types.py +92 -0
  73. whop_sdk/types/payment_pending_webhook_event.py +26 -0
  74. whop_sdk/types/payment_succeeded_webhook_event.py +26 -0
  75. whop_sdk/types/plan_create_params.py +29 -3
  76. whop_sdk/types/plan_list_response.py +9 -0
  77. whop_sdk/types/plan_update_params.py +18 -0
  78. whop_sdk/types/product_create_params.py +1 -24
  79. whop_sdk/types/product_update_params.py +12 -1
  80. whop_sdk/types/promo_code.py +90 -0
  81. whop_sdk/types/promo_code_create_params.py +70 -0
  82. whop_sdk/types/promo_code_delete_response.py +7 -0
  83. whop_sdk/types/promo_code_list_params.py +37 -0
  84. whop_sdk/types/promo_code_list_response.py +79 -0
  85. whop_sdk/types/promo_code_status.py +7 -0
  86. whop_sdk/types/promo_duration.py +7 -0
  87. whop_sdk/types/review_list_params.py +31 -0
  88. whop_sdk/types/review_list_response.py +78 -0
  89. whop_sdk/types/review_retrieve_response.py +103 -0
  90. whop_sdk/types/review_status.py +7 -0
  91. whop_sdk/types/shared/__init__.py +7 -0
  92. whop_sdk/types/shared/access_level.py +7 -0
  93. whop_sdk/types/shared/app.py +25 -1
  94. whop_sdk/types/shared/checkout_configuration.py +12 -9
  95. whop_sdk/types/shared/company.py +15 -1
  96. whop_sdk/types/shared/course_lesson_interaction.py +20 -1
  97. whop_sdk/types/shared/email_notification_preferences.py +7 -0
  98. whop_sdk/types/shared/experience.py +27 -1
  99. whop_sdk/types/shared/forum.py +33 -0
  100. whop_sdk/types/shared/forum_post.py +7 -0
  101. whop_sdk/types/shared/invoice.py +4 -1
  102. whop_sdk/types/shared/invoice_list_item.py +4 -1
  103. whop_sdk/types/shared/member_most_recent_actions.py +22 -0
  104. whop_sdk/types/shared/member_statuses.py +7 -0
  105. whop_sdk/types/shared/membership.py +12 -1
  106. whop_sdk/types/shared/payment.py +23 -13
  107. whop_sdk/types/shared/plan.py +9 -0
  108. whop_sdk/types/shared/product.py +8 -0
  109. whop_sdk/types/shared/product_list_item.py +8 -0
  110. whop_sdk/types/shared/who_can_comment_types.py +7 -0
  111. whop_sdk/types/shared/who_can_post_types.py +7 -0
  112. whop_sdk/types/shared_params/__init__.py +7 -0
  113. whop_sdk/types/shared_params/access_level.py +9 -0
  114. whop_sdk/types/shared_params/email_notification_preferences.py +9 -0
  115. whop_sdk/types/shared_params/member_most_recent_actions.py +24 -0
  116. whop_sdk/types/shared_params/member_statuses.py +9 -0
  117. whop_sdk/types/shared_params/promo_type.py +9 -0
  118. whop_sdk/types/shared_params/who_can_comment_types.py +9 -0
  119. whop_sdk/types/shared_params/who_can_post_types.py +9 -0
  120. whop_sdk/types/unwrap_webhook_event.py +24 -1
  121. whop_sdk/types/user_check_access_response.py +2 -3
  122. whop_sdk/types/user_retrieve_response.py +12 -1
  123. {whop_sdk-0.0.1.dist-info → whop_sdk-0.0.3.dist-info}/METADATA +2 -2
  124. {whop_sdk-0.0.1.dist-info → whop_sdk-0.0.3.dist-info}/RECORD +126 -50
  125. {whop_sdk-0.0.1.dist-info → whop_sdk-0.0.3.dist-info}/WHEEL +0 -0
  126. {whop_sdk-0.0.1.dist-info → whop_sdk-0.0.3.dist-info}/licenses/LICENSE +0 -0
@@ -45,22 +45,25 @@ class Plan(BaseModel):
45
45
 
46
46
  class CheckoutConfigurationListResponse(BaseModel):
47
47
  id: str
48
- """The ID of the checkout session"""
48
+ """The ID of the checkout configuration"""
49
49
 
50
- affiliate_code: str
51
- """The affiliate code to use for the checkout session"""
50
+ affiliate_code: Optional[str] = None
51
+ """The affiliate code to use for the checkout configuration"""
52
52
 
53
53
  company_id: str
54
- """The ID of the company to use for the checkout session"""
54
+ """The ID of the company to use for the checkout configuration"""
55
55
 
56
56
  metadata: Dict[str, object]
57
- """The metadata to use for the checkout session"""
57
+ """The metadata to use for the checkout configuration"""
58
58
 
59
59
  plan: Plan
60
- """The plan to use for the checkout session"""
60
+ """The plan to use for the checkout configuration"""
61
61
 
62
62
  purchase_url: str
63
- """The URL to redirect the user to after the checkout session is created"""
63
+ """A URL you can send to customers to complete a checkout.
64
64
 
65
- redirect_url: str
66
- """The URL to redirect the user to after the checkout session is created"""
65
+ It looks like `/checkout/plan_xxxx?session={id}`
66
+ """
67
+
68
+ redirect_url: Optional[str] = None
69
+ """The URL to redirect the user to after the checkout configuration is created"""
@@ -0,0 +1,109 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List, Optional
4
+ from datetime import datetime
5
+
6
+ from .._models import BaseModel
7
+ from .languages import Languages
8
+ from .lesson_types import LessonTypes
9
+
10
+ __all__ = ["Course", "Chapter", "ChapterLesson", "Thumbnail"]
11
+
12
+
13
+ class ChapterLesson(BaseModel):
14
+ id: str
15
+ """The ID of the lesson"""
16
+
17
+ lesson_type: LessonTypes
18
+ """The type of the lesson (text, video, pdf, multi, quiz, knowledge_check)"""
19
+
20
+ order: int
21
+ """The order of the lesson within its chapter"""
22
+
23
+ title: str
24
+ """The title of the lesson"""
25
+
26
+
27
+ class Chapter(BaseModel):
28
+ id: str
29
+ """The ID of the chapter. Looks like chap_XXX"""
30
+
31
+ lessons: List[ChapterLesson]
32
+ """The lessons in this chapter"""
33
+
34
+ order: int
35
+ """The order of the chapter within its course"""
36
+
37
+ title: str
38
+ """The title of the chapter"""
39
+
40
+
41
+ class Thumbnail(BaseModel):
42
+ id: str
43
+ """The ID of the attachment"""
44
+
45
+ content_type: Optional[str] = None
46
+ """The attachment's content type (e.g., image/jpg, video/mp4)"""
47
+
48
+ filename: Optional[str] = None
49
+ """The name of the file"""
50
+
51
+ optimized_url: Optional[str] = None
52
+ """This is the URL you use to render optimized attachments on the client.
53
+
54
+ This should be used for apps.
55
+ """
56
+
57
+ source_url: Optional[str] = None
58
+ """The original URL of the attachment, such as a direct link to S3.
59
+
60
+ This should never be displayed on the client and always passed to an Imgproxy
61
+ transformer.
62
+ """
63
+
64
+
65
+ class Course(BaseModel):
66
+ id: str
67
+ """The ID of the course. Looks like cors_XXX"""
68
+
69
+ certificate_after_completion_enabled: Optional[bool] = None
70
+ """
71
+ Whether the course will award its students a PDF certificate after completing
72
+ all lessons
73
+ """
74
+
75
+ chapters: List[Chapter]
76
+ """The chapters in this course"""
77
+
78
+ created_at: datetime
79
+ """The timestamp of when the course was created"""
80
+
81
+ description: Optional[str] = None
82
+ """A short description of the course"""
83
+
84
+ language: Languages
85
+ """
86
+ The language spoken in the video content of the course, used to generate closed
87
+ captions in the right language
88
+ """
89
+
90
+ require_completing_lessons_in_order: bool
91
+ """
92
+ Whether the course requires students to complete the previous lesson before
93
+ moving on to the next one
94
+ """
95
+
96
+ tagline: Optional[str] = None
97
+ """A short tagline for the course.
98
+
99
+ It is displayed under the course title in the UI
100
+ """
101
+
102
+ thumbnail: Optional[Thumbnail] = None
103
+ """The thumbnail for the course"""
104
+
105
+ title: Optional[str] = None
106
+ """The title of the course"""
107
+
108
+ updated_at: datetime
109
+ """The timestamp of when the course was last updated"""
@@ -0,0 +1,32 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List
4
+
5
+ from .._models import BaseModel
6
+
7
+ __all__ = ["CourseChapter", "Lesson"]
8
+
9
+
10
+ class Lesson(BaseModel):
11
+ id: str
12
+ """The ID of the lesson"""
13
+
14
+ order: int
15
+ """The order of the lesson within its chapter"""
16
+
17
+ title: str
18
+ """The title of the lesson"""
19
+
20
+
21
+ class CourseChapter(BaseModel):
22
+ id: str
23
+ """The ID of the chapter. Looks like chap_XXX"""
24
+
25
+ lessons: List[Lesson]
26
+ """The lessons in this chapter"""
27
+
28
+ order: int
29
+ """The order of the chapter within its course"""
30
+
31
+ title: str
32
+ """The title of the chapter"""
@@ -0,0 +1,16 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["CourseChapterCreateParams"]
9
+
10
+
11
+ class CourseChapterCreateParams(TypedDict, total=False):
12
+ course_id: Required[str]
13
+ """The ID of the course to create the chapter in"""
14
+
15
+ title: Optional[str]
16
+ """The title of the chapter"""
@@ -0,0 +1,7 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing_extensions import TypeAlias
4
+
5
+ __all__ = ["CourseChapterDeleteResponse"]
6
+
7
+ CourseChapterDeleteResponse: TypeAlias = bool
@@ -0,0 +1,25 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["CourseChapterListParams"]
9
+
10
+
11
+ class CourseChapterListParams(TypedDict, total=False):
12
+ course_id: Required[str]
13
+ """The ID of the course"""
14
+
15
+ after: Optional[str]
16
+ """Returns the elements in the list that come after the specified cursor."""
17
+
18
+ before: Optional[str]
19
+ """Returns the elements in the list that come before the specified cursor."""
20
+
21
+ first: Optional[int]
22
+ """Returns the first _n_ elements from the list."""
23
+
24
+ last: Optional[int]
25
+ """Returns the last _n_ elements from the list."""
@@ -0,0 +1,16 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from .._models import BaseModel
4
+
5
+ __all__ = ["CourseChapterListResponse"]
6
+
7
+
8
+ class CourseChapterListResponse(BaseModel):
9
+ id: str
10
+ """The ID of the chapter. Looks like chap_XXX"""
11
+
12
+ order: int
13
+ """The order of the chapter within its course"""
14
+
15
+ title: str
16
+ """The title of the chapter"""
@@ -0,0 +1,12 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Required, TypedDict
6
+
7
+ __all__ = ["CourseChapterUpdateParams"]
8
+
9
+
10
+ class CourseChapterUpdateParams(TypedDict, total=False):
11
+ title: Required[str]
12
+ """The title of the chapter"""
@@ -0,0 +1,41 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["CourseCreateParams", "Thumbnail"]
9
+
10
+
11
+ class CourseCreateParams(TypedDict, total=False):
12
+ experience_id: Required[str]
13
+ """The ID of the experience to create the course in"""
14
+
15
+ title: Required[str]
16
+ """The title of the course"""
17
+
18
+ cover_image: Optional[str]
19
+ """The cover image URL of the course"""
20
+
21
+ tagline: Optional[str]
22
+ """The tagline of the course"""
23
+
24
+ thumbnail: Optional[Thumbnail]
25
+ """The thumbnail for the course in png, jpeg, or gif format"""
26
+
27
+
28
+ class Thumbnail(TypedDict, total=False):
29
+ id: Optional[str]
30
+ """The ID of an existing attachment object.
31
+
32
+ Use this when updating a resource and keeping a subset of the attachments. Don't
33
+ use this unless you know what you're doing.
34
+ """
35
+
36
+ direct_upload_id: Optional[str]
37
+ """This ID should be used the first time you upload an attachment.
38
+
39
+ It is the ID of the direct upload that was created when uploading the file to S3
40
+ via the mediaDirectUpload mutation.
41
+ """
@@ -0,0 +1,7 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing_extensions import TypeAlias
4
+
5
+ __all__ = ["CourseDeleteResponse"]
6
+
7
+ CourseDeleteResponse: TypeAlias = bool
@@ -0,0 +1,27 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ from .lesson_types import LessonTypes
9
+
10
+ __all__ = ["CourseLessonCreateParams"]
11
+
12
+
13
+ class CourseLessonCreateParams(TypedDict, total=False):
14
+ chapter_id: Required[str]
15
+ """The ID of the chapter to create the lesson in"""
16
+
17
+ lesson_type: Required[LessonTypes]
18
+ """The type of the lesson"""
19
+
20
+ content: Optional[str]
21
+ """The content of the lesson"""
22
+
23
+ days_from_course_start_until_unlock: Optional[int]
24
+ """Days from course start until unlock"""
25
+
26
+ title: Optional[str]
27
+ """The title of the lesson"""
@@ -0,0 +1,7 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing_extensions import TypeAlias
4
+
5
+ __all__ = ["CourseLessonDeleteResponse"]
6
+
7
+ CourseLessonDeleteResponse: TypeAlias = bool
@@ -0,0 +1,26 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from datetime import datetime
4
+ from typing_extensions import Literal
5
+
6
+ from .._models import BaseModel
7
+ from .shared.course_lesson_interaction import CourseLessonInteraction
8
+
9
+ __all__ = ["CourseLessonInteractionCompletedWebhookEvent"]
10
+
11
+
12
+ class CourseLessonInteractionCompletedWebhookEvent(BaseModel):
13
+ id: str
14
+ """A unique ID for every single webhook request"""
15
+
16
+ api_version: Literal["v1"]
17
+ """The API version for this webhook"""
18
+
19
+ data: CourseLessonInteraction
20
+ """A lesson interaction tracking user progress in courses"""
21
+
22
+ timestamp: datetime
23
+ """The timestamp in ISO 8601 format that the webhook was sent at on the server"""
24
+
25
+ type: Literal["course_lesson_interaction.completed"]
26
+ """The webhook event type"""
@@ -0,0 +1,28 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import TypedDict
7
+
8
+ __all__ = ["CourseLessonListParams"]
9
+
10
+
11
+ class CourseLessonListParams(TypedDict, total=False):
12
+ after: Optional[str]
13
+ """Returns the elements in the list that come after the specified cursor."""
14
+
15
+ before: Optional[str]
16
+ """Returns the elements in the list that come before the specified cursor."""
17
+
18
+ chapter_id: Optional[str]
19
+ """The ID of the chapter (returns lessons only for this chapter)"""
20
+
21
+ course_id: Optional[str]
22
+ """The ID of the course (returns all lessons across all chapters)"""
23
+
24
+ first: Optional[int]
25
+ """Returns the first _n_ elements from the list."""
26
+
27
+ last: Optional[int]
28
+ """Returns the last _n_ elements from the list."""
@@ -0,0 +1,35 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Optional
4
+
5
+ from .._models import BaseModel
6
+ from .lesson_types import LessonTypes
7
+ from .lesson_visibilities import LessonVisibilities
8
+
9
+ __all__ = ["CourseLessonListResponse"]
10
+
11
+
12
+ class CourseLessonListResponse(BaseModel):
13
+ id: str
14
+ """The ID of the lesson"""
15
+
16
+ content: Optional[str] = None
17
+ """The content of the lesson"""
18
+
19
+ days_from_course_start_until_unlock: Optional[int] = None
20
+ """Number of days from course start until the lesson is unlocked"""
21
+
22
+ lesson_type: LessonTypes
23
+ """The type of the lesson (text, video, pdf, multi, quiz, knowledge_check)"""
24
+
25
+ order: int
26
+ """The order of the lesson within its chapter"""
27
+
28
+ title: str
29
+ """The title of the lesson"""
30
+
31
+ visibility: LessonVisibilities
32
+ """The visibility of the lesson.
33
+
34
+ Determines how / whether this lesson is visible to users.
35
+ """
@@ -0,0 +1,144 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Iterable, Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ from .lesson_types import LessonTypes
9
+ from .lesson_visibilities import LessonVisibilities
10
+ from .assessment_question_types import AssessmentQuestionTypes
11
+
12
+ __all__ = [
13
+ "CourseLessonUpdateParams",
14
+ "AssessmentQuestion",
15
+ "AssessmentQuestionImage",
16
+ "AssessmentQuestionOption",
17
+ "Attachment",
18
+ "MainPdf",
19
+ ]
20
+
21
+
22
+ class CourseLessonUpdateParams(TypedDict, total=False):
23
+ assessment_questions: Optional[Iterable[AssessmentQuestion]]
24
+ """Assessment questions for quiz/knowledge check lessons.
25
+
26
+ Replaces all existing questions.
27
+ """
28
+
29
+ attachments: Optional[Iterable[Attachment]]
30
+ """General attachments for the lesson (PDFs, files, etc).
31
+
32
+ Replaces all existing attachments.
33
+ """
34
+
35
+ content: Optional[str]
36
+ """The content of the lesson"""
37
+
38
+ days_from_course_start_until_unlock: Optional[int]
39
+ """Days from course start until unlock"""
40
+
41
+ lesson_type: Optional[LessonTypes]
42
+ """The available types for a lesson"""
43
+
44
+ main_pdf: Optional[MainPdf]
45
+ """The main PDF file for this lesson"""
46
+
47
+ mux_asset_id: Optional[str]
48
+ """The ID of the Mux asset to attach to this lesson for video lessons"""
49
+
50
+ title: Optional[str]
51
+ """The title of the lesson"""
52
+
53
+ visibility: Optional[LessonVisibilities]
54
+ """The available visibilities for a lesson.
55
+
56
+ Determines how / whether a lesson is visible to users.
57
+ """
58
+
59
+
60
+ class AssessmentQuestionImage(TypedDict, total=False):
61
+ id: Optional[str]
62
+ """The ID of an existing attachment object.
63
+
64
+ Use this when updating a resource and keeping a subset of the attachments. Don't
65
+ use this unless you know what you're doing.
66
+ """
67
+
68
+ direct_upload_id: Optional[str]
69
+ """This ID should be used the first time you upload an attachment.
70
+
71
+ It is the ID of the direct upload that was created when uploading the file to S3
72
+ via the mediaDirectUpload mutation.
73
+ """
74
+
75
+
76
+ class AssessmentQuestionOption(TypedDict, total=False):
77
+ is_correct: Required[bool]
78
+ """Whether this option is a correct answer"""
79
+
80
+ option_text: Required[str]
81
+ """The text of the answer option"""
82
+
83
+ id: Optional[str]
84
+ """The ID of an existing option.
85
+
86
+ If provided, the option will be updated. If not provided, a new option will be
87
+ created.
88
+ """
89
+
90
+
91
+ class AssessmentQuestion(TypedDict, total=False):
92
+ correct_answer: Required[str]
93
+ """The correct answer for the question. Used for short answer questions"""
94
+
95
+ question_text: Required[str]
96
+ """The text of the question"""
97
+
98
+ question_type: Required[AssessmentQuestionTypes]
99
+ """The type of the question"""
100
+
101
+ id: Optional[str]
102
+ """The ID of an existing question.
103
+
104
+ If provided, the question will be updated. If not provided, a new question will
105
+ be created.
106
+ """
107
+
108
+ image: Optional[AssessmentQuestionImage]
109
+ """Optional image attachment for the question"""
110
+
111
+ options: Optional[Iterable[AssessmentQuestionOption]]
112
+ """The answer options for multiple choice/select questions"""
113
+
114
+
115
+ class Attachment(TypedDict, total=False):
116
+ id: Optional[str]
117
+ """The ID of an existing attachment object.
118
+
119
+ Use this when updating a resource and keeping a subset of the attachments. Don't
120
+ use this unless you know what you're doing.
121
+ """
122
+
123
+ direct_upload_id: Optional[str]
124
+ """This ID should be used the first time you upload an attachment.
125
+
126
+ It is the ID of the direct upload that was created when uploading the file to S3
127
+ via the mediaDirectUpload mutation.
128
+ """
129
+
130
+
131
+ class MainPdf(TypedDict, total=False):
132
+ id: Optional[str]
133
+ """The ID of an existing attachment object.
134
+
135
+ Use this when updating a resource and keeping a subset of the attachments. Don't
136
+ use this unless you know what you're doing.
137
+ """
138
+
139
+ direct_upload_id: Optional[str]
140
+ """This ID should be used the first time you upload an attachment.
141
+
142
+ It is the ID of the direct upload that was created when uploading the file to S3
143
+ via the mediaDirectUpload mutation.
144
+ """
@@ -0,0 +1,28 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import TypedDict
7
+
8
+ __all__ = ["CourseListParams"]
9
+
10
+
11
+ class CourseListParams(TypedDict, total=False):
12
+ after: Optional[str]
13
+ """Returns the elements in the list that come after the specified cursor."""
14
+
15
+ before: Optional[str]
16
+ """Returns the elements in the list that come before the specified cursor."""
17
+
18
+ company_id: Optional[str]
19
+ """The ID of the company"""
20
+
21
+ experience_id: Optional[str]
22
+ """The ID of the experience"""
23
+
24
+ first: Optional[int]
25
+ """Returns the first _n_ elements from the list."""
26
+
27
+ last: Optional[int]
28
+ """Returns the last _n_ elements from the list."""