##// END OF EJS Templates
deprecate format arg in reads/writes...
MinRK -
Show More
@@ -1,209 +1,186 b''
1 """The official API for working with notebooks in the current format version."""
1 """The official API for working with notebooks in the current format version."""
2
2
3 # Copyright (c) IPython Development Team.
3 # Copyright (c) IPython Development Team.
4 # Distributed under the terms of the Modified BSD License.
4 # Distributed under the terms of the Modified BSD License.
5
5
6 from __future__ import print_function
6 from __future__ import print_function
7
7
8 import re
8 import re
9
9 import warnings
10 from IPython.utils.py3compat import unicode_type
11
10
12 from IPython.nbformat.v3 import (
11 from IPython.nbformat.v3 import (
13 NotebookNode,
12 NotebookNode,
14 new_code_cell, new_text_cell, new_notebook, new_output, new_worksheet,
13 new_code_cell, new_text_cell, new_notebook, new_output, new_worksheet,
15 parse_filename, new_metadata, new_author, new_heading_cell, nbformat,
14 parse_filename, new_metadata, new_author, new_heading_cell, nbformat,
16 nbformat_minor, nbformat_schema, to_notebook_json
15 nbformat_minor, nbformat_schema, to_notebook_json,
17 )
16 )
18 from IPython.nbformat import v3 as _v_latest
17 from IPython.nbformat import v3 as _v_latest
19
18
20 from .reader import reads as reader_reads
19 from .reader import reads as reader_reads
21 from .reader import versions
20 from .reader import versions
22 from .convert import convert
21 from .convert import convert
23 from .validator import validate, ValidationError
22 from .validator import validate, ValidationError
24
23
25 from IPython.utils.log import get_logger
24 from IPython.utils.log import get_logger
26
25
27 __all__ = ['NotebookNode', 'new_code_cell', 'new_text_cell', 'new_notebook',
26 __all__ = ['NotebookNode', 'new_code_cell', 'new_text_cell', 'new_notebook',
28 'new_output', 'new_worksheet', 'parse_filename', 'new_metadata', 'new_author',
27 'new_output', 'new_worksheet', 'parse_filename', 'new_metadata', 'new_author',
29 'new_heading_cell', 'nbformat', 'nbformat_minor', 'nbformat_schema',
28 'new_heading_cell', 'nbformat', 'nbformat_minor', 'nbformat_schema',
30 'to_notebook_json', 'convert', 'validate', 'NBFormatError', 'parse_py',
29 'to_notebook_json', 'convert', 'validate', 'NBFormatError', 'parse_py',
31 'reads_json', 'writes_json', 'reads_py', 'writes_py', 'reads', 'writes', 'read',
30 'reads_json', 'writes_json', 'reads_py', 'writes_py', 'reads', 'writes', 'read',
32 'write']
31 'write']
33
32
34 current_nbformat = nbformat
33 current_nbformat = nbformat
35 current_nbformat_minor = nbformat_minor
34 current_nbformat_minor = nbformat_minor
36 current_nbformat_module = _v_latest.__name__
35 current_nbformat_module = _v_latest.__name__
37
36
38
37
39 class NBFormatError(ValueError):
38 class NBFormatError(ValueError):
40 pass
39 pass
41
40
42
41
42 def _warn_format():
43 warnings.warn("""Non-JSON file support in nbformat is deprecated.
44 Use nbconvert to create files of other formats.""")
45
46
43 def parse_py(s, **kwargs):
47 def parse_py(s, **kwargs):
44 """Parse a string into a (nbformat, string) tuple."""
48 """Parse a string into a (nbformat, string) tuple."""
45 nbf = current_nbformat
49 nbf = current_nbformat
46 nbm = current_nbformat_minor
50 nbm = current_nbformat_minor
47
51
48 pattern = r'# <nbformat>(?P<nbformat>\d+[\.\d+]*)</nbformat>'
52 pattern = r'# <nbformat>(?P<nbformat>\d+[\.\d+]*)</nbformat>'
49 m = re.search(pattern,s)
53 m = re.search(pattern,s)
50 if m is not None:
54 if m is not None:
51 digits = m.group('nbformat').split('.')
55 digits = m.group('nbformat').split('.')
52 nbf = int(digits[0])
56 nbf = int(digits[0])
53 if len(digits) > 1:
57 if len(digits) > 1:
54 nbm = int(digits[1])
58 nbm = int(digits[1])
55
59
56 return nbf, nbm, s
60 return nbf, nbm, s
57
61
58
62
59 def reads_json(nbjson, **kwargs):
63 def reads_json(nbjson, **kwargs):
60 """Read a JSON notebook from a string and return the NotebookNode
64 """DEPRECATED, use reads"""
61 object. Report if any JSON format errors are detected.
65 warnings.warn("reads_json is deprecated, use reads")
62
66 return reads(nbjson)
63 """
64 nb = reader_reads(nbjson, **kwargs)
65 nb_current = convert(nb, current_nbformat)
66 try:
67 validate(nb_current)
68 except ValidationError as e:
69 get_logger().error("Notebook JSON is invalid: %s", e)
70 return nb_current
71
72
67
73 def writes_json(nb, **kwargs):
68 def writes_json(nb, **kwargs):
74 """Take a NotebookNode object and write out a JSON string. Report if
69 """DEPRECATED, use writes"""
75 any JSON format errors are detected.
70 warnings.warn("writes_json is deprecated, use writes")
76
71 return writes(nb, **kwargs)
77 """
78 try:
79 validate(nb)
80 except ValidationError as e:
81 get_logger().error("Notebook JSON is invalid: %s", e)
82 nbjson = versions[current_nbformat].writes_json(nb, **kwargs)
83 return nbjson
84
85
72
86 def reads_py(s, **kwargs):
73 def reads_py(s, **kwargs):
87 """Read a .py notebook from a string and return the NotebookNode object."""
74 """DEPRECATED: use nbconvert"""
75 _warn_format()
88 nbf, nbm, s = parse_py(s, **kwargs)
76 nbf, nbm, s = parse_py(s, **kwargs)
89 if nbf in (2, 3):
77 if nbf in (2, 3):
90 nb = versions[nbf].to_notebook_py(s, **kwargs)
78 nb = versions[nbf].to_notebook_py(s, **kwargs)
91 else:
79 else:
92 raise NBFormatError('Unsupported PY nbformat version: %i' % nbf)
80 raise NBFormatError('Unsupported PY nbformat version: %i' % nbf)
93 return nb
81 return nb
94
82
95
96 def writes_py(nb, **kwargs):
83 def writes_py(nb, **kwargs):
97 # nbformat 3 is the latest format that supports py
84 """DEPRECATED: use nbconvert"""
85 _warn_format()
98 return versions[3].writes_py(nb, **kwargs)
86 return versions[3].writes_py(nb, **kwargs)
99
87
100
88
101 # High level API
89 # High level API
102
90
103
91
104 def reads(s, format='DEPRECATED', version=current_nbformat, **kwargs):
92 def reads(s, format='DEPRECATED', version=current_nbformat, **kwargs):
105 """Read a notebook from a string and return the NotebookNode object.
93 """Read a notebook from a string and return the NotebookNode object.
106
94
107 This function properly handles notebooks of any version. The notebook
95 This function properly handles notebooks of any version. The notebook
108 returned will always be in the current version's format.
96 returned will always be in the current version's format.
109
97
110 Parameters
98 Parameters
111 ----------
99 ----------
112 s : unicode
100 s : unicode
113 The raw unicode string to read the notebook from.
101 The raw unicode string to read the notebook from.
114
102
115 Returns
103 Returns
116 -------
104 -------
117 nb : NotebookNode
105 nb : NotebookNode
118 The notebook that was read.
106 The notebook that was read.
119 """
107 """
120 nb = versions[version].reads_json(s, **kwargs)
108 if format not in {'DEPRECATED', 'json'}:
109 _warn_format()
110 nb = reader_reads(s, **kwargs)
121 nb = convert(nb, version)
111 nb = convert(nb, version)
122 try:
112 try:
123 validate(nb)
113 validate(nb)
124 except ValidationError as e:
114 except ValidationError as e:
125 get_logger().error("Notebook JSON is invalid: %s", e)
115 get_logger().error("Notebook JSON is invalid: %s", e)
126 return nb
116 return nb
127
117
128
118
129 def writes(nb, format='DEPRECATED', version=current_nbformat, **kwargs):
119 def writes(nb, format='DEPRECATED', version=current_nbformat, **kwargs):
130 """Write a notebook to a string in a given format in the current nbformat version.
120 """Write a notebook to a string in a given format in the current nbformat version.
131
121
132 This function always writes the notebook in the current nbformat version.
122 This function always writes the notebook in the current nbformat version.
133
123
134 Parameters
124 Parameters
135 ----------
125 ----------
136 nb : NotebookNode
126 nb : NotebookNode
137 The notebook to write.
127 The notebook to write.
138 version : int
128 version : int
139 The nbformat version to write.
129 The nbformat version to write.
140 Used for downgrading notebooks.
130 Used for downgrading notebooks.
141
131
142 Returns
132 Returns
143 -------
133 -------
144 s : unicode
134 s : unicode
145 The notebook string.
135 The notebook string.
146 """
136 """
137 if format not in {'DEPRECATED', 'json'}:
138 _warn_format()
139 nb = convert(nb, version)
147 try:
140 try:
148 validate(nb)
141 validate(nb)
149 except ValidationError as e:
142 except ValidationError as e:
150 get_logger().error("Notebook JSON is invalid: %s", e)
143 get_logger().error("Notebook JSON is invalid: %s", e)
151 nb = convert(nb, version)
152 return versions[version].writes_json(nb, **kwargs)
144 return versions[version].writes_json(nb, **kwargs)
153
145
154
146
155 def read(fp, format='DEPRECATED', **kwargs):
147 def read(fp, format='DEPRECATED', **kwargs):
156 """Read a notebook from a file and return the NotebookNode object.
148 """Read a notebook from a file and return the NotebookNode object.
157
149
158 This function properly handles notebooks of any version. The notebook
150 This function properly handles notebooks of any version. The notebook
159 returned will always be in the current version's format.
151 returned will always be in the current version's format.
160
152
161 Parameters
153 Parameters
162 ----------
154 ----------
163 fp : file
155 fp : file
164 Any file-like object with a read method.
156 Any file-like object with a read method.
165
157
166 Returns
158 Returns
167 -------
159 -------
168 nb : NotebookNode
160 nb : NotebookNode
169 The notebook that was read.
161 The notebook that was read.
170 """
162 """
171 return reads(fp.read(), **kwargs)
163 return reads(fp.read(), **kwargs)
172
164
173
165
174 def write(nb, fp, format='DEPRECATED', **kwargs):
166 def write(nb, fp, format='DEPRECATED', **kwargs):
175 """Write a notebook to a file in a given format in the current nbformat version.
167 """Write a notebook to a file in a given format in the current nbformat version.
176
168
177 This function always writes the notebook in the current nbformat version.
169 This function always writes the notebook in the current nbformat version.
178
170
179 Parameters
171 Parameters
180 ----------
172 ----------
181 nb : NotebookNode
173 nb : NotebookNode
182 The notebook to write.
174 The notebook to write.
183 fp : file
175 fp : file
184 Any file-like object with a write method.
176 Any file-like object with a write method.
185 format : (u'json', u'ipynb', u'py')
177 format : (u'json', u'ipynb', u'py')
186 The format to write the notebook in.
178 The format to write the notebook in.
187
179
188 Returns
180 Returns
189 -------
181 -------
190 s : unicode
182 s : unicode
191 The notebook string.
183 The notebook string.
192 """
184 """
193 return fp.write(writes(nb, **kwargs))
185 return fp.write(writes(nb, **kwargs))
194
186
195 def _convert_to_metadata():
196 """Convert to a notebook having notebook metadata."""
197 import glob
198 for fname in glob.glob('*.ipynb'):
199 print('Converting file:',fname)
200 with open(fname,'r') as f:
201 nb = read(f,u'json')
202 md = new_metadata()
203 if u'name' in nb:
204 md.name = nb.name
205 del nb[u'name']
206 nb.metadata = md
207 with open(fname,'w') as f:
208 write(nb, f, u'json')
209
General Comments 0
You need to be logged in to leave comments. Login now