Show More
@@ -68,6 +68,11 b' class NamedNotebookHandler(IPythonHandler):' | |||||
68 | ) |
|
68 | ) | |
69 | ) |
|
69 | ) | |
70 |
|
70 | |||
|
71 | @web.authenticated | |||
|
72 | def post(self, notebook_path): | |||
|
73 | nbm =self.notebook_manager | |||
|
74 | notebook_name = nbm.new_notebook() | |||
|
75 | ||||
71 |
|
76 | |||
72 | class NotebookCopyHandler(IPythonHandler): |
|
77 | class NotebookCopyHandler(IPythonHandler): | |
73 |
|
78 |
@@ -6,7 +6,7 b' Authors:' | |||||
6 | """ |
|
6 | """ | |
7 |
|
7 | |||
8 | #----------------------------------------------------------------------------- |
|
8 | #----------------------------------------------------------------------------- | |
9 |
# Copyright (C) 201 |
|
9 | # Copyright (C) 2013 The IPython Development Team | |
10 | # |
|
10 | # | |
11 | # Distributed under the terms of the BSD License. The full license is in |
|
11 | # Distributed under the terms of the BSD License. The full license is in | |
12 | # the file COPYING, distributed as part of this software. |
|
12 | # the file COPYING, distributed as part of this software. | |
@@ -44,25 +44,32 b' class ContentManager(LoggingConfigurable):' | |||||
44 | contents = List() |
|
44 | contents = List() | |
45 |
|
45 | |||
46 | def get_content_names(self, content_path): |
|
46 | def get_content_names(self, content_path): | |
|
47 | """List of dicts of files in content_path""" | |||
47 | names = glob.glob(os.path.join(self.content_dir, content_path,'*')) |
|
48 | names = glob.glob(os.path.join(self.content_dir, content_path,'*')) | |
48 |
content |
|
49 | contents = list() | |
49 |
dir |
|
50 | dirs = list() | |
|
51 | notebooks = list() | |||
50 | for name in names: |
|
52 | for name in names: | |
51 | if os.path.isdir(name) == True: |
|
53 | if os.path.isdir(name) == True: | |
52 |
dir |
|
54 | dirs.append(os.path.split(name)[1]) | |
53 |
elif os.path.splitext( |
|
55 | elif os.path.splitext(name)[1] == '.ipynb': | |
54 |
|
|
56 | notebooks.append(os.path.split(name)[1]) | |
55 | return dir_names, content_names |
|
57 | else: | |
|
58 | contents.append(os.path.split(name)[1]) | |||
|
59 | return dirs, notebooks, contents | |||
56 |
|
60 | |||
57 | def list_contents(self, content_path): |
|
61 | def list_contents(self, content_path): | |
58 | """List all contents in the named path.""" |
|
62 | """List all contents in the named path.""" | |
59 | dir_names, content_names = self.get_content_names(content_path) |
|
63 | dir_names, notebook_names, content_names = self.get_content_names(content_path) | |
60 | content_mapping = [] |
|
64 | content_mapping = [] | |
61 | for name in dir_names: |
|
65 | for name in dir_names: | |
62 |
model = self. |
|
66 | model = self.content_model(name, content_path, type='dir') | |
63 | content_mapping.append(model) |
|
67 | content_mapping.append(model) | |
64 | for name in content_names: |
|
68 | for name in content_names: | |
65 | model = self.content_model(name, content_path) |
|
69 | model = self.content_model(name, content_path, type='file') | |
|
70 | content_mapping.append(model) | |||
|
71 | for name in notebook_names: | |||
|
72 | model = self.content_model(name, content_path, type='notebook') | |||
66 | content_mapping.append(model) |
|
73 | content_mapping.append(model) | |
67 | return content_mapping |
|
74 | return content_mapping | |
68 |
|
75 | |||
@@ -71,32 +78,27 b' class ContentManager(LoggingConfigurable):' | |||||
71 | path = os.path.join(self.content_dir, content_path, name) |
|
78 | path = os.path.join(self.content_dir, content_path, name) | |
72 | return path |
|
79 | return path | |
73 |
|
80 | |||
74 |
def |
|
81 | def content_info(self, name, content_path): | |
|
82 | """Read the content of a named file""" | |||
75 | file_type = os.path.splitext(os.path.basename(name))[1] |
|
83 | file_type = os.path.splitext(os.path.basename(name))[1] | |
76 | #Collect contents of file |
|
|||
77 | with open(name, 'rb') as file_content: |
|
|||
78 | contents = file_content.read() |
|
|||
79 | full_path = self.get_path_by_name(name, content_path) |
|
84 | full_path = self.get_path_by_name(name, content_path) | |
80 | info = os.stat(full_path) |
|
85 | info = os.stat(full_path) | |
81 | size = info.st_size |
|
86 | size = info.st_size | |
82 | last_modified = tz.utcfromtimestamp(info.st_mtime) |
|
87 | last_modified = tz.utcfromtimestamp(info.st_mtime) | |
83 |
return last_modified, file_type, |
|
88 | return last_modified, file_type, size | |
84 |
|
||||
85 | def directory_model(self, name, content_path): |
|
|||
86 | model = {"name": name, |
|
|||
87 | "path": content_path, |
|
|||
88 | "type": 'tree'} |
|
|||
89 | return model |
|
|||
90 |
|
89 | |||
91 | def content_model(self, name, content_path): |
|
90 | def content_model(self, name, content_path, type=None): | |
92 | last_modified, file_type, contents, size = self.read_content(name, content_path) |
|
91 | """Create a dict standard model for any file (other than notebooks)""" | |
|
92 | last_modified, file_type, size = self.content_info(name, content_path) | |||
93 | model = {"name": name, |
|
93 | model = {"name": name, | |
94 | "path": content_path, |
|
94 | "path": content_path, | |
95 |
"type": |
|
95 | "type": type, | |
|
96 | "MIME-type": "", | |||
96 | "last_modified": last_modified.ctime(), |
|
97 | "last_modified": last_modified.ctime(), | |
97 | "size": size} |
|
98 | "size": size} | |
98 | return model |
|
99 | return model | |
99 |
|
100 | |||
100 | def delete_content(self, content_path): |
|
101 | def delete_content(self, content_path): | |
|
102 | """Delete a file""" | |||
101 | os.unlink(os.path.join(self.content_dir, content_path)) |
|
103 | os.unlink(os.path.join(self.content_dir, content_path)) | |
102 | No newline at end of file |
|
104 |
@@ -6,7 +6,7 b' Authors:' | |||||
6 | """ |
|
6 | """ | |
7 |
|
7 | |||
8 | #----------------------------------------------------------------------------- |
|
8 | #----------------------------------------------------------------------------- | |
9 |
# Copyright (C) 20 |
|
9 | # Copyright (C) 2013 The IPython Development Team | |
10 | # |
|
10 | # | |
11 | # Distributed under the terms of the BSD License. The full license is in |
|
11 | # Distributed under the terms of the BSD License. The full license is in | |
12 | # the file COPYING, distributed as part of this software. |
|
12 | # the file COPYING, distributed as part of this software. |
@@ -89,7 +89,7 b' class FileNotebookManager(NotebookManager):' | |||||
89 | notebook_names = self.get_notebook_names(path) |
|
89 | notebook_names = self.get_notebook_names(path) | |
90 | notebook_mapping = [] |
|
90 | notebook_mapping = [] | |
91 | for name in notebook_names: |
|
91 | for name in notebook_names: | |
92 | model = self.notebook_model(name, path) |
|
92 | model = self.notebook_model(name, path, content=False) | |
93 | notebook_mapping.append(model) |
|
93 | notebook_mapping.append(model) | |
94 | return notebook_mapping |
|
94 | return notebook_mapping | |
95 |
|
95 |
@@ -114,13 +114,15 b' class NotebookManager(LoggingConfigurable):' | |||||
114 | def notebook_exists(self, notebook_path): |
|
114 | def notebook_exists(self, notebook_path): | |
115 | """Does a notebook exist?""" |
|
115 | """Does a notebook exist?""" | |
116 |
|
116 | |||
117 | def notebook_model(self, notebook_name, notebook_path=None): |
|
117 | ||
|
118 | def notebook_model(self, notebook_name, notebook_path=None, content=True): | |||
118 | """ Creates the standard notebook model """ |
|
119 | """ Creates the standard notebook model """ | |
119 | last_modified, content = self.read_notebook_object(notebook_name, notebook_path) |
|
120 | last_modified, contents = self.read_notebook_object(notebook_name, notebook_path) | |
120 | model = {"notebook_name": notebook_name, |
|
121 | model = {"notebook_name": notebook_name, | |
121 | "notebook_path": notebook_path, |
|
122 | "notebook_path": notebook_path, | |
122 | "content": content, |
|
|||
123 | "last_modified": last_modified.ctime()} |
|
123 | "last_modified": last_modified.ctime()} | |
|
124 | if content == True: | |||
|
125 | model['content'] = contents | |||
124 | return model |
|
126 | return model | |
125 |
|
127 | |||
126 | def get_notebook(self, notebook_name, notebook_path=None, format=u'json'): |
|
128 | def get_notebook(self, notebook_name, notebook_path=None, format=u'json'): | |
@@ -143,7 +145,7 b' class NotebookManager(LoggingConfigurable):' | |||||
143 | raise NotImplementedError('must be implemented in a subclass') |
|
145 | raise NotImplementedError('must be implemented in a subclass') | |
144 |
|
146 | |||
145 | def save_new_notebook(self, data, notebook_path = None, name=None, format=u'json'): |
|
147 | def save_new_notebook(self, data, notebook_path = None, name=None, format=u'json'): | |
146 |
"""Save a new notebook and return its n |
|
148 | """Save a new notebook and return its name. | |
147 |
|
149 | |||
148 | If a name is passed in, it overrides any values in the notebook data |
|
150 | If a name is passed in, it overrides any values in the notebook data | |
149 | and the value in the data is updated to use that value. |
|
151 | and the value in the data is updated to use that value. |
@@ -1,4 +1,4 b'' | |||||
1 |
"""Tornado handlers for the |
|
1 | """Tornado handlers for the sessions web service. | |
2 |
|
2 | |||
3 | Authors: |
|
3 | Authors: | |
4 |
|
4 | |||
@@ -6,7 +6,7 b' Authors:' | |||||
6 | """ |
|
6 | """ | |
7 |
|
7 | |||
8 | #----------------------------------------------------------------------------- |
|
8 | #----------------------------------------------------------------------------- | |
9 |
# Copyright (C) 20 |
|
9 | # Copyright (C) 2013 The IPython Development Team | |
10 | # |
|
10 | # | |
11 | # Distributed under the terms of the BSD License. The full license is in |
|
11 | # Distributed under the terms of the BSD License. The full license is in | |
12 | # the file COPYING, distributed as part of this software. |
|
12 | # the file COPYING, distributed as part of this software. |
@@ -6,7 +6,7 b' Authors:' | |||||
6 | """ |
|
6 | """ | |
7 |
|
7 | |||
8 | #----------------------------------------------------------------------------- |
|
8 | #----------------------------------------------------------------------------- | |
9 |
# Copyright (C) 201 |
|
9 | # Copyright (C) 2013 The IPython Development Team | |
10 | # |
|
10 | # | |
11 | # Distributed under the terms of the BSD License. The full license is in |
|
11 | # Distributed under the terms of the BSD License. The full license is in | |
12 | # the file COPYING, distributed as part of this software. |
|
12 | # the file COPYING, distributed as part of this software. | |
@@ -53,6 +53,8 b' class SessionManager(LoggingConfigurable):' | |||||
53 | notebook_name=notebook_name, |
|
53 | notebook_name=notebook_name, | |
54 | notebook_path=notebook_path, |
|
54 | notebook_path=notebook_path, | |
55 | kernel=kernel) |
|
55 | kernel=kernel) | |
|
56 | if notebook_path == None: | |||
|
57 | model['notebook_path']="" | |||
56 | self.sessions.append(model) |
|
58 | self.sessions.append(model) | |
57 | return model |
|
59 | return model | |
58 |
|
60 |
General Comments 0
You need to be logged in to leave comments.
Login now