758
755
address, person, email_status, account)
760
757
def makeTeam(self, owner=None, displayname=None, email=None, name=None,
762
758
subscription_policy=TeamSubscriptionPolicy.OPEN,
763
759
visibility=None, members=None):
764
760
"""Create and return a new, arbitrary Team.
794
789
displayname = SPACE.join(
795
790
word.capitalize() for word in name.split('-'))
796
791
team = getUtility(IPersonSet).newTeam(
797
owner, name, displayname, teamdescription=description,
798
subscriptionpolicy=subscription_policy)
792
owner, name, displayname, subscriptionpolicy=subscription_policy)
799
793
if visibility is not None:
800
794
# Visibility is normally restricted to launchpad.Commercial, so
801
795
# removing the security proxy as we don't care here.
1434
1427
def makeBranchMergeProposal(self, target_branch=None, registrant=None,
1435
1428
set_state=None, prerequisite_branch=None,
1436
product=None, initial_comment=None,
1437
source_branch=None, preview_diff=None,
1438
date_created=None, description=None,
1429
product=None, review_diff=None,
1430
initial_comment=None, source_branch=None,
1431
preview_diff=None, date_created=None,
1432
description=None, reviewer=None):
1440
1433
"""Create a proposal to merge based on anonymous branches."""
1441
1434
if target_branch is not None:
1442
1435
target = target_branch.target
1466
1459
review_requests.append((reviewer, None))
1467
1460
proposal = source_branch.addLandingTarget(
1468
1461
registrant, target_branch, review_requests=review_requests,
1469
prerequisite_branch=prerequisite_branch, description=description,
1470
date_created=date_created)
1462
prerequisite_branch=prerequisite_branch, review_diff=review_diff,
1463
description=description, date_created=date_created)
1472
1465
unsafe_proposal = removeSecurityProxy(proposal)
1473
1466
if preview_diff is not None:
1557
1550
return merge_proposal.generateIncrementalDiff(
1558
1551
old_revision, new_revision, diff)
1553
def makeStaticDiff(self):
1554
return StaticDiff.acquireFromText(
1555
self.getUniqueUnicode(), self.getUniqueUnicode(),
1556
self.getUniqueString())
1560
1558
def makeRevision(self, author=None, revision_date=None, parent_ids=None,
1561
1559
rev_id=None, log_body=None, date_created=None):
1562
1560
"""Create a single `Revision`."""
1628
1626
return branch.createBranchRevision(sequence, revision)
1630
1628
def makeBug(self, product=None, owner=None, bug_watch_url=None,
1631
private=False, security_related=False, date_closed=None,
1632
title=None, date_created=None, description=None, comment=None,
1629
private=False, date_closed=None, title=None,
1630
date_created=None, description=None, comment=None,
1633
1631
status=None, distribution=None, milestone=None, series=None,
1634
1632
tags=None, sourcepackagename=None):
1635
1633
"""Create and return a new, arbitrary Bug.
1680
1678
sourcepackagename=sourcepackagename)
1681
1679
create_bug_params = CreateBugParams(
1682
1680
owner, title, comment=comment, private=private,
1683
security_related=security_related,
1684
1681
datecreated=date_created, description=description,
1685
1682
status=status, tags=tags)
1686
1683
create_bug_params.setBugTarget(
2127
2124
def makeCodeImport(self, svn_branch_url=None, cvs_root=None,
2128
2125
cvs_module=None, target=None, branch_name=None,
2129
git_repo_url=None, hg_repo_url=None,
2130
bzr_branch_url=None, registrant=None,
2126
git_repo_url=None, hg_repo_url=None, registrant=None,
2131
2127
rcs_type=None, review_status=None):
2132
2128
"""Create and return a new, arbitrary code import.
2154
2150
assert rcs_type in (RevisionControlSystems.SVN,
2155
2151
RevisionControlSystems.BZR_SVN)
2156
return code_import_set.new(
2152
code_import = code_import_set.new(
2157
2153
registrant, target, branch_name, rcs_type=rcs_type,
2158
url=svn_branch_url, review_status=review_status)
2159
2155
elif git_repo_url is not None:
2160
2156
assert rcs_type in (None, RevisionControlSystems.GIT)
2161
return code_import_set.new(
2157
code_import = code_import_set.new(
2162
2158
registrant, target, branch_name,
2163
2159
rcs_type=RevisionControlSystems.GIT,
2164
url=git_repo_url, review_status=review_status)
2165
2161
elif hg_repo_url is not None:
2166
return code_import_set.new(
2162
code_import = code_import_set.new(
2167
2163
registrant, target, branch_name,
2168
2164
rcs_type=RevisionControlSystems.HG,
2169
url=hg_repo_url, review_status=review_status)
2170
elif bzr_branch_url is not None:
2171
return code_import_set.new(
2172
registrant, target, branch_name,
2173
rcs_type=RevisionControlSystems.BZR,
2174
url=bzr_branch_url, review_status=review_status)
2176
2167
assert rcs_type in (None, RevisionControlSystems.CVS)
2177
return code_import_set.new(
2168
code_import = code_import_set.new(
2178
2169
registrant, target, branch_name,
2179
2170
rcs_type=RevisionControlSystems.CVS,
2180
cvs_root=cvs_root, cvs_module=cvs_module,
2181
review_status=review_status)
2171
cvs_root=cvs_root, cvs_module=cvs_module)
2173
removeSecurityProxy(code_import).review_status = review_status
2183
2176
def makeChangelog(self, spn=None, versions=[]):
2184
"""Create and return a LFA of a valid Debian-style changelog.
2186
Note that the changelog returned is unicode - this is deliberate
2187
so that code is forced to cope with it as utf-8 changelogs are
2177
"""Create and return a LFA of a valid Debian-style changelog."""
2190
2178
if spn is None:
2191
2179
spn = self.getUniqueString()
2193
2181
for version in versions:
2194
entry = dedent(u'''\
2195
2183
%s (%s) unstable; urgency=low
2199
-- Føo Bær <foo@example.com> Tue, 01 Jan 1970 01:50:41 +0000
2187
-- Foo Bar <foo@example.com> Tue, 01 Jan 1970 01:50:41 +0000
2201
2189
''' % (spn, version, version))
2202
2190
changelog += entry
2203
return self.makeLibraryFileAlias(content=changelog.encode("utf-8"))
2191
return self.makeLibraryFileAlias(content=changelog)
2205
2193
def makeCodeImportEvent(self):
2206
2194
"""Create and return a CodeImportEvent."""
2287
2275
return bmp.nominateReviewer(candidate, bmp.registrant)
2289
2277
def makeMessage(self, subject=None, content=None, parent=None,
2290
owner=None, datecreated=None):
2291
2279
if subject is None:
2292
2280
subject = self.getUniqueString()
2293
2281
if content is None:
2294
2282
content = self.getUniqueString()
2295
2283
if owner is None:
2296
2284
owner = self.makePerson()
2297
if datecreated is None:
2298
datecreated = datetime.now(UTC)
2299
2285
rfc822msgid = self.makeUniqueRFC822MsgId()
2300
2286
message = Message(rfc822msgid=rfc822msgid, subject=subject,
2301
owner=owner, parent=parent, datecreated=datecreated)
2287
owner=owner, parent=parent)
2302
2288
MessageChunk(message=message, sequence=1, content=content)
2347
2333
aliases=None, bug_supervisor=None, driver=None,
2348
2334
security_contact=None, publish_root_dir=None,
2349
2335
publish_base_url=None, publish_copy_base_url=None,
2350
no_pubconf=False, icon=None, summary=None):
2336
no_pubconf=False, icon=None):
2351
2337
"""Make a new distribution."""
2352
2338
if name is None:
2353
2339
name = self.getUniqueString(prefix="distribution")
2955
2940
def makePOTemplate(self, productseries=None, distroseries=None,
2956
2941
sourcepackagename=None, owner=None, name=None,
2957
2942
translation_domain=None, path=None,
2958
copy_pofiles=True, side=None, sourcepackage=None,
2943
copy_pofiles=True, side=None, sourcepackage=None):
2960
2944
"""Make a new translation template."""
2961
2945
if sourcepackage is not None:
2962
2946
assert distroseries is None, (
2997
2981
if path is None:
2998
2982
path = 'messages.pot'
3000
pot = subset.new(name, translation_domain, path, owner, copy_pofiles)
3001
removeSecurityProxy(pot).iscurrent = iscurrent
2984
return subset.new(name, translation_domain, path, owner, copy_pofiles)
3004
2986
def makePOTemplateAndPOFiles(self, language_codes, **kwargs):
3005
2987
"""Create a POTemplate and associated POFiles.
3254
3239
if status is None:
3255
3240
status = RosettaImportStatus.NEEDS_REVIEW
3257
if type(content) == unicode:
3258
content = content.encode('utf-8')
3260
entry = getUtility(ITranslationImportQueue).addOrUpdateEntry(
3261
path=path, content=content, by_maintainer=by_maintainer,
3262
importer=uploader, productseries=productseries,
3263
distroseries=distroseries, sourcepackagename=sourcepackagename,
3264
potemplate=potemplate, pofile=pofile, format=format)
3266
status, getUtility(ILaunchpadCelebrities).rosetta_experts)
3242
return TranslationImportQueueEntry(
3243
path=path, productseries=productseries, distroseries=distroseries,
3244
sourcepackagename=sourcepackagename, importer=uploader,
3245
content=content_reference, status=status, format=format,
3246
by_maintainer=by_maintainer)
3269
3248
def makeMailingList(self, team, owner):
3270
3249
"""Create a mailing list for the team."""
3393
3372
return self.makeSourcePackageName()
3394
3373
return getUtility(ISourcePackageNameSet).getOrCreateByName(name)
3396
def makeSourcePackage(self, sourcepackagename=None, distroseries=None,
3398
"""Make an `ISourcePackage`.
3400
:param publish: if true, create a corresponding
3401
SourcePackagePublishingHistory.
3375
def makeSourcePackage(self, sourcepackagename=None, distroseries=None):
3376
"""Make an `ISourcePackage`."""
3403
3377
# Make sure we have a real sourcepackagename object.
3404
3378
if (sourcepackagename is None or
3405
3379
isinstance(sourcepackagename, basestring)):
3436
3406
pocket, archive, changes_filename, changes_file_content,
3437
3407
signing_key=signing_key, package_copy_job=package_copy_job)
3438
3408
if status is not None:
3439
if status is not PackageUploadStatus.NEW:
3440
naked_package_upload = removeSecurityProxy(package_upload)
3442
PackageUploadStatus.UNAPPROVED:
3443
naked_package_upload.setUnapproved,
3444
PackageUploadStatus.REJECTED:
3445
naked_package_upload.setRejected,
3446
PackageUploadStatus.DONE: naked_package_upload.setDone,
3447
PackageUploadStatus.ACCEPTED:
3448
naked_package_upload.setAccepted,
3450
status_changers[status]()
3409
naked_package_upload = removeSecurityProxy(package_upload)
3411
PackageUploadStatus.DONE: naked_package_upload.setDone,
3412
PackageUploadStatus.ACCEPTED:
3413
naked_package_upload.setAccepted,
3415
status_changers[status]()
3451
3416
return package_upload
3453
3418
def makeSourcePackageUpload(self, distroseries=None,
3819
3785
naked_bpph.datepublished = UTC_NOW
3822
def makeSPPHForBPPH(self, bpph):
3823
"""Produce a `SourcePackagePublishingHistory` to match `bpph`.
3825
:param bpph: A `BinaryPackagePublishingHistory`.
3826
:return: A `SourcePackagePublishingHistory` stemming from the same
3827
source package as `bpph`, published into the same distroseries,
3828
pocket, and archive.
3830
# JeroenVermeulen 2011-08-25, bug=834370: Julian says this isn't
3831
# very complete, and ignores architectures. Improve so we can
3832
# remove more of our reliance on the SoyuzTestPublisher.
3833
bpr = bpph.binarypackagerelease
3834
spph = self.makeSourcePackagePublishingHistory(
3835
distroseries=bpph.distroarchseries.distroseries,
3836
sourcepackagerelease=bpr.build.source_package_release,
3837
pocket=bpph.pocket, archive=bpph.archive)
3840
3788
def makeBinaryPackageName(self, name=None):
3841
3789
"""Make an `IBinaryPackageName`."""
3842
3790
if name is None:
4118
4066
format = HWSubmissionFormat.VERSION_1
4119
4067
submission_set = getUtility(IHWSubmissionSet)
4121
submission = submission_set.createSubmission(
4069
return submission_set.createSubmission(
4122
4070
date_created, format, private, contactable,
4123
4071
submission_key, emailaddress, distroarchseries,
4124
4072
raw_submission, filename, filesize, system)
4126
if status is not None:
4127
removeSecurityProxy(submission).status = status
4130
4074
def makeHWSubmissionDevice(self, submission, device, driver, parent,
4131
4075
hal_device_id):
4132
4076
"""Create a new HWSubmissionDevice."""