glic3rinu / django-orchestra

Django-based framework for building web hosting control panels
Other
79 stars 27 forks source link

Deleting Webapp says "'WebApp' object has no attribute 'get_name'" #8

Closed zenny closed 9 years ago

zenny commented 9 years ago

Created a few webapps, but trying to delete webapps as admin and owner-user outputs:

AttributeError at /admin/webapps/webapp/

'WebApp' object has no attribute 'get_name'

Request Method: POST Request URL: http://192.168.10.133:8888/admin/webapps/webapp/ Django Version: 1.7.1 Exception Type: AttributeError Exception Value:

'WebApp' object has no attribute 'get_name'

Exception Location: /usr/local/lib/python2.7/dist-packages/orchestra/apps/webapps/backends/init.py in get_context, line 57 Python Executable: /usr/bin/python Python Version: 2.7.3 Python Path:

['/home/orchestra/panel', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/pymodules/python2.7']

Server time: Sun, 9 Nov 2014 06:37:41 +0000

TRACEBACK:

Environment:

Request Method: POST Request URL: http://192.168.10.133:8888/admin/webapps/webapp/

Django Version: 1.7.1 Python Version: 2.7.3 Installed Applications: ('orchestra', 'orchestra.apps.accounts', 'orchestra.apps.contacts', 'orchestra.apps.orchestration', 'orchestra.apps.domains', 'orchestra.apps.systemusers', 'orchestra.apps.mailboxes', 'orchestra.apps.lists', 'orchestra.apps.webapps', 'orchestra.apps.websites', 'orchestra.apps.databases', 'orchestra.apps.vps', 'orchestra.apps.saas', 'orchestra.apps.issues', 'orchestra.apps.services', 'orchestra.apps.orders', 'orchestra.apps.miscellaneous', 'orchestra.apps.bills', 'orchestra.apps.payments', 'django_extensions', 'djcelery', 'djcelery_email', 'fluent_dashboard', 'admin_tools', 'admin_tools.theming', 'admin_tools.menu', 'admin_tools.dashboard', 'rest_framework', 'rest_framework.authtoken', 'passlib.ext.django', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin.apps.SimpleAdminConfig', 'orchestra.apps.resources', 'debug_toolbar', 'django_nose') Installed Middleware: ('django.middleware.gzip.GZipMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'orchestra.core.caches.RequestCacheMiddleware', 'orchestra.apps.orchestration.middlewares.OperationsMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware')

Traceback: File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response

  1. response = wrapped_callback(request, _callback_args, *_callback_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in wrapper
  2. return self.admin_site.admin_view(view)(_args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
  3. response = view_func(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
  4. response = view_func(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py" in inner
  5. return view(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/accounts/admin.py" in changelist_view
  6. extra_context=context) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper
  7. return bound_func(_args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
  8. response = view_func(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func
  9. return func.get(self, type(self))(_args2, *_kwargs2) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in changelist_view
  10. response = self.response_action(request, queryset=cl.get_queryset(request)) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in response_action
  11. response = func(self, request, queryset) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/actions.py" in delete_selected
  12. queryset.delete() File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in delete
  13. collector.delete() File "/usr/local/lib/python2.7/dist-packages/django/db/models/deletion.py" in delete
  14. sender=model, instance=obj, using=self.using File "/usr/local/lib/python2.7/dist-packages/django/dispatch/dispatcher.py" in send
  15. response = receiver(signal=self, sender=sender, **named) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/orchestration/middlewares.py" in pre_delete_collector
  16. OperationsMiddleware.collect(Operation.DELETE, **kwargs) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/orchestration/middlewares.py" in collect
  17. operation = Operation.create(backend, instance, action) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/orchestration/models.py" in create
  18. backend().get_context(op.instance) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/webapps/backends/phpfcgid.py" in get_context
  19. context = super(PHPFcgidBackend, self).get_context(webapp) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/webapps/backends/init.py" in get_context
  20. 'app_name': webapp.get_name(),

Exception Type: AttributeError at /admin/webapps/webapp/ Exception Value: 'WebApp' object has no attribute 'get_name'

glic3rinu commented 9 years ago

Just pushed the fix for this problem, you can pull the changes with git pull or pip install django-orchestra==dev -U depending on how you'd installed orchestra.

zenny commented 9 years ago

Updated using git as well as pip install to latest master, but didn't change a thing. The same error is what I am getting.

zenny commented 9 years ago

I am now getting:

AttributeError at /admin/webapps/webapp/

'list' object has no attribute 'iteritems'

Request Method: POST Request URL: http://192.168.10.133:8888/admin/webapps/webapp/ Django Version: 1.7.1 Exception Type: AttributeError Exception Value:

'list' object has no attribute 'iteritems'

Exception Location: /usr/local/lib/python2.7/dist-packages/orchestra/apps/webapps/backends/phpfcgid.py in get_context, line 47 Python Executable: /usr/bin/python Python Version: 2.7.3 Python Path:

['/home/orchestra/panel', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/pymodules/python2.7']

Server time: Sun, 9 Nov 2014 19:48:38 +0000

TRACEBACK:

Environment:

Request Method: POST Request URL: http://192.168.10.133:8888/admin/webapps/webapp/

Django Version: 1.7.1 Python Version: 2.7.3 Installed Applications: ('orchestra', 'orchestra.apps.accounts', 'orchestra.apps.contacts', 'orchestra.apps.orchestration', 'orchestra.apps.domains', 'orchestra.apps.systemusers', 'orchestra.apps.mailboxes', 'orchestra.apps.lists', 'orchestra.apps.webapps', 'orchestra.apps.websites', 'orchestra.apps.databases', 'orchestra.apps.vps', 'orchestra.apps.saas', 'orchestra.apps.issues', 'orchestra.apps.services', 'orchestra.apps.orders', 'orchestra.apps.miscellaneous', 'orchestra.apps.bills', 'orchestra.apps.payments', 'django_extensions', 'djcelery', 'djcelery_email', 'fluent_dashboard', 'admin_tools', 'admin_tools.theming', 'admin_tools.menu', 'admin_tools.dashboard', 'rest_framework', 'rest_framework.authtoken', 'passlib.ext.django', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin.apps.SimpleAdminConfig', 'orchestra.apps.resources', 'debug_toolbar', 'django_nose') Installed Middleware: ('django.middleware.gzip.GZipMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'orchestra.core.caches.RequestCacheMiddleware', 'orchestra.apps.orchestration.middlewares.OperationsMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware')

Traceback: File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response

  1. response = wrapped_callback(request, _callback_args, *_callback_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in wrapper
  2. return self.admin_site.admin_view(view)(_args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
  3. response = view_func(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
  4. response = view_func(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py" in inner
  5. return view(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/accounts/admin.py" in changelist_view
  6. extra_context=context) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper
  7. return bound_func(_args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
  8. response = view_func(request, _args, *_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func
  9. return func.get(self, type(self))(_args2, *_kwargs2) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in changelist_view
  10. response = self.response_action(request, queryset=cl.get_queryset(request)) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in response_action
  11. response = func(self, request, queryset) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/actions.py" in delete_selected
  12. queryset.delete() File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in delete
  13. collector.delete() File "/usr/local/lib/python2.7/dist-packages/django/db/models/deletion.py" in delete
  14. sender=model, instance=obj, using=self.using File "/usr/local/lib/python2.7/dist-packages/django/dispatch/dispatcher.py" in send
  15. response = receiver(signal=self, sender=sender, **named) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/orchestration/middlewares.py" in pre_delete_collector
  16. OperationsMiddleware.collect(Operation.DELETE, **kwargs) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/orchestration/middlewares.py" in collect
  17. operation = Operation.create(backend, instance, action) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/orchestration/models.py" in create
  18. backend().get_context(op.instance) File "/usr/local/lib/python2.7/dist-packages/orchestra/apps/webapps/backends/phpfcgid.py" in get_context
  19. init_vars = [ '%s="%s"' % (k,v) for v,k in init_vars.iteritems() ]

Exception Type: AttributeError at /admin/webapps/webapp/ Exception Value: 'list' object has no attribute 'iteritems'

zenny commented 9 years ago

Okay, the problem I found is:

  1. If one tries to delete webapps in a single batch, one gets the error. Thus, batch deletion is not possible.
  2. Solution is to remove webapps one by one. On the other hand, this does not apply to php5 apps with suhosin with encryption on. In order to remove such webapp, the suhosin encryption should be disabled and then delete the webapp.

This is how it worked, but not in a batch-mode-deletion.

glic3rinu commented 9 years ago

2 should be fixed in dbf64f25623e61f19977f0c04f93fa7d85615835

Tried to reproduce 1 with different webapp types and options but couldn't make it break. Maybe I'm missing a particular combination.

Thanks for reporting!

glic3rinu commented 9 years ago

fixed now.