Changeset 8282
- Timestamp:
- 08/10/08 03:42:49 (4 months ago)
- Files:
-
- django/trunk/django/core/management/base.py (modified) (1 diff)
- django/trunk/django/core/management/__init__.py (modified) (9 diffs)
- django/trunk/tests/regressiontests/admin_scripts/tests.py (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/core/management/base.py
r7844 r8282 83 83 # because django.utils.translation requires settings. 84 84 if self.can_import_settings: 85 from django.utils import translation 86 translation.activate('en-us') 87 85 try: 86 from django.utils import translation 87 translation.activate('en-us') 88 except ImportError, e: 89 # If settings should be available, but aren't, 90 # raise the error and quit. 91 sys.stderr.write(self.style.ERROR(str('Error: %s\n' % e))) 92 sys.exit(1) 88 93 try: 89 94 if self.requires_model_validation: django/trunk/django/core/management/__init__.py
r8228 r8282 67 67 {}, {}, ['Command']), 'Command')() 68 68 69 def get_commands( load_user_commands=True, project_directory=None):69 def get_commands(): 70 70 """ 71 71 Returns a dictionary mapping command names to their callback applications. … … 78 78 specified, user-defined commands will also be included, the 79 79 startproject command will be disabled, and the startapp command 80 will be modified to use the directory in which th atmodule appears.80 will be modified to use the directory in which the settings module appears. 81 81 82 82 The dictionary is in the format {command_name: app_name}. Key-value … … 95 95 _commands = dict([(name, 'django.core') for name in find_commands(__path__[0])]) 96 96 97 if load_user_commands:98 # Get commands from all installed apps.97 # Find the installed apps 98 try: 99 99 from django.conf import settings 100 for app_name in settings.INSTALLED_APPS: 101 try: 102 path = find_management_module(app_name) 103 _commands.update(dict([(name, app_name) for name in find_commands(path)])) 104 except ImportError: 105 pass # No management module -- ignore this app. 100 apps = settings.INSTALLED_APPS 101 except (AttributeError, EnvironmentError, ImportError): 102 apps = [] 103 104 # Find the project directory 105 try: 106 from django.conf import settings 107 project_directory = setup_environ(__import__(settings.SETTINGS_MODULE)) 108 except (AttributeError, EnvironmentError, ImportError): 109 project_directory = None 110 111 # Find and load the management module for each installed app. 112 for app_name in apps: 113 try: 114 path = find_management_module(app_name) 115 _commands.update(dict([(name, app_name) 116 for name in find_commands(path)])) 117 except ImportError: 118 pass # No management module - ignore this app 106 119 107 120 if project_directory: … … 204 217 self.argv = argv or sys.argv[:] 205 218 self.prog_name = os.path.basename(self.argv[0]) 206 self.project_directory = None207 self.user_commands = False208 219 209 220 def main_help_text(self): … … 213 224 usage = ['',"Type '%s help <subcommand>' for help on a specific subcommand." % self.prog_name,''] 214 225 usage.append('Available subcommands:') 215 commands = get_commands( self.user_commands, self.project_directory).keys()226 commands = get_commands().keys() 216 227 commands.sort() 217 228 for cmd in commands: … … 226 237 """ 227 238 try: 228 app_name = get_commands( self.user_commands, self.project_directory)[subcommand]239 app_name = get_commands()[subcommand] 229 240 if isinstance(app_name, BaseCommand): 230 241 # If the command is already loaded, use it directly. … … 279 290 self.fetch_command(subcommand).run_from_argv(self.argv) 280 291 281 class ProjectManagementUtility(ManagementUtility):282 """283 A ManagementUtility that is specific to a particular Django project.284 As such, its commands are slightly different than those of its parent285 class.286 287 In practice, this class represents manage.py, whereas ManagementUtility288 represents django-admin.py.289 """290 def __init__(self, argv, project_directory):291 super(ProjectManagementUtility, self).__init__(argv)292 self.project_directory = project_directory293 self.user_commands = True294 295 292 def setup_environ(settings_mod): 296 293 """ … … 314 311 # Set DJANGO_SETTINGS_MODULE appropriately. 315 312 os.environ['DJANGO_SETTINGS_MODULE'] = '%s.%s' % (project_name, settings_name) 316 return project_directory317 313 318 314 def execute_from_command_line(argv=None): … … 328 324 project-specific django-admin.py utility. 329 325 """ 330 project_directory =setup_environ(settings_mod)331 utility = ProjectManagementUtility(argv, project_directory)326 setup_environ(settings_mod) 327 utility = ManagementUtility(argv) 332 328 utility.execute() django/trunk/tests/regressiontests/admin_scripts/tests.py
r8238 r8282 224 224 225 225 def test_custom_command(self): 226 "default: django-admin can't execute user commands "226 "default: django-admin can't execute user commands if it isn't provided settings" 227 227 args = ['noargs_command'] 228 228 out, err = self.run_django_admin(args) … … 231 231 232 232 def test_custom_command_with_settings(self): 233 "default: django-admin can 't execute user commands, evenif settings are provided as argument"233 "default: django-admin can execute user commands if settings are provided as argument" 234 234 args = ['noargs_command', '--settings=settings'] 235 235 out, err = self.run_django_admin(args) 236 self.assertNoOutput( out)237 self.assertOutput( err, "Unknown command: 'noargs_command'")236 self.assertNoOutput(err) 237 self.assertOutput(out, "EXECUTE:NoArgsCommand") 238 238 239 239 def test_custom_command_with_environment(self): 240 "default: django-admin can 't execute user commands, evenif settings are provided in environment"240 "default: django-admin can execute user commands if settings are provided in environment" 241 241 args = ['noargs_command'] 242 242 out, err = self.run_django_admin(args,'settings') 243 self.assertNoOutput( out)244 self.assertOutput( err, "Unknown command: 'noargs_command'")243 self.assertNoOutput(err) 244 self.assertOutput(out, "EXECUTE:NoArgsCommand") 245 245 246 246 class DjangoAdminFullPathDefaultSettings(AdminScriptTestCase): … … 262 262 263 263 def test_builtin_with_settings(self): 264 "fulldefault: django-admin builtin commands fail if user app isn't on path"264 "fulldefault: django-admin builtin commands succeed if a settings file is provided" 265 265 args = ['sqlall','--settings=settings', 'admin_scripts'] 266 266 out, err = self.run_django_admin(args) 267 self.assertNoOutput( out)268 self.assertOutput( err, 'ImportError: No module named regressiontests')267 self.assertNoOutput(err) 268 self.assertOutput(out, 'CREATE TABLE') 269 269 270 270 def test_builtin_with_environment(self): 271 "fulldefault: django-admin builtin commands fail if user app isn't on path"271 "fulldefault: django-admin builtin commands succeed if the environment contains settings" 272 272 args = ['sqlall','admin_scripts'] 273 273 out, err = self.run_django_admin(args,'settings') 274 self.assertNoOutput( out)275 self.assertOutput( err, 'ImportError: No module named regressiontests')274 self.assertNoOutput(err) 275 self.assertOutput(out, 'CREATE TABLE') 276 276 277 277 def test_builtin_with_bad_settings(self): … … 290 290 291 291 def test_custom_command(self): 292 "fulldefault: django-admin can't execute user commands "292 "fulldefault: django-admin can't execute user commands unless settings are provided" 293 293 args = ['noargs_command'] 294 294 out, err = self.run_django_admin(args) … … 297 297 298 298 def test_custom_command_with_settings(self): 299 "fulldefault: django-admin can 't execute user commands, evenif settings are provided as argument"299 "fulldefault: django-admin can execute user commands if settings are provided as argument" 300 300 args = ['noargs_command', '--settings=settings'] 301 301 out, err = self.run_django_admin(args) 302 self.assertNoOutput( out)303 self.assertOutput( err, "Unknown command: 'noargs_command'")302 self.assertNoOutput(err) 303 self.assertOutput(out, "EXECUTE:NoArgsCommand") 304 304 305 305 def test_custom_command_with_environment(self): 306 "fulldefault: django-admin can 't execute user commands, evenif settings are provided in environment"306 "fulldefault: django-admin can execute user commands if settings are provided in environment" 307 307 args = ['noargs_command'] 308 308 out, err = self.run_django_admin(args,'settings') 309 self.assertNoOutput( out)310 self.assertOutput( err, "Unknown command: 'noargs_command'")309 self.assertNoOutput(err) 310 self.assertOutput(out, "EXECUTE:NoArgsCommand") 311 311 312 312 class DjangoAdminMinimalSettings(AdminScriptTestCase): … … 356 356 357 357 def test_custom_command(self): 358 "minimal: django-admin can't execute user commands "358 "minimal: django-admin can't execute user commands unless settings are provided" 359 359 args = ['noargs_command'] 360 360 out, err = self.run_django_admin(args) … … 421 421 self.assertOutput(err, "Could not import settings 'bad_settings'") 422 422 423 def test_custom_command(self): 424 "alternate: django-admin can't execute user commands "423 def test_custom_command(self): 424 "alternate: django-admin can't execute user commands unless settings are provided" 425 425 args = ['noargs_command'] 426 426 out, err = self.run_django_admin(args) … … 429 429 430 430 def test_custom_command_with_settings(self): 431 "alternate: django-admin can 't execute user commands, evenif settings are provided as argument"431 "alternate: django-admin can execute user commands if settings are provided as argument" 432 432 args = ['noargs_command', '--settings=alternate_settings'] 433 433 out, err = self.run_django_admin(args) 434 self.assertNoOutput( out)435 self.assertOutput( err, "Unknown command: 'noargs_command'")434 self.assertNoOutput(err) 435 self.assertOutput(out, "EXECUTE:NoArgsCommand") 436 436 437 437 def test_custom_command_with_environment(self): 438 "alternate: django-admin can 't execute user commands, evenif settings are provided in environment"438 "alternate: django-admin can execute user commands if settings are provided in environment" 439 439 args = ['noargs_command'] 440 440 out, err = self.run_django_admin(args,'alternate_settings') 441 self.assertNoOutput( out)442 self.assertOutput( err, "Unknown command: 'noargs_command'")441 self.assertNoOutput(err) 442 self.assertOutput(out, "EXECUTE:NoArgsCommand") 443 443 444 444 … … 491 491 self.assertOutput(err, "Could not import settings 'bad_settings'") 492 492 493 def test_custom_command(self): 494 "alternate: django-admin can't execute user commands "493 def test_custom_command(self): 494 "alternate: django-admin can't execute user commands unless settings are provided" 495 495 args = ['noargs_command'] 496 496 out, err = self.run_django_admin(args) … … 502 502 args = ['noargs_command', '--settings=alternate_settings'] 503 503 out, err = self.run_django_admin(args) 504 self.assertNoOutput( out)505 self.assertOutput( err, "Unknown command: 'noargs_command'")504 self.assertNoOutput(err) 505 self.assertOutput(out, "EXECUTE:NoArgsCommand") 506 506 507 507 def test_custom_command_with_environment(self): … … 509 509 args = ['noargs_command'] 510 510 out, err = self.run_django_admin(args,'alternate_settings') 511 self.assertNoOutput( out)512 self.assertOutput( err, "Unknown command: 'noargs_command'")511 self.assertNoOutput(err) 512 self.assertOutput(out, "EXECUTE:NoArgsCommand") 513 513 514 514 ##########################################################################
