source: tracformsplugin/trunk/tracforms/model.py

Last change on this file was 16384, checked in by Ryan J Ollos, 7 years ago

TracForms 0.5dev: Conform to PEP8

File size: 3.5 KB
Line 
1# -*- coding: utf-8 -*-
2
3from trac.resource import Resource, ResourceNotFound
4
5from api import FormSystem, _
6
7__all__ = ['Form']
8
9
10class Form(object):
11    """Trac resource representation of a TracForms form."""
12
13    @staticmethod
14    def id_is_valid(num):
15        try:
16            return 0 < int(num) <= 1L << 31
17        except ValueError:
18            raise ResourceNotFound(
19                _("TracForm %(form_id)s does not exist.", form_id=num),
20                _("Invalid form number"))
21
22    def __init__(self, env, form_resource_or_parent_realm=None,
23                 parent_id=None, subcontext=None, form_id=None, version=None):
24        self.env = env
25        # prepare db access
26        self.forms = FormSystem(env)
27        self.realm = 'form'
28        self.subcontext = subcontext
29        self.siblings = []
30        # DEVEL: support for handling form revisions not implemented yet
31        if isinstance(form_resource_or_parent_realm, Resource):
32            self.resource = form_resource_or_parent_realm
33            parent = self.resource.parent
34            if not self.siblings:
35                self._get_siblings(parent.realm, parent.id)
36        else:
37            parent_realm = form_resource_or_parent_realm
38            if form_id not in [None, ''] and self.id_is_valid(form_id):
39                self.id = int(form_id)
40            else:
41                self.id = None
42            if self.id is not None and \
43                    (parent_realm is None or parent_id is None or
44                     subcontext is None):
45                # get complete context, required as resource parent
46                ctxt = self.forms.get_tracform_meta(self.id)[1:4]
47                parent_realm = ctxt[0]
48                parent_id = ctxt[1]
49                self.subcontext = ctxt[2]
50            elif isinstance(parent_realm, basestring) and \
51                            parent_id is not None and self.id is None:
52                # find form(s), if parent descriptors are available
53                if subcontext is not None:
54                    ctxt = tuple([parent_realm, parent_id, subcontext])
55                    self.id = self.forms.get_tracform_meta(ctxt)[0]
56            self._get_siblings(parent_realm, parent_id)
57            if isinstance(parent_realm, basestring) and \
58                            parent_id is not None:
59                self.resource = Resource(parent_realm, parent_id
60                                         ).child('form', self.id, version)
61            else:
62                raise ResourceNotFound(
63                    _("""No data recorded for a TracForms form in
64                      %(realm)s:%(parent_id)s
65                      """, realm=parent_realm, parent_id=parent_id),
66                    subcontext and _("with subcontext %(subcontext)s",
67                                     subcontext=subcontext) or '')
68
69    def _get_siblings(self, parent_realm, parent_id):
70        """Add siblings list including self to form resource object."""
71        self.siblings = self.forms.get_tracform_ids(tuple([parent_realm,
72                                                           parent_id])) or []
73        if len(self.siblings) == 1:
74            # form_id in single form situation
75            self.id = self.siblings[0][0]
76            self.subcontext = self.siblings[0][1]
77
78    @property
79    def has_data(self):
80        """Return whether there is any form content stored."""
81        return (self.forms.get_tracform_fields(self.id) is not None or
82                self.forms.get_tracform_history(self.id) is not None or
83                self.forms.get_tracform_state(self.id) not in [None, '{}'])
Note: See TracBrowser for help on using the repository browser.