本文整理汇总了Python中mozreview.extra_data.is_parent函数的典型用法代码示例。如果您正苦于以下问题:Python is_parent函数的具体用法?Python is_parent怎么用?Python is_parent使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了is_parent函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: is_approved
def is_approved(self, review_request, prev_approved, prev_failure):
"""Check if a review request is approved to land
We will completely override the checks done by Review Board and
provide our own (to keep approval simpler and explicit).
If True is returned by this function it will indicate that
review request may be autolanded - care should be taken
when modifying the logic.
"""
# TODO: We should consider rejecting review requests which
# currently have a draft (to prevent autolanding incorrect
# things)
try:
if not is_pushed(review_request):
return False, 'Manually uploaded requests cannot be approved.'
if not review_request.public:
return False, 'The review request is not public.'
if is_parent(review_request):
return self.is_approved_parent(review_request)
return self.is_approved_child(review_request)
except Exception as e:
# We catch all exceptions because any error will make
# Review Board revert to it's default behaviour which
# is much more relaxed than ours.
logger.error('Failed to calculate approval for review '
'request %s: %s' % (review_request.id, e))
return False, "Error when calculating approval."
示例2: pre_save_review
def pre_save_review(sender, *args, **kwargs):
"""Handle pre_save for a Review.
This is needed to give a default value to the REVIEW_FLAG_KEY
extra_data key. It tries to retrieve the last known review status,
falling back to r? if no status is found.
"""
review = kwargs["instance"]
if review.pk:
# The review create endpoint calls save twice: the first time it
# gets or creates the review and the second time it updates the
# object retrieved/created. This condition let us execute the code
# below only once.
if not is_parent(review.review_request):
if REVIEW_FLAG_KEY not in review.extra_data:
# TODO: we should use a different query than going through
# all the reviews, which is what get_reviewers_status does.
reviewers_status = get_reviewers_status(review.review_request,
reviewers=[review.user])
user = review.user.username
flag = reviewers_status.get(user, {}).get('review_flag', ' ')
review.extra_data[REVIEW_FLAG_KEY] = flag
review.ship_it = (review.extra_data[REVIEW_FLAG_KEY] == 'r+')
示例3: _sort_families
def _sort_families(self, request, rrs, families=None):
"""Sort ReviewRequest objects into families.
'families' is a dict with parent ReviewRequest ids as keys. Each
value is another dict, with 'parent' mapped to the parent
ReviewRequest and 'children' mapped to a list of child ReviewRequests
of that parent. If 'families' is not None, it is updated in place;
if 'families' is not given, it is first initialized. In both cases
'families' is also returned.
For each ReviewRequest in rrs, 'families' is updated appropriately
to assemble a full set of families.
"""
if families is None:
families = defaultdict(lambda: dict(parent=None, children={}))
for rr in rrs:
if rr.status == ReviewRequest.DISCARDED:
continue
if not self.has_access_permissions(request, rr):
continue
if is_parent(rr):
families[rr.id]['parent'] = rr
else:
# Some early review requests were orphaned; ignore them.
try:
parent_rr = get_parent_rr(rr)
except ReviewRequest.DoesNotExist:
continue
families[parent_rr.id]['children'][rr.id] = rr
return families
示例4: get
def get(self, request, *args, **kwargs):
parent_rrid = kwargs[self.uri_object_key]
try:
parent_review_request = ReviewRequest.objects.get(id=parent_rrid)
except ReviewRequest.DoesNotExist:
return DOES_NOT_EXIST
if not self.has_access_permissions(request, parent_review_request,
*args, **kwargs):
return self.get_no_access_error(request, parent_review_request,
*args, **kwargs)
if not is_parent(parent_review_request):
return NOT_PARENT
if not parent_review_request.public:
# Review request has never been published.
return DOES_NOT_EXIST
families = self._sort_families(request, [parent_review_request])
self._sort_families(request, gen_child_rrs(parent_review_request),
families=families)
# FIXME: The returned data should actually be a dict, with keys
# 'stat' and self.item_result_key mapped to 'ok' and the
# family-summary dict, respectively, to match the standard Review
# Board web API format.
# However, the Bugzilla extension uses the existing, nonstandard
# return value, so we have to wait until it is fetching review
# requests by bug before fixing this.
return 200, self._summarize_families(request, families)[0]
示例5: as_html
def as_html(self):
commit_id = self.commit_data.extra_data.get(COMMIT_ID_KEY)
if is_parent(self.review_request_details, self.commit_data):
user = self.request.user
parent = get_parent_rr(
self.review_request_details.get_review_request(),
self.commit_data)
parent_details = parent.get_draft() or parent
children = [
child for child in gen_child_rrs(parent_details, user=user)
if child.is_accessible_by(user)]
commit_data = fetch_commit_data(children[-1])
commit_id = commit_data.extra_data.get(COMMIT_ID_KEY)
review_request = self.review_request_details.get_review_request()
repo_path = review_request.repository.path
if not commit_id:
logger.error('No commit_id for review request: %d' % (
review_request.id))
return ''
return get_template('mozreview/hg-pull.html').render(Context({
'commit_id': commit_id,
'repo_path': repo_path,
}))
示例6: get
def get(self, request, *args, **kwargs):
try:
parent_request = get_parent_rr(ReviewRequest.objects.get(
id=kwargs[self.uri_object_key]))
except ReviewRequest.DoesNotExist:
return DOES_NOT_EXIST
if parent_request is None:
return DOES_NOT_EXIST
if not is_parent(parent_request):
return NOT_PARENT
if not parent_request.is_accessible_by(request.user):
return PERMISSION_DENIED
if COMMITS_KEY not in parent_request.extra_data:
logging.error('Parent review request %s missing COMMIT_KEY'
% parent_request.id)
return NOT_PARENT
result = []
children = json.loads(parent_request.extra_data[COMMITS_KEY])
for child in children:
try:
child_request = ReviewRequest.objects.get(id=child[1])
except ReviewRequest.DoesNotExist:
return DOES_NOT_EXIST
if not child_request.approved:
return AUTOLAND_REVIEW_NOT_APPROVED
reviewers = [
r.user.username for r in gen_latest_reviews(child_request) if
r.ship_it and
r.user != child_request.submitter
]
if not reviewers and child_request.approved:
# This review request is approved (the repeated check is
# to ensure this is guaranteed if other parts of the code
# change) but we have an empty list of reviewers. We'll
# assume the author has just approved this themself and
# set r=me
reviewers.append('me')
result.append({
'commit': child[0],
'id': child[1],
'reviewers': reviewers,
'summary': replace_reviewers(child_request.description,
reviewers)
})
return 200, {
'commits': result,
'total_results': len(result),
'links': self.get_links(request=request),
}
示例7: on_review_request_closed_submitted
def on_review_request_closed_submitted(user, review_request, type, **kwargs):
if type != ReviewRequest.SUBMITTED:
return
commit_data = fetch_commit_data(review_request)
if not is_parent(review_request, commit_data):
return
_close_child_review_requests(user, review_request, ReviewRequest.SUBMITTED,
AUTO_SUBMITTED_DESCRIPTION,
commit_data=commit_data)
示例8: on_draft_changed
def on_draft_changed(self, sender, **kwargs):
instance = kwargs["instance"]
rr = instance.get_review_request()
if is_pushed(instance) and not is_parent(rr):
parent_rr = get_parent_rr(rr)
parent_rr_draft = parent_rr.get_draft()
if parent_rr_draft is None:
parent_rr_draft = ReviewRequestDraft.create(parent_rr)
update_parent_rr_reviewers(parent_rr_draft)
示例9: on_review_publishing
def on_review_publishing(user, review, **kwargs):
"""Comment in the bug and potentially r+ or clear a review flag.
Note that a reviewer *must* have editbugs to set an attachment flag on
someone else's attachment (i.e. the standard BMO review process).
TODO: Report lack-of-editbugs properly; see bug 1119065.
"""
review_request = review.review_request
logger.info('Publishing review for user: %s review id: %s '
'review request id: %s' % (user, review.id,
review_request.id))
# skip review requests that were not pushed
if not is_pushed(review_request):
logger.info('Did not publish review: %s: for user: %d: review not '
'pushed.' % (user, review.id))
return
site = Site.objects.get_current()
siteconfig = SiteConfiguration.objects.get_current()
comment = build_plaintext_review(review,
get_obj_url(review, site,
siteconfig),
{"user": user})
b = Bugzilla(get_bugzilla_api_key(user))
# TODO: Update all attachments in one call. This is not possible right
# now because we have to potentially mix changing and creating flags.
if is_parent(review_request):
# Mirror the comment to the bug, unless it's a ship-it, in which
# case throw an error. Ship-its are allowed only on child commits.
if review.ship_it:
raise ParentShipItError
[b.post_comment(int(bug_id), comment) for bug_id in
review_request.get_bug_list()]
else:
diff_url = '%sdiff/#index_header' % get_obj_url(review_request)
bug_id = int(review_request.get_bug_list()[0])
if review.ship_it:
commented = b.r_plus_attachment(bug_id, review.user.email,
diff_url, comment)
else:
commented = b.cancel_review_request(bug_id, review.user.email,
diff_url, comment)
if comment and not commented:
b.post_comment(bug_id, comment)
示例10: on_review_request_reopened
def on_review_request_reopened(user, review_request, **kwargs):
if not is_parent(review_request):
return
commit_data = fetch_commit_data(review_request)
identifier = commit_data.extra_data[IDENTIFIER_KEY]
# If we're reviving a squashed review request that was discarded, it means
# we're going to want to restore the commit ID field back, since we remove
# it on discarding. This might be a problem if there's already a review
# request with the same commit ID somewhere on Review Board, since commit
# IDs are unique.
#
# When this signal fires, the state of the review request has already
# changed, so we query for a review request with the same commit ID that is
# not equal to the revived review request.
try:
preexisting_review_request = ReviewRequest.objects.get(
commit_id=identifier, repository=review_request.repository)
if preexisting_review_request != review_request:
logger.error(
'Could not revive review request with ID %s because its '
'commit id (%s) is already being used by a review request '
'with ID %s.' % (
review_request.id,
identifier,
preexisting_review_request.id))
# TODO: We need Review Board to recognize exceptions in these
# signal handlers so that the UI can print out a useful message.
raise Exception(
'Revive failed because a review request with commit ID %s '
'already exists.' % identifier)
except ReviewRequest.DoesNotExist:
# Great! This is a success case.
pass
for child in gen_child_rrs(review_request):
child.reopen(user=user)
# If the review request had been discarded, then the commit ID would
# have been cleared out. If the review request had been submitted,
# this is a no-op, since the commit ID would have been there already.
review_request.commit = identifier
review_request.save()
# If the review request has a draft, we have to set the commit ID there as
# well, otherwise it'll get overwritten on publish.
draft = review_request.get_draft(user)
if draft:
draft.commit = identifier
draft.save()
示例11: get
def get(self, request, *args, **kwargs):
try:
parent_request = get_parent_rr(ReviewRequest.objects.get(
id=kwargs[self.uri_object_key]))
except ReviewRequest.DoesNotExist:
return DOES_NOT_EXIST
if parent_request is None:
return DOES_NOT_EXIST
if not is_parent(parent_request):
return NOT_PARENT
if not parent_request.is_accessible_by(request.user):
return PERMISSION_DENIED
if COMMITS_KEY not in parent_request.extra_data:
logging.error('Parent review request %s missing COMMIT_KEY'
% parent_request.id)
return NOT_PARENT
result = []
children = json.loads(parent_request.extra_data[COMMITS_KEY])
for child in children:
try:
child_request = ReviewRequest.objects.get(id=child[1])
except ReviewRequest.DoesNotExist:
return DOES_NOT_EXIST
if not child_request.approved:
return AUTOLAND_REVIEW_NOT_APPROVED
reviewers = map(lambda review: review.user.username,
gen_latest_reviews(child_request))
result.append({
'commit': child[0],
'id': child[1],
'reviewers': reviewers,
'summary': replace_reviewers(child_request.description,
reviewers)
})
return 200, {
'commits': result,
'total_results': len(result),
'links': self.get_links(request=request),
}
示例12: create
def create(self, request, parent_request_id, *args, **kwargs):
try:
parent_rr = ReviewRequest.objects.get(pk=parent_request_id)
except ReviewRequest.DoesNotExist:
return DOES_NOT_EXIST
if not (parent_rr.is_accessible_by(request.user)
or parent_rr.is_mutable_by(request.user)):
return PERMISSION_DENIED
if not is_parent(parent_rr):
return NOT_PARENT
with transaction.atomic():
for child_rr in gen_child_rrs(parent_rr):
if child_rr.get_draft() is None:
ReviewRequestDraft.create(child_rr)
if parent_rr.get_draft() is None:
ReviewRequestDraft.create(parent_rr)
return 200, {}
示例13: on_review_request_closed_discarded
def on_review_request_closed_discarded(user, review_request, type, **kwargs):
if type != ReviewRequest.DISCARDED:
return
commit_data = fetch_commit_data(review_request)
if is_parent(review_request, commit_data):
# close_child_review_requests will call save on this review request, so
# we don't have to worry about it.
review_request.commit = None
_close_child_review_requests(user, review_request,
ReviewRequest.DISCARDED,
AUTO_CLOSE_DESCRIPTION,
commit_data=commit_data)
else:
# TODO: Remove this once we properly prevent users from closing
# commit review requests.
b = Bugzilla(get_bugzilla_api_key(user))
bug = int(review_request.get_bug_list()[0])
diff_url = '%sdiff/#index_header' % get_obj_url(review_request)
b.obsolete_review_attachments(bug, diff_url)
示例14: ensure_parent_draft
def ensure_parent_draft(draft):
"""Ensure parent draft exists when child has a draft.
This is intended to be called in the post_save signal for the
ReviewRequestDraft model and ensure the parent review request
has a draft if a child draft is saved. We need to do this so
that the parent may always be published when a child requires
publishing.
Particularly we update our own reviewer information in the
parent to make sure that a reviewer change on a child request
will create a parent draft - even if the reviewer change does
not alter the overall set of reviewers for the series.
"""
rr = draft.get_review_request()
if is_pushed(draft) and not is_parent(rr):
parent_rr = get_parent_rr(rr)
parent_rr_draft = parent_rr.get_draft()
if parent_rr_draft is None:
parent_rr_draft = ReviewRequestDraft.create(parent_rr)
update_parent_rr_reviewers(parent_rr_draft)
示例15: create
def create(self, request, review_request_id, *args, **kwargs):
try:
rr = ReviewRequest.objects.get(pk=review_request_id)
except ReviewRequest.DoesNotExist:
return DOES_NOT_EXIST
if not is_pushed(rr) or not is_parent(rr):
logging.error(
"Failed triggering Autoland because the review "
"request is not pushed, or not the parent review "
"request."
)
return NOT_PUSHED_PARENT_REVIEW_REQUEST
if not rr.is_mutable_by(request.user):
return PERMISSION_DENIED
last_revision = json.loads(rr.extra_data.get("p2rb.commits"))[-1][0]
ext = get_extension_manager().get_enabled_extension("mozreview.extension.MozReviewExtension")
logging.info(
"Submitting a request to Autoland for review request "
"ID %s for revision %s " % (review_request_id, last_revision)
)
autoland_url = ext.settings.get("autoland_url")
if not autoland_url:
return AUTOLAND_CONFIGURATION_ERROR
autoland_user = ext.settings.get("autoland_user")
autoland_password = ext.settings.get("autoland_password")
if not autoland_user or not autoland_password:
return AUTOLAND_CONFIGURATION_ERROR
pingback_url = autoland_request_update_resource.get_uri(request)
logging.info("Telling Autoland to give status updates to %s" % pingback_url)
try:
# Rather than hard coding the destination it would make sense
# to extract it from metadata about the repository. That will have
# to wait until we fix Bug 1168486.
response = requests.post(
autoland_url + "/autoland",
data=json.dumps(
{
"tree": rr.repository.name,
"pingback_url": pingback_url,
"rev": last_revision,
"destination": INBOUND_AUTOLAND_DESTINATION,
}
),
headers={"content-type": "application/json"},
timeout=AUTOLAND_REQUEST_TIMEOUT,
auth=(autoland_user, autoland_password),
)
except requests.exceptions.RequestException:
logging.error("We hit a RequestException when submitting a " "request to Autoland")
return AUTOLAND_ERROR
except requests.exceptions.Timeout:
logging.error("We timed out when submitting a request to " "Autoland")
return AUTOLAND_TIMEOUT
if response.status_code != 200:
return AUTOLAND_ERROR, {"status_code": response.status_code, "message": response.json().get("error")}
# We succeeded in scheduling the job.
try:
autoland_request_id = int(response.json().get("request_id", 0))
finally:
if autoland_request_id is None:
return AUTOLAND_ERROR, {"status_code": response.status_code, "request_id": None}
autoland_request = AutolandRequest.objects.create(
autoland_id=autoland_request_id,
push_revision=last_revision,
review_request_id=rr.id,
user_id=request.user.id,
)
AutolandEventLogEntry.objects.create(
status=AutolandEventLogEntry.REQUESTED, autoland_request_id=autoland_request_id
)
self.save_autolandrequest_id("p2rb.autoland_inbound", rr, autoland_request_id)
return 200, {}