本文整理汇总了Python中sentry.models.Release.get_lock_key方法的典型用法代码示例。如果您正苦于以下问题:Python Release.get_lock_key方法的具体用法?Python Release.get_lock_key怎么用?Python Release.get_lock_key使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sentry.models.Release
的用法示例。
在下文中一共展示了Release.get_lock_key方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: start_release
# 需要导入模块: from sentry.models import Release [as 别名]
# 或者: from sentry.models.Release import get_lock_key [as 别名]
def start_release(self, version, **values):
values.setdefault('date_started', timezone.now())
affected = Release.objects.filter(
version=version,
organization_id=self.project.organization_id,
projects=self.project,
).update(**values)
if not affected:
release = Release.objects.filter(
version=version,
organization_id=self.project.organization_id,
).first()
if release:
release.update(**values)
else:
lock_key = Release.get_lock_key(self.project.organization_id, version)
lock = locks.get(lock_key, duration=5)
with TimedRetryPolicy(10)(lock.acquire):
try:
release = Release.objects.get(
version=version,
organization_id=self.project.organization_id
)
except Release.DoesNotExist:
release = Release.objects.create(
version=version,
organization_id=self.project.organization_id,
**values
)
release.add_project(self.project)
示例2: finish_release
# 需要导入模块: from sentry.models import Release [as 别名]
# 或者: from sentry.models.Release import get_lock_key [as 别名]
def finish_release(self, version, **values):
values.setdefault('date_released', timezone.now())
affected = Release.objects.filter(
version=version,
organization_id=self.project.organization_id,
projects=self.project,
).update(**values)
if not affected:
release = Release.objects.filter(
version=version,
organization_id=self.project.organization_id,
).first()
if release:
release.update(**values)
else:
lock_key = Release.get_lock_key(self.project.organization_id, version)
lock = locks.get(lock_key, duration=5)
with TimedRetryPolicy(10)(lock.acquire):
try:
release = Release.objects.get(
version=version,
organization_id=self.project.organization_id,
)
except Release.DoesNotExist:
release = Release.objects.create(
version=version,
organization_id=self.project.organization_id,
**values
)
release.add_project(self.project)
activity = Activity.objects.create(
type=Activity.RELEASE,
project=self.project,
ident=version,
data={'version': version},
datetime=values['date_released'],
)
activity.send_notification()
示例3: post
# 需要导入模块: from sentry.models import Release [as 别名]
# 或者: from sentry.models.Release import get_lock_key [as 别名]
def post(self, request, project):
"""
Create a New Release
````````````````````
Create a new release and/or associate a project with a release.
Release versions that are the same across multiple projects
within an Organization will be treated as the same release in Sentry.
Releases are used by Sentry to improve its error reporting abilities
by correlating first seen events with the release that might have
introduced the problem.
Releases are also necessary for sourcemaps and other debug features
that require manual upload for functioning well.
:pparam string organization_slug: the slug of the organization the
release belongs to.
:pparam string project_slug: the slug of the project to create a
release for.
:param string version: a version identifier for this release. Can
be a version number, a commit hash etc.
:param string ref: an optional commit reference. This is useful if
a tagged version has been provided.
:param url url: a URL that points to the release. This can be the
path to an online interface to the sourcecode
for instance.
:param datetime dateStarted: an optional date that indicates when the
release process started.
:param datetime dateReleased: an optional date that indicates when
the release went live. If not provided
the current time is assumed.
:auth: required
"""
serializer = ReleaseSerializer(data=request.DATA)
if serializer.is_valid():
result = serializer.object
# release creation is idempotent to simplify user
# experiences
release = Release.objects.filter(
organization_id=project.organization_id,
version=result['version'],
projects=project
).first()
created = False
if release:
was_released = bool(release.date_released)
else:
release = Release.objects.filter(
organization_id=project.organization_id,
version=result['version'],
).first()
if not release:
lock_key = Release.get_lock_key(project.organization_id, result['version'])
lock = locks.get(lock_key, duration=5)
with TimedRetryPolicy(10)(lock.acquire):
try:
release, created = Release.objects.get(
version=result['version'],
organization_id=project.organization_id
), False
except Release.DoesNotExist:
release, created = Release.objects.create(
organization_id=project.organization_id,
version=result['version'],
ref=result.get('ref'),
url=result.get('url'),
owner=result.get('owner'),
date_started=result.get('dateStarted'),
date_released=result.get('dateReleased'),
), True
was_released = False
try:
with transaction.atomic():
ReleaseProject.objects.create(project=project, release=release)
created = True
except IntegrityError:
pass
commit_list = result.get('commits')
if commit_list:
hook = ReleaseHook(project)
# TODO(dcramer): handle errors with release payloads
hook.set_commits(release.version, commit_list)
if (not was_released and release.date_released):
activity = Activity.objects.create(
type=Activity.RELEASE,
project=project,
ident=result['version'],
data={'version': result['version']},
datetime=release.date_released,
)
activity.send_notification()
if not created:
# This is the closest status code that makes sense, and we want
# a unique 2xx response code so people can understand when
#.........这里部分代码省略.........
示例4: set_commits
# 需要导入模块: from sentry.models import Release [as 别名]
# 或者: from sentry.models.Release import get_lock_key [as 别名]
def set_commits(self, version, commit_list):
"""
Commits should be ordered oldest to newest.
Calling this method will remove all existing commit history.
"""
project = self.project
release = Release.objects.filter(
organization_id=project.organization_id,
version=version,
projects=self.project
).first()
if not release:
release = Release.objects.filter(
organization_id=project.organization_id,
version=version,
).first()
if not release:
lock_key = Release.get_lock_key(project.organization_id, version)
lock = locks.get(lock_key, duration=5)
with TimedRetryPolicy(10)(lock.acquire):
try:
release = Release.objects.get(
organization_id=project.organization_id,
version=version
)
except Release.DoesNotExist:
release = Release.objects.create(
organization_id=project.organization_id,
version=version
)
release.add_project(project)
with transaction.atomic():
# TODO(dcramer): would be good to optimize the logic to avoid these
# deletes but not overly important
ReleaseCommit.objects.filter(
release=release,
).delete()
authors = {}
repos = {}
for idx, data in enumerate(commit_list):
repo_name = data.get('repository') or 'project-{}'.format(project.id)
if repo_name not in repos:
repos[repo_name] = repo = Repository.objects.get_or_create(
organization_id=project.organization_id,
name=repo_name,
)[0]
else:
repo = repos[repo_name]
author_email = data.get('author_email')
if author_email is None and data.get('author_name'):
author_email = self._to_email(data['author_name'])
if not author_email:
author = None
elif author_email not in authors:
authors[author_email] = author = CommitAuthor.objects.get_or_create(
organization_id=project.organization_id,
email=author_email,
defaults={
'name': data.get('author_name'),
}
)[0]
if data.get('author_name') and author.name != data['author_name']:
author.update(name=data['author_name'])
else:
author = authors[author_email]
commit = Commit.objects.get_or_create(
organization_id=project.organization_id,
repository_id=repo.id,
key=data['id'],
defaults={
'message': data.get('message'),
'author': author,
'date_added': data.get('timestamp') or timezone.now(),
}
)[0]
ReleaseCommit.objects.create(
organization_id=project.organization_id,
release=release,
commit=commit,
order=idx,
)