~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/bugs/browser/bugtask.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-07-26 03:43:29 UTC
  • mfrom: (13506.4.20 sensible-validate_target)
  • Revision ID: launchpad@pqm.canonical.com-20110726034329-zxewzia67sx14ih8
[r=sinzui][bug=80902][incr] Replace validate_distrotask and
 valid_upstreamtask with a more general and sensible validate_target.

Show diffs side-by-side

added added

removed removed

Lines of Context:
132
132
    FeedsMixin,
133
133
    )
134
134
from canonical.launchpad.interfaces.launchpad import IHasExternalBugTracker
135
 
from canonical.launchpad.interfaces.validation import (
136
 
    valid_upstreamtask,
137
 
    validate_distrotask,
138
 
    )
139
135
from canonical.launchpad.mailnotification import get_unified_diff
140
136
from canonical.launchpad.searchbuilder import (
141
137
    all,
238
234
    IBugTaskSet,
239
235
    ICreateQuestionFromBugTaskForm,
240
236
    IFrontPageBugTaskSearch,
 
237
    IllegalTarget,
241
238
    INominationsReviewTableBatchNavigator,
242
239
    IPersonBugTaskSearch,
243
240
    IRemoveQuestionFromBugTaskForm,
249
246
from lp.bugs.interfaces.bugwatch import BugWatchActivityStatus
250
247
from lp.bugs.interfaces.cve import ICveSet
251
248
from lp.bugs.interfaces.malone import IMaloneApplication
 
249
from lp.bugs.model.bugtask import validate_target
252
250
from lp.registry.interfaces.distribution import (
253
251
    IDistribution,
254
252
    IDistributionSet,
1372
1370
            distro = bugtask.distroseries.distribution
1373
1371
        else:
1374
1372
            distro = bugtask.distribution
1375
 
        sourcename = bugtask.sourcepackagename
1376
1373
        old_product = bugtask.product
1377
1374
 
1378
 
        if distro is not None and sourcename != data.get('sourcepackagename'):
 
1375
        new_spn = data.get('sourcepackagename')
 
1376
        if distro is not None and bugtask.sourcepackagename != new_spn:
1379
1377
            try:
1380
 
                validate_distrotask(
1381
 
                    bugtask.bug, distro, data.get('sourcepackagename'))
1382
 
            except LaunchpadValidationError, error:
1383
 
                self.setFieldError('sourcepackagename', str(error))
 
1378
                target = distro
 
1379
                if new_spn is not None:
 
1380
                    target = distro.getSourcePackage(new_spn)
 
1381
                validate_target(bugtask.bug, target)
 
1382
            except IllegalTarget as e:
 
1383
                # The field validator may have already set an error.
 
1384
                # Don't clobber it.
 
1385
                if not self.getFieldError('sourcepackagename'):
 
1386
                    self.setFieldError('sourcepackagename', e[0])
1384
1387
 
1385
1388
        new_product = data.get('product')
1386
1389
        if (old_product is None or old_product == new_product or
1394
1397
            self.setFieldError('product', 'Enter a project name')
1395
1398
        else:
1396
1399
            try:
1397
 
                valid_upstreamtask(bugtask.bug, new_product)
1398
 
            except WidgetsError, errors:
1399
 
                self.setFieldError('product', errors.args[0])
 
1400
                validate_target(bugtask.bug, new_product)
 
1401
            except IllegalTarget as e:
 
1402
                self.setFieldError('product', e[0])
1400
1403
 
1401
1404
    def updateContextFromData(self, data, context=None):
1402
1405
        """Updates the context object using the submitted form data.