Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cloudkittydashboard/dashboards/project/rating/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def get_data(self):

def quote(request):
pricing = 0.0
if request.is_ajax():
if request.headers.get('x-requested-with') == 'XMLHttpRequest':
if request.method == 'POST':
json_data = json.loads(request.body)

Expand Down
28 changes: 28 additions & 0 deletions cloudkittydashboard/forms/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Copyright 2012 Nebula, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# Importing non-modules that are not used explicitly
from django.forms.fields import BooleanField
from django.forms.fields import DateField
from django.forms.forms import Form

# Convenience imports for public API components.
from cloudkittydashboard.forms.base import CheckBoxForm
from cloudkittydashboard.forms.base import DateForm

__all__ = [
"DateForm",
"CheckBoxForm",
'DateField', 'BooleanField',
'Form',
]
48 changes: 48 additions & 0 deletions cloudkittydashboard/forms/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Copyright 2012 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
#
# Copyright 2012 Nebula, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from django import forms


class DateForm(forms.Form):
"""A simple form for selecting a range of time."""
start = forms.DateField(input_formats=("%Y-%m-%d",))
end = forms.DateField(input_formats=("%Y-%m-%d",))

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

self.fields['start'].widget.attrs['data-date-format'] = "yyyy-mm-dd"
self.fields['end'].widget.attrs['data-date-format'] = "yyyy-mm-dd"


class CheckBoxForm(forms.Form):
"""A form for selecting fields to group by in the rating summary."""
checkbox_fields = ["type", "id", "user_id"]
for field in checkbox_fields:
locals()[field] = forms.BooleanField(required=False)

def get_selected_fields(self):
"""Return list of selected groupby fields."""
if not self.is_valid():
return []
# Get all selected checkbox fields
selected = [
field for field in self.checkbox_fields
if self.cleaned_data.get(field)
]
return selected
4 changes: 2 additions & 2 deletions cloudkittydashboard/tests/test_predictive_pricing.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def setUp(self):
def _test_quote_request_not_ajax_post(self, arg):
request = mock.MagicMock()
if arg == 'ajax':
request.is_ajax.return_value = False
request.headers.get.return_value = None # Not an AJAX request
elif arg == 'method':
request.method == 'POST'
resp = self.quote(request)
Expand All @@ -57,7 +57,7 @@ def test_quote_does_update_request_dict(self, api_mock):
{'other_key': None, 'service': 'test_service'}]

request = mock.MagicMock()
request.is_ajax.return_value = True
request.headers.get.return_value = 'XMLHttpRequest'
request.method = 'POST'
request.body = json.dumps(body)

Expand Down
2 changes: 0 additions & 2 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@
minversion = 3.18.0
envlist = py3,pep8
skipsdist = True
ignore_basepython_conflict = True

[testenv]
basepython = python3
usedevelop = True
install_command = pip install -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -U {opts} {packages}
setenv =
Expand Down