Example #1
0
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
Example #2
0
    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))