wangrong
2026-08-24 beef6536e7c8dd3f5cbe8f73585611479910bea7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
o
¬Ž3j` ã@sJddlZddlmZddlmZddlmZddlmZGdd„dƒZ    dS)éN)Údeepcopy)ÚPath)ÚAny)Úsettingsc    @sNeZdZd!dedBddfdd„Zdedeeeffdd„Zd    ed
edefd d „Z    ded
edefd d„Z
deeefd
edeeeffdd„Z deeeffdd„Z dedeeeffdd„Z deeeffdd„Zdedeeeffdd„Zded
edeeeffdd„Zd
edeeeeffdd„Zded
edeeeeffdd „ZdS)"Ú CourseServiceNÚdata_dirÚreturncCs|ptj|_dS©N)rr)Úselfr©r ú;D:\apps\smartlearning\server\app\services\course_service.pyÚ__init__
ózCourseService.__init__ÚpathcCs:|jdd }t |¡WdƒS1swYdS)Nzutf-8)Úencoding)ÚopenÚjsonÚload)r
rÚfr r r Ú
_read_json s$ÿzCourseService._read_jsonÚserver_rel_pathÚbase_urlcCs&| dd¡ d¡}| d¡›d|›S)Nú\ú/z/static/)ÚreplaceÚlstripÚrstrip)r
rrÚrelr r r Ú
static_urlszCourseService.static_urlcCs$| d¡s
| d¡r |S| ||¡S)Nzhttp://zhttps://)Ú
startswithr)r
rrr r r Ú_resolve_media_urls z CourseService._resolve_media_urlÚassetcCsHt|ƒ}| d¡r| |d|¡|d<| d¡r"| |d|¡|d<|S)NÚurlZ    cover_url)ÚdictÚgetr )r
r!rÚresolvedr r r Ú_resolve_asset_urlss 
 
z!CourseService._resolve_asset_urlscCs| |jdd¡S)NÚcoursesz
index.json©rr©r
r r r Úget_course_index"szCourseService.get_course_indexÚ    course_idcCsP| ¡}| dg¡D]}|d|kr |j|d}| |¡Sq
td|›ƒ‚)Nr'r+ÚconfigzCourse not found: )r*r$rrÚFileNotFoundError)r
r+ÚindexÚitemZ config_pathr r r Ú
get_course%s þzCourseService.get_coursecCs| |jd¡S)Nz tasklist.jsonr(r)r r r Ú get_tasklist-rzCourseService.get_tasklistcCs2|jd|d}| ¡std|›ƒ‚| |¡S)Nr'úcourseTask.jsonzCourse task not found: )rÚexistsr-r)r
r+rr r r Úget_course_task0s
zCourseService.get_course_taskcs6tˆ |¡ƒ}| dg¡}‡‡fdd„|Dƒ|d<|S)NÚassetscóg|]}ˆ |ˆ¡‘qSr ©r&©Ú.0r!©rr
r r Ú
<listcomp>9óz@CourseService.build_course_task_sync_payload.<locals>.<listcomp>)rr4r$)r
r+rÚtaskr5r r:r Úbuild_course_task_sync_payload6s z,CourseService.build_course_task_sync_payloadcCsV| ¡}g}| dg¡D]}|d}|jd|d}| ¡r(| | ||¡¡q |S)Nr'r+r2)r*r$rr3Úappendr>)r
rr.Zpayloadsr/r+Z    task_pathr r r Úbuild_base_course_sync_payloads<s€z-CourseService.build_base_course_sync_payloadscs&ˆ |¡}‡‡fdd„| dg¡DƒS)Ncr6r r7r8r:r r r;Hr<z7CourseService.build_manifest_assets.<locals>.<listcomp>r5)r4r$)r
r+rr=r r:r Úbuild_manifest_assetsFs
z#CourseService.build_manifest_assetsr    )Ú__name__Ú
__module__Ú __qualname__rr r#Ústrrrrr r&r*r0r1r4r>Úlistr@rAr r r r r    s&&
r)
rÚcopyrÚpathlibrÚtypingrÚ
app.configrrr r r r Ú<module>s