Commit aa7b797ee7f19b64b3cb60b2baeeff19124dab2a
1 parent
c36cfb56
Exists in
master
and in
1 other branch
- fixed bug where mimetype was not defined when serving files
Showing
1 changed file
with
12 additions
and
4 deletions
Show diff stats
serve.py
| @@ -8,6 +8,7 @@ import uuid | @@ -8,6 +8,7 @@ import uuid | ||
| 8 | import logging.config | 8 | import logging.config |
| 9 | import argparse | 9 | import argparse |
| 10 | from concurrent.futures import ThreadPoolExecutor | 10 | from concurrent.futures import ThreadPoolExecutor |
| 11 | +import mimetypes | ||
| 11 | 12 | ||
| 12 | # user installed libraries | 13 | # user installed libraries |
| 13 | import tornado.ioloop | 14 | import tornado.ioloop |
| @@ -92,10 +93,12 @@ class LoginHandler(BaseHandler): | @@ -92,10 +93,12 @@ class LoginHandler(BaseHandler): | ||
| 92 | class LogoutHandler(BaseHandler): | 93 | class LogoutHandler(BaseHandler): |
| 93 | @tornado.web.authenticated | 94 | @tornado.web.authenticated |
| 94 | def get(self): | 95 | def get(self): |
| 95 | - self.learn.logout(self.current_user) | ||
| 96 | self.clear_cookie('user') | 96 | self.clear_cookie('user') |
| 97 | self.redirect(self.get_argument('next', '/')) | 97 | self.redirect(self.get_argument('next', '/')) |
| 98 | 98 | ||
| 99 | + def on_finish(self): | ||
| 100 | + self.learn.logout(self.current_user) | ||
| 101 | + | ||
| 99 | # ---------------------------------------------------------------------------- | 102 | # ---------------------------------------------------------------------------- |
| 100 | class ChangePasswordHandler(BaseHandler): | 103 | class ChangePasswordHandler(BaseHandler): |
| 101 | @tornado.web.authenticated | 104 | @tornado.web.authenticated |
| @@ -159,6 +162,7 @@ class FileHandler(BaseHandler): | @@ -159,6 +162,7 @@ class FileHandler(BaseHandler): | ||
| 159 | uid = self.current_user | 162 | uid = self.current_user |
| 160 | public_dir = self.learn.get_current_public_dir(uid) | 163 | public_dir = self.learn.get_current_public_dir(uid) |
| 161 | filepath = path.expanduser(path.join(public_dir, filename)) | 164 | filepath = path.expanduser(path.join(public_dir, filename)) |
| 165 | + | ||
| 162 | try: | 166 | try: |
| 163 | f = open(filepath, 'rb') | 167 | f = open(filepath, 'rb') |
| 164 | except FileNotFoundError: | 168 | except FileNotFoundError: |
| @@ -166,6 +170,11 @@ class FileHandler(BaseHandler): | @@ -166,6 +170,11 @@ class FileHandler(BaseHandler): | ||
| 166 | except PermissionError: | 170 | except PermissionError: |
| 167 | logging.error(f'No permission: {filepath}') | 171 | logging.error(f'No permission: {filepath}') |
| 168 | else: | 172 | else: |
| 173 | + content_type = mimetypes.guess_type(filename) | ||
| 174 | + self.set_header("Content-Type", content_type[0]) | ||
| 175 | + | ||
| 176 | + # divide the file into chunks and write one chunk at a time, so | ||
| 177 | + # that the write does not block the ioloop for very long. | ||
| 169 | with f: | 178 | with f: |
| 170 | chunk = f.read(self.chunk_size) | 179 | chunk = f.read(self.chunk_size) |
| 171 | while chunk: | 180 | while chunk: |
| @@ -173,12 +182,11 @@ class FileHandler(BaseHandler): | @@ -173,12 +182,11 @@ class FileHandler(BaseHandler): | ||
| 173 | self.write(chunk) # write the cunk to response | 182 | self.write(chunk) # write the cunk to response |
| 174 | await self.flush() # flush the current chunk to socket | 183 | await self.flush() # flush the current chunk to socket |
| 175 | except iostream.StreamClosedError: | 184 | except iostream.StreamClosedError: |
| 176 | - # client closed the connection | ||
| 177 | - break | 185 | + break # client closed the connection |
| 178 | finally: | 186 | finally: |
| 179 | del chunk | 187 | del chunk |
| 180 | await gen.sleep(0.000000001) # 1 nanosecond (hack) | 188 | await gen.sleep(0.000000001) # 1 nanosecond (hack) |
| 181 | - # in tornnado 5.0 use `await asyncio.sleep(0)` instead | 189 | + # FIXME in the upcomming tornado 5.0 use `await asyncio.sleep(0)` instead |
| 182 | chunk = f.read(self.chunk_size) | 190 | chunk = f.read(self.chunk_size) |
| 183 | 191 | ||
| 184 | 192 |