Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
I
internewshid
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
aptivate
client-projects
internewshid
Commits
a42e160a
Commit
a42e160a
authored
9 years ago
by
Alice Heaton
Browse files
Options
Downloads
Plain Diff
Merge branch 'date-range-api' into develop
parents
cb1139d8
45590dbe
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
django/website/rest_api/tests/term_itemcount_tests.py
+51
-4
51 additions, 4 deletions
django/website/rest_api/tests/term_itemcount_tests.py
django/website/rest_api/views.py
+14
-3
14 additions, 3 deletions
django/website/rest_api/views.py
readme.markdown
+45
-23
45 additions, 23 deletions
readme.markdown
with
110 additions
and
30 deletions
django/website/rest_api/tests/term_itemcount_tests.py
+
51
−
4
View file @
a42e160a
from
__future__
import
unicode_literals
,
absolute_import
from
datetime
import
timedelta
import
pytest
from
django.core.urlresolvers
import
reverse
from
django.utils
import
timezone
from
rest_framework.test
import
APIRequestFactory
from
rest_framework
import
status
...
...
@@ -15,16 +19,16 @@ from .taxonomy_and_term_create_tests import (
)
def
get_term_itemcount
(
taxonomy_slug
):
response
=
get_term_itemcount_response
(
taxonomy_slug
)
def
get_term_itemcount
(
taxonomy_slug
,
get_params
=
None
):
response
=
get_term_itemcount_response
(
taxonomy_slug
,
get_params
)
assert
status
.
is_success
(
response
.
status_code
),
response
.
data
return
response
def
get_term_itemcount_response
(
taxonomy_slug
):
def
get_term_itemcount_response
(
taxonomy_slug
,
get_params
=
None
):
url
=
reverse
(
'
taxonomy-itemcount
'
,
kwargs
=
{
'
slug
'
:
taxonomy_slug
})
request
=
APIRequestFactory
().
get
(
url
)
request
=
APIRequestFactory
().
get
(
url
,
data
=
get_params
)
view
=
TaxonomyViewSet
.
as_view
(
actions
=
{
'
get
'
:
'
itemcount
'
})
return
view
(
request
,
slug
=
taxonomy_slug
)
...
...
@@ -121,6 +125,49 @@ def test_term_itemcount_contains_taxonomy_term_long_name(
assert
origins
[
'
long_name
'
]
==
long_name
@pytest.mark.django_db
def
test_items_in_date_range_returned
(
questions_category_slug
):
now
=
timezone
.
now
().
replace
(
microsecond
=
0
# MySQL discards microseconds
)
one_day_ago
=
now
-
timedelta
(
days
=
1
)
one_week_ago
=
now
-
timedelta
(
weeks
=
1
)
eight_days_ago
=
now
-
timedelta
(
days
=
8
)
item_too_recent
=
create_item
(
body
=
"
Where did ebola came from?
"
,
timestamp
=
now
).
data
item_in_range_1
=
create_item
(
body
=
"
What was the caused of ebola outbreak in liberia?
"
,
timestamp
=
one_day_ago
).
data
item_in_range_2
=
create_item
(
body
=
"
Is Ebola a man made sickness
"
,
timestamp
=
one_week_ago
).
data
item_too_old
=
create_item
(
body
=
"
What brought about ebola in liberia
"
,
timestamp
=
eight_days_ago
).
data
origins
=
add_term
(
taxonomy
=
questions_category_slug
,
name
=
"
Test Origins
"
).
data
categorize_item
(
item_in_range_1
,
origins
)
categorize_item
(
item_in_range_2
,
origins
)
categorize_item
(
item_too_old
,
origins
)
categorize_item
(
item_too_recent
,
origins
)
get_params
=
{
'
start_time
'
:
one_week_ago
,
'
end_time
'
:
one_day_ago
}
[
term
]
=
get_term_itemcount
(
questions_category_slug
,
get_params
).
data
assert
term
[
'
count
'
]
==
2
@pytest.mark.django_db
def
test_error_for_non_existent_taxonomy
():
response
=
get_term_itemcount_response
(
'
a-taxonomy-that-does-not-exist
'
)
...
...
This diff is collapsed.
Click to expand it.
django/website/rest_api/views.py
+
14
−
3
View file @
a42e160a
...
...
@@ -70,13 +70,24 @@ class TaxonomyViewSet(viewsets.ModelViewSet):
data
=
{
'
detail
'
:
message
}
return
Response
(
data
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
terms
=
Term
.
objects
.
filter
(
taxonomy
=
taxonomy
).
annotate
(
count
=
Count
(
'
items
'
)
)
terms
=
self
.
_get_terms
(
request
,
taxonomy
)
data
=
TermItemCountSerializer
(
terms
,
many
=
True
).
data
return
Response
(
data
,
status
=
status
.
HTTP_200_OK
)
def
_get_terms
(
self
,
request
,
taxonomy
):
start_time
=
request
.
query_params
.
get
(
'
start_time
'
,
None
)
end_time
=
request
.
query_params
.
get
(
'
end_time
'
,
None
)
filters
=
{
'
taxonomy
'
:
taxonomy
}
if
start_time
is
not
None
and
end_time
is
not
None
:
filters
[
'
items__timestamp__range
'
]
=
[
start_time
,
end_time
]
return
Term
.
objects
.
filter
(
**
filters
).
annotate
(
count
=
Count
(
'
items
'
))
class
TermViewSet
(
viewsets
.
ModelViewSet
):
serializer_class
=
TermSerializer
...
...
This diff is collapsed.
Click to expand it.
readme.markdown
+
45
−
23
View file @
a42e160a
...
...
@@ -12,12 +12,12 @@ Base URL '/items/'
#### Create Items
'/items/' POST
'/items/' POST
{
"body": "blah",
"timestamp": "..."
}
{
"body": "blah",
"timestamp": "..."
}
-
create an item. Should return the object, including its unique ID and the
system allocated creation time.
...
...
@@ -26,7 +26,7 @@ Base URL '/items/'
#### Create item with tags and categories
{
"body": "blah",
"body": "blah",
"timestamp": "...",
"metadata": [
{ "slug": "<taxonomy-slug>", // slug OR: name
...
...
@@ -54,7 +54,7 @@ should be an exception.
-
returns a list of Items
[ { "id": nn,
[ { "id": nn,
"body": "...",
"created": ...
"timestamp": ...
...
...
@@ -65,9 +65,9 @@ should be an exception.
-
When we do categories it should return those the same way as post above,
e.g.:
[ {
"id": nn,
[ {
"id": nn,
"body": "...",
"created": ...
"timestamp": ...
...
...
@@ -94,17 +94,17 @@ the expanded `Item` JSON somehow too.
[
{ "name": "Ebola Question Type",
"slug": "ebola-question-type",
"long_name": "Question Type",
"long_name": "Question Type",
"cardinality": "optional",
"vocabulary": "closed",
"terms": [
{"name": "Is Ebola Real",
{"name": "Is Ebola Real",
"long name": ...
},
...
]
},
{ "name": "Reliability",
{ "name": "Reliability",
...
},
...
...
...
@@ -126,11 +126,11 @@ the unique field is derived from the given one?
{ "name": "Ebola Question Type",
"slug": "ebola-question-type", // do we supply this or is it calculated?
"long_name": "Question Type",
"long_name": "Question Type",
"cardinality": "optional",
"vocabulary": "closed",
"terms": [
{"name": "Is Ebola Real",
{"name": "Is Ebola Real",
"long name": ...
},
...
...
...
@@ -146,27 +146,27 @@ be returned by the call.
{ "name": "Ebola Question Type",
"slug": "ebola-question-type", // calculated from name
"long_name": "Question Type",
"long_name": "Question Type",
"cardinality": "optional",
"vocabulary": "closed",
"terms": [
{"name": "Is Ebola Real",
{"name": "Is Ebola Real",
"long name": ...
},
...
]
},
e.g.
`/taxonomies/ebola-questions/`
e.g.
`/taxonomies/ebola-questions/`
-
Taxonomy details URL should use the taxonomy's sluggified name
### Update Taxonomy Details
### Update Taxonomy Details
`/taxonomies/ebola-questions/`
POST
{
"long_name": "Question Type",
{
"long_name": "Question Type",
"cardinality": "optional",
"vocabulary": "closed",
},
...
...
@@ -181,7 +181,7 @@ e.g. `/taxonomies/ebola-questions/`
### Add a term to a taxonomy
We could do
We could do
`
/taxonomies/ebola-questions/terms/
` POST { 'name': 'vaccine' }
But for the moment we;re doing
...
...
@@ -189,6 +189,28 @@ But for the moment we;re doing
`
/terms/
` POST { 'name': 'vaccine', 'taxonomy': 'ebola-questions' }
### Get count of items per term for a taxonomy
`
/taxonomies/
<taxonomy-slug>
/itemcount?start_time=
<start-time>
&end_time=
<end_time>
Returns a list of terms:
[ { "name": "Vaccine",
"long_name": "Vaccine Trial",
"count": 2
},
{
"name": "Measures",
"long_name": "What measures could end Ebola?",
"count": 1
},
{
"name": "Symptoms",
"long_name": "Symptoms/Medical",
"count": 0
},
...
]
### List all Terms (all taxonomies)
'/terms/' GET
...
...
@@ -255,7 +277,7 @@ OR
'/items/2314/taxonomies/terms/<term-slug>/' DELETE
-
Where term slug is the unique slug for the term.
-
Where term slug is the unique slug for the term.
e.g.
'/items/2314/taxonomies/terms/ebola-questions-
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment