Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
94
Merge Requests
10
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
f157eb56
authored
9 years ago
by
Kálmán Viktor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
request: hook for request
parent
94ab65de
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
32 additions
and
8 deletions
+32
-8
circle/circle/settings/base.py
+1
-0
circle/request/forms.py
+4
-4
circle/request/models.py
+27
-4
No files found.
circle/circle/settings/base.py
View file @
f157eb56
...
...
@@ -556,3 +556,4 @@ ADMIN_ENABLED = False
BLACKLIST_PASSWORD
=
get_env_variable
(
"BLACKLIST_PASSWORD"
,
""
)
BLACKLIST_HOOK_URL
=
get_env_variable
(
"BLACKLIST_HOOK_URL"
,
""
)
REQUEST_HOOK_URL
=
get_env_variable
(
"REQUEST_HOOK_URL"
,
""
)
This diff is collapsed.
Click to expand it.
circle/request/forms.py
View file @
f157eb56
...
...
@@ -16,8 +16,8 @@
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
django.forms
import
(
ModelForm
,
ModelChoiceField
,
ChoiceField
,
Form
,
CharField
,
RadioSelect
,
Textarea
,
)
from
django
import
forms
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.template
import
RequestContext
from
django.template.loader
import
render_to_string
...
...
@@ -74,19 +74,19 @@ class TemplateRequestForm(InitialFromFileMixin, Form):
label
=
_
(
"Template share"
))
level
=
ChoiceField
(
TemplateAccessAction
.
LEVELS
,
widget
=
RadioSelect
,
initial
=
TemplateAccessAction
.
LEVELS
.
user
)
message
=
CharField
(
widget
=
forms
.
Textarea
,
label
=
_
(
"Message"
))
message
=
CharField
(
widget
=
Textarea
,
label
=
_
(
"Message"
))
initial_template
=
"request/initials/template.html"
class
LeaseRequestForm
(
InitialFromFileMixin
,
Form
):
lease
=
ModelChoiceField
(
LeaseType
.
objects
.
all
(),
label
=
_
(
"Lease"
))
message
=
CharField
(
widget
=
forms
.
Textarea
)
message
=
CharField
(
widget
=
Textarea
)
initial_template
=
"request/initials/lease.html"
class
ResourceRequestForm
(
InitialFromFileMixin
,
VmResourcesForm
):
message
=
CharField
(
widget
=
forms
.
Textarea
)
message
=
CharField
(
widget
=
Textarea
)
initial_template
=
"request/initials/resources.html"
This diff is collapsed.
Click to expand it.
circle/request/models.py
View file @
f157eb56
...
...
@@ -14,10 +14,14 @@
#
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
import
json
import
logging
from
django.db.models
import
(
Model
,
CharField
,
IntegerField
,
TextField
,
ForeignKey
,
ManyToManyField
,
)
from
django.db.models.signals
import
post_save
from
django.conf
import
settings
from
django.contrib.contenttypes.fields
import
GenericForeignKey
from
django.contrib.contenttypes.models
import
ContentType
from
django.contrib.auth.models
import
User
...
...
@@ -27,11 +31,14 @@ from django.utils.translation import (
)
from
django.core.urlresolvers
import
reverse
import
requests
from
model_utils.models
import
TimeStampedModel
from
model_utils
import
Choices
from
vm.models
import
Instance
,
InstanceTemplate
,
Lease
logger
=
logging
.
getLogger
(
__name__
)
class
RequestAction
(
Model
):
...
...
@@ -236,7 +243,7 @@ class TemplateAccessAction(RequestAction):
)
%
", "
.
join
([
x
.
name
for
x
in
self
.
template_type
.
templates
.
all
()])
def
send_notification
_to_superuser
s
(
sender
,
instance
,
created
,
**
kwargs
):
def
send_notifications
(
sender
,
instance
,
created
,
**
kwargs
):
if
not
created
:
return
...
...
@@ -247,7 +254,7 @@ def send_notification_to_superusers(sender, instance, created, **kwargs):
'display_name'
:
instance
.
user
.
profile
.
get_display_name
(),
'user_url'
:
instance
.
user
.
profile
.
get_absolute_url
(),
'request_url'
:
instance
.
get_absolute_url
(),
'request_type'
:
instance
.
get_readable_type
()
'request_type'
:
u"
%
s"
%
instance
.
get_readable_type
()
}
for
u
in
User
.
objects
.
filter
(
is_superuser
=
True
):
...
...
@@ -261,5 +268,21 @@ def send_notification_to_superusers(sender, instance, created, **kwargs):
'<a href="
%(request_url)
s">link</a>.'
),
context
)
post_save
.
connect
(
send_notification_to_superusers
,
sender
=
Request
)
if
settings
.
REQUEST_HOOK_URL
:
context
.
update
({
'object_kind'
:
"request"
,
'site_url'
:
settings
.
DJANGO_URL
,
})
try
:
r
=
requests
.
post
(
settings
.
REQUEST_HOOK_URL
,
timeout
=
3
,
data
=
json
.
dumps
(
context
,
indent
=
2
))
r
.
raise_for_status
()
except
requests
.
RequestException
as
e
:
logger
.
warning
(
"Error in HTTP POST:
%
s. url:
%
s params:
%
s"
,
str
(
e
),
settings
.
REQUEST_HOOK_URL
,
context
)
else
:
logger
.
info
(
"Successful HTTP POST. url:
%
s params:
%
s"
,
settings
.
REQUEST_HOOK_URL
,
context
)
post_save
.
connect
(
send_notifications
,
sender
=
Request
)
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment