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
RevLine 
[10010]1# -*- coding: utf-8 -*-
2
[10079]3from trac.resource import Resource, ResourceNotFound
[10010]4
[10079]5from api import FormSystem, _
6
[10010]7__all__ = ['Form']
8
9
10class Form(object):
[10044]11    """Trac resource representation of a TracForms form."""
[10010]12
13    @staticmethod
14    def id_is_valid(num):
[10097]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"))
[10010]21
22    def __init__(self, env, form_resource_or_parent_realm=None,
[10079]23                 parent_id=None, subcontext=None, form_id=None, version=None):
[10097]24        self.env = env
[10079]25        # prepare db access
26        self.forms = FormSystem(env)
[10097]27        self.realm = 'form'
[10079]28        self.subcontext = subcontext
[10097]29        self.siblings = []
[10010]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
[10097]33            parent = self.resource.parent
[16384]34            if not self.siblings:
[10097]35                self._get_siblings(parent.realm, parent.id)
[10079]36        else:
37            parent_realm = form_resource_or_parent_realm
[10097]38            if form_id not in [None, ''] and self.id_is_valid(form_id):
39                self.id = int(form_id)
[10010]40            else:
[10097]41                self.id = None
[16384]42            if self.id is not None and \
43                    (parent_realm is None or parent_id is None or
44                     subcontext is None):
[10079]45                # get complete context, required as resource parent
[10097]46                ctxt = self.forms.get_tracform_meta(self.id)[1:4]
[10079]47                parent_realm = ctxt[0]
48                parent_id = ctxt[1]
49                self.subcontext = ctxt[2]
50            elif isinstance(parent_realm, basestring) and \
[16384]51                            parent_id is not None and self.id is None:
[10097]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)
[10079]57            if isinstance(parent_realm, basestring) and \
[16384]58                            parent_id is not None:
[10079]59                self.resource = Resource(parent_realm, parent_id
[16384]60                                         ).child('form', self.id, version)
[10079]61            else:
62                raise ResourceNotFound(
[10080]63                    _("""No data recorded for a TracForms form in
[10079]64                      %(realm)s:%(parent_id)s
65                      """, realm=parent_realm, parent_id=parent_id),
[10093]66                    subcontext and _("with subcontext %(subcontext)s",
[16384]67                                     subcontext=subcontext) or '')
[10079]68
[10097]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,
[10211]72                                                           parent_id])) or []
[10097]73        if len(self.siblings) == 1:
74            # form_id in single form situation
[10120]75            self.id = self.siblings[0][0]
[10097]76            self.subcontext = self.siblings[0][1]
[10010]77
[10124]78    @property
79    def has_data(self):
80        """Return whether there is any form content stored."""
[16384]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
[10124]83                self.forms.get_tracform_state(self.id) not in [None, '{}'])
Note: See TracBrowser for help on using the repository browser.