def create_model_like_form(original_form, formadmin=None): """ This is a horrific hack to make the admin accept a Form class. It takes a form instance, and optionally a form admin. It the dynamically creates a sublcass of the form, so we can monkeypatch it without changing the original. It then primarily adds a _meta property that adds a number of properties that the admin expects to be there for a model. """ from formadmin.admin import FormAdmin if not formadmin: formadmin = FormAdmin name = "ModelLikeForm%s" % original_form.__name__ form = type('AdminCompatible%s' % name, (original_form,), {}) form.__name__ = original_form.__name__ class Meta: pass meta = Options(Meta) meta.app_label = getattr(formadmin, 'app_label', settings.FORMADMIN_APP_LABEL) meta.module_name = original_form.__name__.lower() meta.verbose_name_plural = getattr(formadmin, 'verbose_name', original_form.__name__) meta.verbose_name = getattr(formadmin, 'verbose_name', original_form.__name__) meta.object_name = meta.module_name meta.managed = False form._meta = meta return form
def tube(self, request, beanstalk_daemon_pk, name='default'): """ View tube stats and list of jobs """ self._set_client(beanstalk_daemon_pk) if request.method == 'POST': # Add a new job to tube form = BeanstalkJobForm(request.POST) if form.is_valid(): self.client.use(name) self.client.put(str(form.cleaned_data.get('body', None))) else: form = BeanstalkJobForm() self.client.watch(name) # Start watching this tube jobs = [] stats_fields = ['total-jobs', 'current-watching', 'current-using', ] jobs_list = [ jl for jl in self.client.peek_ready(), self.client.peek_buried(), self.client.peek_delayed() if jl ] for job in jobs_list: job_stats = job.stats() jobs.append({ 'id': job.jid, 'age': datetime.now() - timedelta(seconds=job_stats['age']), 'state': job_stats['state'], 'body': job.body, }) opts = Options('', '') opts.verbose_name_plural = self.opts.verbose_name opts.app_name = 'django_beanstalk' return render_to_response('admin/django_beanstalk/beanstalkdaemon/tube.html', { 'form': form, 'app_label': 'django_beanstalk', 'beanstalk_daemon_pk': beanstalk_daemon_pk, 'original': self.beanstalk_daemon_str, 'name': name, 'opts': opts, 'jobs': jobs, 'stats': filter( lambda pair: pair[0] in stats_fields, self.client.stats_tube(name).items() ), 'error': self.error, }, context_instance=RequestContext(request))