datagsm-openapi-sdk 1.0.0b1__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.
@@ -0,0 +1,41 @@
1
+ """Data models for DataGSM OpenAPI SDK."""
2
+
3
+ from ._common import CommonApiResponse
4
+ from .club import Club, ClubDetail, ClubResponse
5
+ from .enums import (
6
+ ClubSortBy,
7
+ ClubType,
8
+ Major,
9
+ MealType,
10
+ ProjectSortBy,
11
+ Sex,
12
+ SortDirection,
13
+ StudentRole,
14
+ StudentSortBy,
15
+ )
16
+ from .neis import Meal, Schedule
17
+ from .project import ParticipantInfo, Project, ProjectResponse
18
+ from .student import Student, StudentResponse
19
+
20
+ __all__ = [
21
+ "Club",
22
+ "ClubDetail",
23
+ "ClubResponse",
24
+ "ClubSortBy",
25
+ "ClubType",
26
+ "CommonApiResponse",
27
+ "Major",
28
+ "Meal",
29
+ "MealType",
30
+ "ParticipantInfo",
31
+ "Project",
32
+ "ProjectResponse",
33
+ "ProjectSortBy",
34
+ "Schedule",
35
+ "Sex",
36
+ "SortDirection",
37
+ "Student",
38
+ "StudentResponse",
39
+ "StudentRole",
40
+ "StudentSortBy",
41
+ ]
@@ -0,0 +1,37 @@
1
+ """Common response wrapper for DataGSM OpenAPI."""
2
+
3
+ from typing import Generic, Optional, TypeVar
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ T = TypeVar("T")
8
+
9
+
10
+ class CommonApiResponse(BaseModel, Generic[T]):
11
+ """공통 API 응답 래퍼 (Common API Response Wrapper).
12
+
13
+ All API responses follow this structure with a data field containing
14
+ the actual response payload.
15
+
16
+ Attributes:
17
+ status: Response status (e.g., "success", "error")
18
+ code: HTTP status code
19
+ message: Response message
20
+ data: The actual response data of generic type T
21
+ """
22
+
23
+ status: str = Field(..., description="Response status")
24
+ code: int = Field(..., description="HTTP status code")
25
+ message: str = Field(..., description="Response message")
26
+ data: Optional[T] = Field(None, description="Response data")
27
+
28
+ model_config = ConfigDict(
29
+ json_schema_extra={
30
+ "example": {
31
+ "status": "success",
32
+ "code": 200,
33
+ "message": "Request successful",
34
+ "data": {},
35
+ }
36
+ }
37
+ )
@@ -0,0 +1,76 @@
1
+ """Club-related models for DataGSM OpenAPI SDK."""
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from .enums import ClubType
8
+
9
+ if TYPE_CHECKING:
10
+ from .project import ParticipantInfo
11
+
12
+
13
+ class Club(BaseModel):
14
+ """동아리 정보 - 간단 버전 (Club Information - Simple Version).
15
+
16
+ Basic club information used in references from other models.
17
+
18
+ Attributes:
19
+ id: Club ID
20
+ name: Club name
21
+ type: Club type (MAJOR_CLUB, JOB_CLUB, AUTONOMOUS_CLUB)
22
+ """
23
+
24
+ id: int = Field(..., description="Club ID")
25
+ name: str = Field(..., description="Club name")
26
+ type: ClubType = Field(..., description="Club type")
27
+
28
+ model_config = ConfigDict(populate_by_name=True)
29
+
30
+
31
+ class ClubDetail(BaseModel):
32
+ """동아리 상세 정보 (Club Detail Information).
33
+
34
+ Detailed club information including leader and member list.
35
+
36
+ Attributes:
37
+ id: Club ID
38
+ name: Club name
39
+ type: Club type
40
+ leader: Club leader information
41
+ participants: List of club members
42
+ """
43
+
44
+ id: int = Field(..., description="Club ID")
45
+ name: str = Field(..., description="Club name")
46
+ type: ClubType = Field(..., description="Club type")
47
+ leader: "ParticipantInfo" = Field(..., description="Club leader")
48
+ participants: list["ParticipantInfo"] = Field(
49
+ default_factory=list, description="Club members"
50
+ )
51
+
52
+ model_config = ConfigDict(populate_by_name=True)
53
+
54
+
55
+ class ClubResponse(BaseModel):
56
+ """동아리 목록 응답 (Club List Response).
57
+
58
+ Response model for paginated club list queries.
59
+
60
+ Attributes:
61
+ total_pages: Total number of pages
62
+ total_elements: Total number of clubs matching the query
63
+ clubs: List of clubs with details
64
+ """
65
+
66
+ total_pages: int = Field(..., alias="totalPages", description="Total number of pages")
67
+ total_elements: int = Field(..., alias="totalElements", description="Total number of clubs")
68
+ clubs: list[ClubDetail] = Field(default_factory=list, description="List of clubs")
69
+
70
+ model_config = ConfigDict(populate_by_name=True)
71
+
72
+
73
+ # Resolve forward references for ClubDetail
74
+ from .project import ParticipantInfo # noqa: E402
75
+
76
+ ClubDetail.model_rebuild()
@@ -0,0 +1,82 @@
1
+ """Enum types for DataGSM OpenAPI SDK."""
2
+
3
+ from enum import Enum
4
+
5
+
6
+ class Sex(str, Enum):
7
+ """성별 (Gender)."""
8
+
9
+ MAN = "MAN"
10
+ WOMAN = "WOMAN"
11
+
12
+
13
+ class Major(str, Enum):
14
+ """전공 (Major)."""
15
+
16
+ SW_DEVELOPMENT = "SW_DEVELOPMENT"
17
+ SMART_IOT = "SMART_IOT"
18
+ AI = "AI"
19
+
20
+
21
+ class ClubType(str, Enum):
22
+ """동아리 종류 (Club Type)."""
23
+
24
+ MAJOR_CLUB = "MAJOR_CLUB"
25
+ JOB_CLUB = "JOB_CLUB"
26
+ AUTONOMOUS_CLUB = "AUTONOMOUS_CLUB"
27
+
28
+
29
+ class StudentRole(str, Enum):
30
+ """학생 역할 (Student Role)."""
31
+
32
+ GENERAL_STUDENT = "GENERAL_STUDENT"
33
+ STUDENT_COUNCIL = "STUDENT_COUNCIL"
34
+ DORMITORY_MANAGER = "DORMITORY_MANAGER"
35
+ GRADUATE = "GRADUATE"
36
+
37
+
38
+ class MealType(str, Enum):
39
+ """급식 타입 (Meal Type)."""
40
+
41
+ BREAKFAST = "BREAKFAST"
42
+ LUNCH = "LUNCH"
43
+ DINNER = "DINNER"
44
+
45
+
46
+ class SortDirection(str, Enum):
47
+ """정렬 방향 (Sort Direction)."""
48
+
49
+ ASC = "ASC" # 오름차순
50
+ DESC = "DESC" # 내림차순
51
+
52
+
53
+ class StudentSortBy(str, Enum):
54
+ """학생 정렬 기준 (Student Sort By)."""
55
+
56
+ ID = "ID"
57
+ NAME = "NAME"
58
+ EMAIL = "EMAIL"
59
+ STUDENT_NUMBER = "STUDENT_NUMBER"
60
+ GRADE = "GRADE"
61
+ CLASS_NUM = "CLASS_NUM"
62
+ NUMBER = "NUMBER"
63
+ MAJOR = "MAJOR"
64
+ ROLE = "ROLE"
65
+ SEX = "SEX"
66
+ DORMITORY_ROOM = "DORMITORY_ROOM"
67
+ IS_LEAVE_SCHOOL = "IS_LEAVE_SCHOOL"
68
+
69
+
70
+ class ClubSortBy(str, Enum):
71
+ """동아리 정렬 기준 (Club Sort By)."""
72
+
73
+ ID = "ID"
74
+ NAME = "NAME"
75
+ TYPE = "TYPE"
76
+
77
+
78
+ class ProjectSortBy(str, Enum):
79
+ """프로젝트 정렬 기준 (Project Sort By)."""
80
+
81
+ ID = "ID"
82
+ NAME = "NAME"
@@ -0,0 +1,102 @@
1
+ """NEIS-related models (급식, 학사일정) for DataGSM OpenAPI SDK."""
2
+
3
+ from datetime import date
4
+ from typing import Optional
5
+
6
+ from pydantic import BaseModel, ConfigDict, Field
7
+
8
+ from .enums import MealType
9
+
10
+
11
+ class Meal(BaseModel):
12
+ """급식 정보 (Meal Information).
13
+
14
+ Information about school meals from NEIS.
15
+
16
+ Attributes:
17
+ meal_id: Meal ID
18
+ school_code: School code
19
+ school_name: School name
20
+ office_code: Education office code
21
+ office_name: Education office name
22
+ meal_date: Meal date
23
+ meal_type: Meal type (BREAKFAST, LUNCH, DINNER)
24
+ meal_menu: List of menu items
25
+ meal_allergy_info: List of allergy information
26
+ meal_calories: Calorie information
27
+ origin_info: Origin information of ingredients
28
+ nutrition_info: Nutrition information
29
+ meal_serve_count: Number of servings
30
+ """
31
+
32
+ meal_id: str = Field(..., alias="mealId", description="Meal ID")
33
+ school_code: str = Field(..., alias="schoolCode", description="School code")
34
+ school_name: str = Field(..., alias="schoolName", description="School name")
35
+ office_code: str = Field(..., alias="officeCode", description="Education office code")
36
+ office_name: str = Field(..., alias="officeName", description="Education office name")
37
+ meal_date: date = Field(..., alias="mealDate", description="Meal date")
38
+ meal_type: MealType = Field(..., alias="mealType", description="Meal type")
39
+ meal_menu: list[str] = Field(
40
+ default_factory=list, alias="mealMenu", description="Menu items"
41
+ )
42
+ meal_allergy_info: list[str] = Field(
43
+ default_factory=list, alias="mealAllergyInfo", description="Allergy information"
44
+ )
45
+ meal_calories: Optional[str] = Field(None, alias="mealCalories", description="Calories")
46
+ origin_info: Optional[str] = Field(
47
+ None, alias="originInfo", description="Origin of ingredients"
48
+ )
49
+ nutrition_info: Optional[str] = Field(
50
+ None, alias="nutritionInfo", description="Nutrition information"
51
+ )
52
+ meal_serve_count: Optional[int] = Field(
53
+ None, alias="mealServeCount", description="Number of servings"
54
+ )
55
+
56
+ model_config = ConfigDict(populate_by_name=True)
57
+
58
+
59
+ class Schedule(BaseModel):
60
+ """학사일정 정보 (School Schedule Information).
61
+
62
+ Information about school academic schedules from NEIS.
63
+
64
+ Attributes:
65
+ schedule_id: Schedule ID
66
+ school_code: School code
67
+ school_name: School name
68
+ office_code: Education office code
69
+ office_name: Education office name
70
+ schedule_date: Schedule date
71
+ academic_year: Academic year
72
+ event_name: Event name
73
+ event_content: Event content/description
74
+ day_category: Day category
75
+ school_course_type: School course type
76
+ day_night_type: Day/night type
77
+ target_grades: Target grades for the event
78
+ """
79
+
80
+ schedule_id: str = Field(..., alias="scheduleId", description="Schedule ID")
81
+ school_code: str = Field(..., alias="schoolCode", description="School code")
82
+ school_name: str = Field(..., alias="schoolName", description="School name")
83
+ office_code: str = Field(..., alias="officeCode", description="Education office code")
84
+ office_name: str = Field(..., alias="officeName", description="Education office name")
85
+ schedule_date: date = Field(..., alias="scheduleDate", description="Schedule date")
86
+ academic_year: Optional[str] = Field(None, alias="academicYear", description="Academic year")
87
+ event_name: Optional[str] = Field(None, alias="eventName", description="Event name")
88
+ event_content: Optional[str] = Field(
89
+ None, alias="eventContent", description="Event description"
90
+ )
91
+ day_category: Optional[str] = Field(None, alias="dayCategory", description="Day category")
92
+ school_course_type: Optional[str] = Field(
93
+ None, alias="schoolCourseType", description="School course type"
94
+ )
95
+ day_night_type: Optional[str] = Field(
96
+ None, alias="dayNightType", description="Day/night type"
97
+ )
98
+ target_grades: list[int] = Field(
99
+ default_factory=list, alias="targetGrades", description="Target grades"
100
+ )
101
+
102
+ model_config = ConfigDict(populate_by_name=True)
@@ -0,0 +1,76 @@
1
+ """Project-related models for DataGSM OpenAPI SDK."""
2
+
3
+ from typing import Optional
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from .club import Club
8
+ from .enums import Major, Sex
9
+
10
+
11
+ class ParticipantInfo(BaseModel):
12
+ """동아리 부원/프로젝트 참가자 정보 (Participant Information).
13
+
14
+ Information about a club member or project participant.
15
+
16
+ Attributes:
17
+ id: Student ID
18
+ name: Student name
19
+ email: Email address
20
+ student_number: Student ID number
21
+ major: Major
22
+ sex: Gender
23
+ """
24
+
25
+ id: int = Field(..., description="Student ID")
26
+ name: str = Field(..., description="Student name")
27
+ email: str = Field(..., description="Email address")
28
+ student_number: int = Field(..., alias="studentNumber", description="Student ID number")
29
+ major: Major = Field(..., description="Major")
30
+ sex: Sex = Field(..., description="Gender")
31
+
32
+ model_config = ConfigDict(populate_by_name=True)
33
+
34
+
35
+ class Project(BaseModel):
36
+ """프로젝트 정보 (Project Information).
37
+
38
+ Information about a project including description and participants.
39
+
40
+ Attributes:
41
+ id: Project ID
42
+ name: Project name
43
+ description: Project description
44
+ club: Associated club
45
+ participants: List of project participants
46
+ """
47
+
48
+ id: int = Field(..., description="Project ID")
49
+ name: str = Field(..., description="Project name")
50
+ description: Optional[str] = Field(None, description="Project description")
51
+ club: Optional[Club] = Field(None, description="Associated club")
52
+ participants: list[ParticipantInfo] = Field(
53
+ default_factory=list, description="Project participants"
54
+ )
55
+
56
+ model_config = ConfigDict(populate_by_name=True)
57
+
58
+
59
+ class ProjectResponse(BaseModel):
60
+ """프로젝트 목록 응답 (Project List Response).
61
+
62
+ Response model for paginated project list queries.
63
+
64
+ Attributes:
65
+ total_pages: Total number of pages
66
+ total_elements: Total number of projects matching the query
67
+ projects: List of projects
68
+ """
69
+
70
+ total_pages: int = Field(..., alias="totalPages", description="Total number of pages")
71
+ total_elements: int = Field(
72
+ ..., alias="totalElements", description="Total number of projects"
73
+ )
74
+ projects: list[Project] = Field(default_factory=list, description="List of projects")
75
+
76
+ model_config = ConfigDict(populate_by_name=True)
@@ -0,0 +1,79 @@
1
+ """Student-related models for DataGSM OpenAPI SDK."""
2
+
3
+ from typing import Optional
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from .club import Club
8
+ from .enums import Major, Sex, StudentRole
9
+
10
+
11
+ class Student(BaseModel):
12
+ """학생 정보 (Student Information).
13
+
14
+ Represents detailed information about a student including their
15
+ personal information, class details, dormitory assignment, and club memberships.
16
+
17
+ Attributes:
18
+ id: Student ID
19
+ name: Student name
20
+ sex: Gender
21
+ email: Email address
22
+ grade: Grade (1-3)
23
+ class_num: Class number
24
+ number: Student number within class
25
+ student_number: Full student ID number
26
+ major: Major (SW_DEVELOPMENT, SMART_IOT, AI)
27
+ role: Student role (GENERAL_STUDENT, STUDENT_COUNCIL, etc.)
28
+ dormitory_floor: Dormitory floor number
29
+ dormitory_room: Dormitory room number
30
+ is_leave_school: Whether the student has left school
31
+ major_club: Major club membership
32
+ job_club: Job club membership
33
+ autonomous_club: Autonomous club membership
34
+ """
35
+
36
+ id: int = Field(..., description="Student ID")
37
+ name: str = Field(..., description="Student name")
38
+ sex: Sex = Field(..., description="Gender")
39
+ email: str = Field(..., description="Email address")
40
+ grade: int = Field(..., ge=1, le=3, description="Grade (1-3)")
41
+ class_num: int = Field(..., alias="classNum", description="Class number")
42
+ number: int = Field(..., description="Student number within class")
43
+ student_number: int = Field(..., alias="studentNumber", description="Full student ID number")
44
+ major: Major = Field(..., description="Major")
45
+ role: StudentRole = Field(..., description="Student role")
46
+ dormitory_floor: Optional[int] = Field(
47
+ None, alias="dormitoryFloor", description="Dormitory floor"
48
+ )
49
+ dormitory_room: Optional[int] = Field(
50
+ None, alias="dormitoryRoom", description="Dormitory room"
51
+ )
52
+ is_leave_school: bool = Field(
53
+ ..., alias="isLeaveSchool", description="Whether student has left school"
54
+ )
55
+ major_club: Optional[Club] = Field(None, alias="majorClub", description="Major club")
56
+ job_club: Optional[Club] = Field(None, alias="jobClub", description="Job club")
57
+ autonomous_club: Optional[Club] = Field(
58
+ None, alias="autonomousClub", description="Autonomous club"
59
+ )
60
+
61
+ model_config = ConfigDict(populate_by_name=True)
62
+
63
+
64
+ class StudentResponse(BaseModel):
65
+ """학생 목록 응답 (Student List Response).
66
+
67
+ Response model for paginated student list queries.
68
+
69
+ Attributes:
70
+ students: List of students
71
+ total_elements: Total number of students matching the query
72
+ total_pages: Total number of pages
73
+ """
74
+
75
+ students: list[Student] = Field(default_factory=list, description="List of students")
76
+ total_elements: int = Field(..., alias="totalElements", description="Total number of students")
77
+ total_pages: int = Field(..., alias="totalPages", description="Total number of pages")
78
+
79
+ model_config = ConfigDict(populate_by_name=True)
@@ -0,0 +1 @@
1
+ # Marker file for PEP 561 - indicates this package includes type hints
@@ -0,0 +1,55 @@
1
+ Metadata-Version: 2.4
2
+ Name: datagsm-openapi-sdk
3
+ Version: 1.0.0b1
4
+ Summary: Python SDK for DataGSM OpenAPI
5
+ Author-email: themoment-team <datagsm.oauth@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/themoment-team/datagsm-openapi-sdk-python
8
+ Project-URL: Documentation, https://docs.themoment.io/datagsm/openapi/sdk/python
9
+ Project-URL: Repository, https://github.com/themoment-team/datagsm-openapi-sdk-python
10
+ Project-URL: Issues, https://github.com/themoment-team/datagsm-openapi-sdk-python/issues
11
+ Project-URL: API Documentation, https://openapi.data.hellogsm.kr
12
+ Keywords: datagsm,openapi,sdk,api-client
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Classifier: Typing :: Typed
25
+ Requires-Python: >=3.9
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Requires-Dist: httpx<1.0,>=0.27.0
29
+ Requires-Dist: pydantic<3.0,>=2.0.0
30
+ Requires-Dist: typing-extensions>=4.5.0
31
+ Provides-Extra: dev
32
+ Requires-Dist: mypy>=1.8.0; extra == "dev"
33
+ Requires-Dist: ruff>=0.3.0; extra == "dev"
34
+ Dynamic: license-file
35
+
36
+ ## DataGSM OpenAPI SDK for Python
37
+ [![PyPI](https://img.shields.io/pypi/v/datagsm-openapi-sdk)](https://pypi.org/project/datagsm-openapi-sdk/)
38
+ [![License](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
39
+ [![Python](https://img.shields.io/badge/Python-3.9%2B-blue.svg)](https://www.python.org/)
40
+
41
+ DataGSM의 OpenAPI를 추상화된 환경에서 제공합니다.
42
+
43
+ ### 설치 - pip
44
+
45
+ ```bash
46
+ pip install datagsm-openapi-sdk
47
+ ````
48
+
49
+ ### 설치 - uv
50
+ ```bash
51
+ uv pip install datagsm-openapi-sdk
52
+ ```
53
+
54
+ ### 사용법
55
+ 자세한 사용법은 [기술 문서](https://docs.themoment.io/datagsm/openapi/sdk/python)를 참고하십시오.
@@ -0,0 +1,24 @@
1
+ datagsm_openapi/__init__.py,sha256=E3LM7WI5yLCQC3pwkYitdhCFPcIz9PRKOLs3inTdwG0,1274
2
+ datagsm_openapi/_http.py,sha256=OZZABUHp5-jFP3ZAo3qefvhuv0K7_hIBU9MHBykGfz4,9191
3
+ datagsm_openapi/_json.py,sha256=Bk6aZU4KVoYig-vgmlZStQfweL-vP92tioogixBSQKw,1402
4
+ datagsm_openapi/client.py,sha256=G4sp7Gbv0FFkrX_mo0D4kllyfhtHtbBaX60C3FB0Iuk,3253
5
+ datagsm_openapi/exceptions.py,sha256=TX-zbkC1Q_UpM9Au6NwZmtURDva9t-J_j6GzH4CI0b0,5980
6
+ datagsm_openapi/py.typed,sha256=nn0uakkZniS6TmVIeJaUNfow5rUSXJ0cjiHIe8NXR90,71
7
+ datagsm_openapi/api/__init__.py,sha256=rMI0DOUzRuG-GchNRyw7UPKvhrdUmfgIT8yX5mb47r8,421
8
+ datagsm_openapi/api/_base.py,sha256=vgqzpDXfvbvSqa6zxUKVlUcWo_nCxeuCCAZRXIuEtAM,2216
9
+ datagsm_openapi/api/club.py,sha256=ckOReKNjaPCqVy7mdaKK1xCLAwEY31tcHVkRl8_fpQM,3419
10
+ datagsm_openapi/api/neis.py,sha256=5v92DifHquNNUSv2PfFZq2Vx-11PxjEVj3Y3hiSZyvw,4373
11
+ datagsm_openapi/api/project.py,sha256=NHBC_RNuhgK8-IJ3SUwB5rSZMsh7McbVt4kpyzCx_WM,3217
12
+ datagsm_openapi/api/student.py,sha256=oSYMFyeg74k67XzKijvXc6ICIcBkVFSE_2N0bbVFUqY,4109
13
+ datagsm_openapi/models/__init__.py,sha256=PD3XYSi9RpnjIyAySj_-bmpwRe9KJnwwaoylpQGDh-I,808
14
+ datagsm_openapi/models/_common.py,sha256=BewqG2Q50lfijjbFUjB6k0PlZ7ndZn-y8gFQtgV1dJw,1098
15
+ datagsm_openapi/models/club.py,sha256=auZ7lpZqRpe1noOp7_740FTpGsNO44MI0xTfQRCLicU,2233
16
+ datagsm_openapi/models/enums.py,sha256=w04AzhntYLWuDY8md6seeQa7Hh5XSgLNecbhUGZK_Zg,1587
17
+ datagsm_openapi/models/neis.py,sha256=XPo1BbXqqDiYgv9IihIcnwz_qSYv-P63zO5w9hUsaOs,4231
18
+ datagsm_openapi/models/project.py,sha256=ABdIZgl4yCEJ3OWPzgdLXDDYTzL6rrpOvv24mVyUZv0,2414
19
+ datagsm_openapi/models/student.py,sha256=lf4A-K5OFH7udXz_MWPp6RAhOb9p7OJW4HhanXwBXKE,3105
20
+ datagsm_openapi_sdk-1.0.0b1.dist-info/licenses/LICENSE,sha256=gRsB5Ur-tyuNIUknZlqv_g5ftAEWMprv3nJeFL7-Ni0,1071
21
+ datagsm_openapi_sdk-1.0.0b1.dist-info/METADATA,sha256=NZOZ_Fwf81wlCneniaBYZz2dcxXQH1RR5s-SUnV3nSI,2194
22
+ datagsm_openapi_sdk-1.0.0b1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
23
+ datagsm_openapi_sdk-1.0.0b1.dist-info/top_level.txt,sha256=gSu5DBAKM7iLRkJIGppOHUWIhqjLulZG3PU6l8NCWME,16
24
+ datagsm_openapi_sdk-1.0.0b1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.2)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 themoment-team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ datagsm_openapi