本文整理汇总了Python中sentry.models.Environment.get_lock_key方法的典型用法代码示例。如果您正苦于以下问题:Python Environment.get_lock_key方法的具体用法?Python Environment.get_lock_key怎么用?Python Environment.get_lock_key使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sentry.models.Environment
的用法示例。
在下文中一共展示了Environment.get_lock_key方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: post
# 需要导入模块: from sentry.models import Environment [as 别名]
# 或者: from sentry.models.Environment import get_lock_key [as 别名]
def post(self, request, organization, version):
"""
Create a Deploy
```````````````
Create a deploy for a given release.
:pparam string organization_slug: the organization short name
:pparam string version: the version identifier of the release.
:param string environment: the environment you're deploying to
:param string name: the optional name of the deploy
:param url url: the optional url that points to the deploy
:param datetime dateStarted: an optional date that indicates when
the deploy started
:param datetime dateFinished: an optional date that indicates when
the deploy ended. If not provided, the
current time is used.
"""
try:
release = Release.objects.get(
version=version,
organization=organization,
)
except Release.DoesNotExist:
raise ResourceDoesNotExist
if not self.has_release_permission(request, organization, release):
raise PermissionDenied
serializer = DeploySerializer(data=request.DATA)
if serializer.is_valid():
result = serializer.object
try:
env = Environment.objects.get(
organization_id=organization.id,
name=result['environment'],
)
except Environment.DoesNotExist:
# TODO(jess): clean up when changing unique constraint
lock_key = Environment.get_lock_key(organization.id, result['environment'])
lock = locks.get(lock_key, duration=5)
with TimedRetryPolicy(10)(lock.acquire):
try:
env = Environment.objects.get(
organization_id=organization.id,
name=result['environment'],
)
except Environment.DoesNotExist:
env = Environment.objects.create(
organization_id=organization.id,
name=result['environment'],
)
try:
with transaction.atomic():
deploy, created = Deploy.objects.create(
organization_id=organization.id,
release=release,
environment_id=env.id,
date_finished=result.get('dateFinished', timezone.now()),
date_started=result.get('dateStarted'),
name=result.get('name'),
url=result.get('url'),
), True
except IntegrityError:
deploy, created = Deploy.objects.get(
organization_id=organization.id,
release=release,
environment_id=env.id,
), False
deploy.update(
date_finished=result.get('dateFinished', timezone.now()),
date_started=result.get('dateStarted'),
)
activity = None
for project in release.projects.all():
activity = Activity.objects.create(
type=Activity.DEPLOY,
project=project,
ident=release.version,
data={
'version': release.version,
'deploy_id': deploy.id,
'environment': env.name
},
datetime=deploy.date_finished,
)
# Somewhat hacky, only send notification for one
# Deploy Activity record because it will cover all projects
if activity is not None:
activity.send_notification()
# This is the closest status code that makes sense, and we want
# a unique 2xx response code so people can understand when
# behavior differs.
# 208 Already Reported (WebDAV; RFC 5842)
status = 201 if created else 208
#.........这里部分代码省略.........