1
0
Fork 0
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:
Bram Wiepjes 2021-01-25 18:26:29 +00:00
parent 67fa8da835
commit fd999bfae4
7 changed files with 85 additions and 0 deletions
backend
src/baserow/contrib/database
tests/baserow/contrib/database
changelog.md

View file

@ -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

View file

@ -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),
),
]

View file

@ -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

View file

@ -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',)

View file

@ -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()

View file

@ -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'))

View file

@ -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)