mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-10 15:47:32 +00:00
Resolve "Add token usage details"
This commit is contained in:
parent
67fa8da835
commit
fd999bfae4
7 changed files with 85 additions and 0 deletions
|
@ -56,6 +56,7 @@ class TokenAuthentication(BaseAuthentication):
|
|||
'error': 'ERROR_TOKEN_DOES_NOT_EXIST'
|
||||
})
|
||||
|
||||
token = handler.update_token_usage(token)
|
||||
request.user_token = token
|
||||
return token.user, token
|
||||
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
# Generated by Django 2.2.11 on 2021-01-25 14:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('database', '0025_gridviewfieldoptions_hidden'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='token',
|
||||
name='handled_calls',
|
||||
field=models.PositiveIntegerField(
|
||||
default=0,
|
||||
help_text='Indicates the total amount of calls were handled using '
|
||||
'this token.'
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='token',
|
||||
name='last_call',
|
||||
field=models.DateTimeField(
|
||||
blank=True,
|
||||
help_text='Timestamp when the last call was handled using this '
|
||||
'token.',
|
||||
null=True),
|
||||
),
|
||||
]
|
|
@ -1,4 +1,5 @@
|
|||
from django.db.models import Q
|
||||
from django.utils import timezone
|
||||
|
||||
from rest_framework.request import Request
|
||||
|
||||
|
@ -422,3 +423,20 @@ class TokenHandler:
|
|||
'token.')
|
||||
|
||||
token.delete()
|
||||
|
||||
def update_token_usage(self, token):
|
||||
"""
|
||||
Increases the amount of handled calls and updates the last call timestamp of
|
||||
the token.
|
||||
|
||||
:param token: The token instance that needs to be updated.
|
||||
:param token: Token
|
||||
:return: The updated token instance.
|
||||
:rtype: Token
|
||||
"""
|
||||
|
||||
token.handled_calls += 1
|
||||
token.last_call = timezone.now()
|
||||
token.save()
|
||||
|
||||
return token
|
||||
|
|
|
@ -35,6 +35,15 @@ class Token(models.Model):
|
|||
on_delete=models.CASCADE,
|
||||
help_text='Only the tables of the group can be accessed.'
|
||||
)
|
||||
handled_calls = models.PositiveIntegerField(
|
||||
default=0,
|
||||
help_text='Indicates the total amount of calls were handled using this token.'
|
||||
)
|
||||
last_call = models.DateTimeField(
|
||||
blank=True,
|
||||
null=True,
|
||||
help_text='Timestamp when the last call was handled using this token.'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ('id',)
|
||||
|
|
|
@ -506,6 +506,9 @@ def test_create_row(api_client, data_fixture):
|
|||
assert response_json_row_4[f'field_{text_field_2.id}'] == ''
|
||||
assert response_json_row_4['order'] == '4.00000000000000000000'
|
||||
|
||||
token.refresh_from_db()
|
||||
assert token.handled_calls == 1
|
||||
|
||||
url = reverse('api:database:rows:list', kwargs={'table_id': table.id})
|
||||
response = api_client.post(
|
||||
f"{url}?before={response_json_row_3['id']}",
|
||||
|
@ -526,6 +529,9 @@ def test_create_row(api_client, data_fixture):
|
|||
assert response_json_row_5[f'field_{text_field_2.id}'] == ''
|
||||
assert response_json_row_5['order'] == '2.99999999999999999999'
|
||||
|
||||
token.refresh_from_db()
|
||||
assert token.handled_calls == 2
|
||||
|
||||
model = table.get_model()
|
||||
assert model.objects.all().count() == 5
|
||||
rows = model.objects.all()
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
import pytest
|
||||
import string
|
||||
from pytz import timezone
|
||||
from freezegun import freeze_time
|
||||
from datetime import datetime
|
||||
|
||||
from django.http import HttpRequest
|
||||
from rest_framework.request import Request
|
||||
|
@ -592,3 +595,19 @@ def test_delete_token(data_fixture):
|
|||
|
||||
assert Token.objects.all().count() == 1
|
||||
assert Token.objects.all().first().id == token_2.id
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_update_token_usage(data_fixture):
|
||||
token_1 = data_fixture.create_token()
|
||||
|
||||
handler = TokenHandler()
|
||||
|
||||
assert token_1.handled_calls == 0
|
||||
assert token_1.last_call is None
|
||||
|
||||
with freeze_time('2020-01-01 12:00'):
|
||||
token_1 = handler.update_token_usage(token_1)
|
||||
|
||||
assert token_1.handled_calls == 1
|
||||
assert token_1.last_call == datetime(2020, 1, 1, 12, 00, tzinfo=timezone('UTC'))
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
select as primary field.
|
||||
* Implemented real time collaboration.
|
||||
* Added option to hide fields in a grid view.
|
||||
* Keep token usage details.
|
||||
|
||||
## Released (2021-01-06)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue