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.
- datagsm_openapi/__init__.py +61 -0
- datagsm_openapi/_http.py +291 -0
- datagsm_openapi/_json.py +53 -0
- datagsm_openapi/api/__init__.py +18 -0
- datagsm_openapi/api/_base.py +73 -0
- datagsm_openapi/api/club.py +106 -0
- datagsm_openapi/api/neis.py +141 -0
- datagsm_openapi/api/project.py +103 -0
- datagsm_openapi/api/student.py +128 -0
- datagsm_openapi/client.py +118 -0
- datagsm_openapi/exceptions.py +213 -0
- datagsm_openapi/models/__init__.py +41 -0
- datagsm_openapi/models/_common.py +37 -0
- datagsm_openapi/models/club.py +76 -0
- datagsm_openapi/models/enums.py +82 -0
- datagsm_openapi/models/neis.py +102 -0
- datagsm_openapi/models/project.py +76 -0
- datagsm_openapi/models/student.py +79 -0
- datagsm_openapi/py.typed +1 -0
- datagsm_openapi_sdk-1.0.0b1.dist-info/METADATA +55 -0
- datagsm_openapi_sdk-1.0.0b1.dist-info/RECORD +24 -0
- datagsm_openapi_sdk-1.0.0b1.dist-info/WHEEL +5 -0
- datagsm_openapi_sdk-1.0.0b1.dist-info/licenses/LICENSE +21 -0
- datagsm_openapi_sdk-1.0.0b1.dist-info/top_level.txt +1 -0
|
@@ -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)
|
datagsm_openapi/py.typed
ADDED
|
@@ -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
|
+
[](https://pypi.org/project/datagsm-openapi-sdk/)
|
|
38
|
+
[](https://opensource.org/licenses/MIT)
|
|
39
|
+
[](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,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
|