@@ -108,6 +108,197 @@ def softspace(file, newvalue):
108108 return oldvalue
109109
110110
111+ def user_setup (ipythondir ,rc_suffix ,mode = 'install' ,interactive = True ):
112+ """Install or upgrade the user configuration directory.
113+
114+ Can be called when running for the first time or to upgrade the user's
115+ .ipython/ directory.
116+
117+ Parameters
118+ ----------
119+ ipythondir : path
120+ The directory to be used for installation/upgrade. In 'install' mode,
121+ if this path already exists, the function exits immediately.
122+
123+ rc_suffix : str
124+ Extension for the config files. On *nix platforms it is typically the
125+ empty string, while Windows normally uses '.ini'.
126+
127+ mode : str, optional
128+ Valid modes are 'install' and 'upgrade'.
129+
130+ interactive : bool, optional
131+ If False, do not wait for user input on any errors. Normally after
132+ printing its status information, this function waits for the user to
133+ hit Return before proceeding. This is because the default use case is
134+ when first installing the IPython configuration, so we want the user to
135+ acknowledge the initial message, which contains some useful
136+ information.
137+ """
138+
139+ # For automatic use, deactivate all i/o
140+ if interactive :
141+ def wait ():
142+ try :
143+ raw_input ("Please press <RETURN> to start IPython." )
144+ except EOFError :
145+ print >> Term .cout
146+ print '*' * 70
147+
148+ def printf (s ):
149+ print s
150+ else :
151+ wait = lambda : None
152+ printf = lambda s : None
153+
154+ # Install mode should be re-entrant: if the install dir already exists,
155+ # bail out cleanly
156+ if mode == 'install' and os .path .isdir (ipythondir ):
157+ return
158+
159+ cwd = os .getcwd () # remember where we started
160+ glb = glob .glob
161+
162+ printf ('*' * 70 )
163+ if mode == 'install' :
164+ printf (
165+ """Welcome to IPython. I will try to create a personal configuration directory
166+ where you can customize many aspects of IPython's functionality in:\n """ )
167+ else :
168+ printf ('I am going to upgrade your configuration in:' )
169+
170+ printf (ipythondir )
171+
172+ rcdirend = os .path .join ('IPython' ,'UserConfig' )
173+ cfg = lambda d : os .path .join (d ,rcdirend )
174+ try :
175+ rcdir = filter (os .path .isdir ,map (cfg ,sys .path ))[0 ]
176+ printf ("Initializing from configuration: %s" % rcdir )
177+ except IndexError :
178+ warning = """
179+ Installation error. IPython's directory was not found.
180+
181+ Check the following:
182+
183+ The ipython/IPython directory should be in a directory belonging to your
184+ PYTHONPATH environment variable (that is, it should be in a directory
185+ belonging to sys.path). You can copy it explicitly there or just link to it.
186+
187+ IPython will create a minimal default configuration for you.
188+
189+ """
190+ warn (warning )
191+ wait ()
192+
193+ if sys .platform == 'win32' :
194+ inif = 'ipythonrc.ini'
195+ else :
196+ inif = 'ipythonrc'
197+ minimal_setup = {'ipy_user_conf.py' : 'import ipy_defaults' ,
198+ inif : '# intentionally left blank' }
199+ os .makedirs (ipythondir , mode = 0777 )
200+ for f , cont in minimal_setup .items ():
201+ # In 2.5, this can be more cleanly done using 'with'
202+ fobj = file (ipythondir + '/' + f ,'w' )
203+ fobj .write (cont )
204+ fobj .close ()
205+
206+ return
207+
208+ if mode == 'install' :
209+ try :
210+ shutil .copytree (rcdir ,ipythondir )
211+ os .chdir (ipythondir )
212+ rc_files = glb ("ipythonrc*" )
213+ for rc_file in rc_files :
214+ os .rename (rc_file ,rc_file + rc_suffix )
215+ except :
216+ warning = """
217+
218+ There was a problem with the installation:
219+ %s
220+ Try to correct it or contact the developers if you think it's a bug.
221+ IPython will proceed with builtin defaults.""" % sys .exc_info ()[1 ]
222+ warn (warning )
223+ wait ()
224+ return
225+
226+ elif mode == 'upgrade' :
227+ try :
228+ os .chdir (ipythondir )
229+ except :
230+ printf ("""
231+ Can not upgrade: changing to directory %s failed. Details:
232+ %s
233+ """ % (ipythondir ,sys .exc_info ()[1 ]) )
234+ wait ()
235+ return
236+ else :
237+ sources = glb (os .path .join (rcdir ,'[A-Za-z]*' ))
238+ for new_full_path in sources :
239+ new_filename = os .path .basename (new_full_path )
240+ if new_filename .startswith ('ipythonrc' ):
241+ new_filename = new_filename + rc_suffix
242+ # The config directory should only contain files, skip any
243+ # directories which may be there (like CVS)
244+ if os .path .isdir (new_full_path ):
245+ continue
246+ if os .path .exists (new_filename ):
247+ old_file = new_filename + '.old'
248+ if os .path .exists (old_file ):
249+ os .remove (old_file )
250+ os .rename (new_filename ,old_file )
251+ shutil .copy (new_full_path ,new_filename )
252+ else :
253+ raise ValueError ('unrecognized mode for install: %r' % mode )
254+
255+ # Fix line-endings to those native to each platform in the config
256+ # directory.
257+ try :
258+ os .chdir (ipythondir )
259+ except :
260+ printf ("""
261+ Problem: changing to directory %s failed.
262+ Details:
263+ %s
264+
265+ Some configuration files may have incorrect line endings. This should not
266+ cause any problems during execution. """ % (ipythondir ,sys .exc_info ()[1 ]) )
267+ wait ()
268+ else :
269+ for fname in glb ('ipythonrc*' ):
270+ try :
271+ native_line_ends (fname ,backup = 0 )
272+ except IOError :
273+ pass
274+
275+ if mode == 'install' :
276+ printf ("""
277+ Successful installation!
278+
279+ Please read the sections 'Initial Configuration' and 'Quick Tips' in the
280+ IPython manual (there are both HTML and PDF versions supplied with the
281+ distribution) to make sure that your system environment is properly configured
282+ to take advantage of IPython's features.
283+
284+ Important note: the configuration system has changed! The old system is
285+ still in place, but its setting may be partly overridden by the settings in
286+ "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
287+ if some of the new settings bother you.
288+
289+ """ )
290+ else :
291+ printf ("""
292+ Successful upgrade!
293+
294+ All files in your directory:
295+ %(ipythondir)s
296+ which would have been overwritten by the upgrade were backed up with a .old
297+ extension. If you had made particular customizations in those files you may
298+ want to merge them back into the new files.""" % locals () )
299+ wait ()
300+ os .chdir (cwd )
301+
111302#****************************************************************************
112303# Local use exceptions
113304class SpaceInInput (exceptions .Exception ): pass
@@ -1114,161 +1305,11 @@ def rc_set_toggle(self,rc_field,value=None):
11141305 def user_setup (self ,ipythondir ,rc_suffix ,mode = 'install' ):
11151306 """Install the user configuration directory.
11161307
1117- Can be called when running for the first time or to upgrade the user's
1118- .ipython/ directory with the mode parameter. Valid modes are 'install'
1119- and 'upgrade'."""
1120-
1121- def wait ():
1122- try :
1123- raw_input ("Please press <RETURN> to start IPython." )
1124- except EOFError :
1125- print >> Term .cout
1126- print '*' * 70
1127-
1128- # Install mode should be re-entrant: if the install dir already exists,
1129- # bail out cleanly
1130- if mode == 'install' and os .path .isdir (ipythondir ):
1131- return
1132-
1133- cwd = os .getcwd () # remember where we started
1134- glb = glob .glob
1135- print '*' * 70
1136- if mode == 'install' :
1137- print \
1138- """Welcome to IPython. I will try to create a personal configuration directory
1139- where you can customize many aspects of IPython's functionality in:\n """
1140- else :
1141- print 'I am going to upgrade your configuration in:'
1142-
1143- print ipythondir
1144-
1145- rcdirend = os .path .join ('IPython' ,'UserConfig' )
1146- cfg = lambda d : os .path .join (d ,rcdirend )
1147- try :
1148- rcdir = filter (os .path .isdir ,map (cfg ,sys .path ))[0 ]
1149- print "Initializing from configuration" ,rcdir
1150- except IndexError :
1151- warning = """
1152- Installation error. IPython's directory was not found.
1153-
1154- Check the following:
1155-
1156- The ipython/IPython directory should be in a directory belonging to your
1157- PYTHONPATH environment variable (that is, it should be in a directory
1158- belonging to sys.path). You can copy it explicitly there or just link to it.
1159-
1160- IPython will create a minimal default configuration for you.
1161-
1162- """
1163- warn (warning )
1164- wait ()
1165-
1166- if sys .platform == 'win32' :
1167- inif = 'ipythonrc.ini'
1168- else :
1169- inif = 'ipythonrc'
1170- minimal_setup = {'ipy_user_conf.py' : 'import ipy_defaults' ,
1171- inif : '# intentionally left blank' }
1172- os .makedirs (ipythondir , mode = 0777 )
1173- for f , cont in minimal_setup .items ():
1174- open (ipythondir + '/' + f ,'w' ).write (cont )
1175-
1176- return
1177-
1178- if mode == 'install' :
1179- try :
1180- shutil .copytree (rcdir ,ipythondir )
1181- os .chdir (ipythondir )
1182- rc_files = glb ("ipythonrc*" )
1183- for rc_file in rc_files :
1184- os .rename (rc_file ,rc_file + rc_suffix )
1185- except :
1186- warning = """
1187-
1188- There was a problem with the installation:
1189- %s
1190- Try to correct it or contact the developers if you think it's a bug.
1191- IPython will proceed with builtin defaults.""" % sys .exc_info ()[1 ]
1192- warn (warning )
1193- wait ()
1194- return
1195-
1196- elif mode == 'upgrade' :
1197- try :
1198- os .chdir (ipythondir )
1199- except :
1200- print """
1201- Can not upgrade: changing to directory %s failed. Details:
1202- %s
1203- """ % (ipythondir ,sys .exc_info ()[1 ])
1204- wait ()
1205- return
1206- else :
1207- sources = glb (os .path .join (rcdir ,'[A-Za-z]*' ))
1208- for new_full_path in sources :
1209- new_filename = os .path .basename (new_full_path )
1210- if new_filename .startswith ('ipythonrc' ):
1211- new_filename = new_filename + rc_suffix
1212- # The config directory should only contain files, skip any
1213- # directories which may be there (like CVS)
1214- if os .path .isdir (new_full_path ):
1215- continue
1216- if os .path .exists (new_filename ):
1217- old_file = new_filename + '.old'
1218- if os .path .exists (old_file ):
1219- os .remove (old_file )
1220- os .rename (new_filename ,old_file )
1221- shutil .copy (new_full_path ,new_filename )
1222- else :
1223- raise ValueError ,'unrecognized mode for install:' ,`mode`
1224-
1225- # Fix line-endings to those native to each platform in the config
1226- # directory.
1227- try :
1228- os .chdir (ipythondir )
1229- except :
1230- print """
1231- Problem: changing to directory %s failed.
1232- Details:
1233- %s
1234-
1235- Some configuration files may have incorrect line endings. This should not
1236- cause any problems during execution. """ % (ipythondir ,sys .exc_info ()[1 ])
1237- wait ()
1238- else :
1239- for fname in glb ('ipythonrc*' ):
1240- try :
1241- native_line_ends (fname ,backup = 0 )
1242- except IOError :
1243- pass
1244-
1245- if mode == 'install' :
1246- print """
1247- Successful installation!
1248-
1249- Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1250- IPython manual (there are both HTML and PDF versions supplied with the
1251- distribution) to make sure that your system environment is properly configured
1252- to take advantage of IPython's features.
1253-
1254- Important note: the configuration system has changed! The old system is
1255- still in place, but its setting may be partly overridden by the settings in
1256- "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1257- if some of the new settings bother you.
1258-
1259- """
1260- else :
1261- print """
1262- Successful upgrade!
1263-
1264- All files in your directory:
1265- %(ipythondir)s
1266- which would have been overwritten by the upgrade were backed up with a .old
1267- extension. If you had made particular customizations in those files you may
1268- want to merge them back into the new files.""" % locals ()
1269- wait ()
1270- os .chdir (cwd )
1271- # end user_setup()
1308+ Note
1309+ ----
1310+ DEPRECATED: use the top-level user_setup() function instead.
1311+ """
1312+ return user_setup (ipythondir ,rc_suffix ,mode )
12721313
12731314 def atexit_operations (self ):
12741315 """This will be executed at the time of exit.
0 commit comments