3
3
from multiprocessing import Queue
4
4
from typing import List , Optional
5
5
6
- from jupyter_scheduler .orm import DownloadCacheRecord , create_session , generate_uuid
6
+ from jupyter_scheduler .orm import Downloads , create_session , generate_uuid
7
+ from jupyter_scheduler .pydantic_v1 import BaseModel
7
8
from jupyter_scheduler .utils import get_utc_timestamp
8
9
from jupyter_scheduler .pydantic_v1 import BaseModel
9
10
10
11
11
- class DescribeDownloadCache (BaseModel ):
12
+ class DescribeDownload (BaseModel ):
12
13
job_id : str
13
14
download_id : str
14
15
download_initiated_time : int
@@ -31,80 +32,54 @@ def __str__(self):
31
32
return f"Id: { self .job_id } , Download initiated: { download_initiated_time } "
32
33
33
34
34
- class MultiprocessQueue :
35
- """A multiprocess-safe queue using multiprocessing.Queue()"""
36
-
37
- def __init__ (self ):
38
- self .queue = Queue ()
39
-
40
- def put (self , download : DownloadTask ):
41
- self .queue .put (download )
42
-
43
- def get (self ) -> Optional [DownloadTask ]:
44
- return self .queue .get () if not self .queue .empty () else None
45
-
46
- def isempty (self ) -> bool :
47
- return self .queue .empty ()
48
-
49
-
50
- class DownloadCache :
35
+ class DownloadRecordManager :
51
36
def __init__ (self , db_url ):
52
37
self .session = create_session (db_url )
53
38
54
- def put (self , download : DescribeDownloadCache ):
39
+ def put (self , download : DescribeDownload ):
55
40
with self .session () as session :
56
- new_download = DownloadCacheRecord (** download .dict ())
41
+ new_download = Downloads (** download .dict ())
57
42
session .add (new_download )
58
43
session .commit ()
59
44
60
- def get (self , job_id : str ) -> Optional [DescribeDownloadCache ]:
45
+ def get (self , job_id : str ) -> Optional [DescribeDownload ]:
61
46
with self .session () as session :
62
- download = (
63
- session .query (DownloadCacheRecord )
64
- .filter (DownloadCacheRecord .job_id == job_id )
65
- .first ()
66
- )
47
+ download = session .query (Downloads ).filter (Downloads .job_id == job_id ).first ()
67
48
68
49
if download :
69
- return DescribeDownloadCache .from_orm (download )
50
+ return DescribeDownload .from_orm (download )
70
51
else :
71
52
return None
72
53
73
- def get_tasks (self ) -> List [DescribeDownloadCache ]:
54
+ def get_tasks (self ) -> List [DescribeDownload ]:
74
55
with self .session () as session :
75
- return (
76
- session .query (DownloadCacheRecord )
77
- .order_by (DownloadCacheRecord .download_initiated_time )
78
- .all ()
79
- )
56
+ return session .query (Downloads ).order_by (Downloads .download_initiated_time ).all ()
80
57
81
58
def delete_download (self , download_id : str ):
82
59
with self .session () as session :
83
- session .query (DownloadCacheRecord ).filter (
84
- DownloadCacheRecord .download_id == download_id
85
- ).delete ()
60
+ session .query (Downloads ).filter (Downloads .download_id == download_id ).delete ()
86
61
session .commit ()
87
62
88
63
def delete_job_downloads (self , job_id : str ):
89
64
with self .session () as session :
90
- session .query (DownloadCacheRecord ).filter (DownloadCacheRecord .job_id == job_id ).delete ()
65
+ session .query (Downloads ).filter (Downloads .job_id == job_id ).delete ()
91
66
session .commit ()
92
67
93
68
94
69
class DownloadManager :
95
70
def __init__ (self , db_url : str ):
96
- self .cache = DownloadCache (db_url = db_url )
97
- self .queue = MultiprocessQueue ()
71
+ self .record_manager = DownloadRecordManager (db_url = db_url )
72
+ self .queue = Queue ()
98
73
99
74
def download_from_staging (self , job_id : str ):
100
75
download_initiated_time = get_utc_timestamp ()
101
76
download_id = generate_uuid ()
102
- download_cache = DescribeDownloadCache (
77
+ download_cache = DescribeDownload (
103
78
job_id = job_id ,
104
79
download_id = download_id ,
105
80
download_initiated_time = download_initiated_time ,
106
81
)
107
- self .cache .put (download_cache )
82
+ self .record_manager .put (download_cache )
108
83
download_task = DownloadTask (
109
84
job_id = job_id ,
110
85
download_id = download_id ,
@@ -113,13 +88,13 @@ def download_from_staging(self, job_id: str):
113
88
self .queue .put (download_task )
114
89
115
90
def delete_download (self , download_id : str ):
116
- self .cache .delete_download (download_id )
91
+ self .record_manager .delete_download (download_id )
117
92
118
93
def delete_job_downloads (self , job_id : str ):
119
- self .cache .delete_job_downloads (job_id )
94
+ self .record_manager .delete_job_downloads (job_id )
120
95
121
96
def populate_queue (self ):
122
- tasks = self .cache .get_tasks ()
97
+ tasks = self .record_manager .get_tasks ()
123
98
for task in tasks :
124
99
download_task = DownloadTask (
125
100
job_id = task .job_id ,
0 commit comments