Skip to content
Snippets Groups Projects
Commit 456657f1 authored by jan.bednarik's avatar jan.bednarik
Browse files

Format code with Black

parent ecd72c08
Branches
No related tags found
No related merge requests found
Showing
with 351 additions and 233 deletions
...@@ -20,7 +20,6 @@ STATE_LENGTH = 48 ...@@ -20,7 +20,6 @@ STATE_LENGTH = 48
class Login(relay.ClientIDMutation): class Login(relay.ClientIDMutation):
class Input: class Input:
openid_uid = graphene.String(required=True) openid_uid = graphene.String(required=True)
redirect_uri = graphene.String(required=True) redirect_uri = graphene.String(required=True)
...@@ -29,8 +28,8 @@ class Login(relay.ClientIDMutation): ...@@ -29,8 +28,8 @@ class Login(relay.ClientIDMutation):
@classmethod @classmethod
def mutate_and_get_payload(cls, root, info, **input): def mutate_and_get_payload(cls, root, info, **input):
openid_uid = input['openid_uid'] openid_uid = input["openid_uid"]
app_redirect_uri = input['redirect_uri'] app_redirect_uri = input["redirect_uri"]
# prepare OpenID client # prepare OpenID client
issuer = discover_issuer(openid_uid) issuer = discover_issuer(openid_uid)
...@@ -50,8 +49,12 @@ class Login(relay.ClientIDMutation): ...@@ -50,8 +49,12 @@ class Login(relay.ClientIDMutation):
state = rndstr(STATE_LENGTH) state = rndstr(STATE_LENGTH)
# save login attempt # save login attempt
LoginAttempt.objects.create(state=state, openid_client=openid_client_obj, LoginAttempt.objects.create(
app_redirect_uri=app_redirect_uri, openid_uid=openid_uid) state=state,
openid_client=openid_client_obj,
app_redirect_uri=app_redirect_uri,
openid_uid=openid_uid,
)
# get OpenID authorization url # get OpenID authorization url
authorization_url = get_authorization_url(client, state) authorization_url = get_authorization_url(client, state)
...@@ -60,7 +63,6 @@ class Login(relay.ClientIDMutation): ...@@ -60,7 +63,6 @@ class Login(relay.ClientIDMutation):
class LoginByShortcut(relay.ClientIDMutation): class LoginByShortcut(relay.ClientIDMutation):
class Input: class Input:
shortcut_id = relay.GlobalID(required=True) shortcut_id = relay.GlobalID(required=True)
redirect_uri = graphene.String(required=True) redirect_uri = graphene.String(required=True)
...@@ -69,8 +71,8 @@ class LoginByShortcut(relay.ClientIDMutation): ...@@ -69,8 +71,8 @@ class LoginByShortcut(relay.ClientIDMutation):
@classmethod @classmethod
def mutate_and_get_payload(cls, root, info, **input): def mutate_and_get_payload(cls, root, info, **input):
shortcut_id = input['shortcut_id'] shortcut_id = input["shortcut_id"]
app_redirect_uri = input['redirect_uri'] app_redirect_uri = input["redirect_uri"]
# prepare OpenID client # prepare OpenID client
type, id = from_global_id(shortcut_id) type, id = from_global_id(shortcut_id)
...@@ -81,8 +83,11 @@ class LoginByShortcut(relay.ClientIDMutation): ...@@ -81,8 +83,11 @@ class LoginByShortcut(relay.ClientIDMutation):
state = rndstr(STATE_LENGTH) state = rndstr(STATE_LENGTH)
# save login attempt # save login attempt
LoginAttempt.objects.create(state=state, openid_client=openid_client_obj, LoginAttempt.objects.create(
app_redirect_uri=app_redirect_uri) state=state,
openid_client=openid_client_obj,
app_redirect_uri=app_redirect_uri,
)
# get OpenID authorization url # get OpenID authorization url
authorization_url = get_authorization_url(client, state) authorization_url = get_authorization_url(client, state)
...@@ -100,7 +105,6 @@ class Logout(relay.ClientIDMutation): ...@@ -100,7 +105,6 @@ class Logout(relay.ClientIDMutation):
class CreateReport(relay.ClientIDMutation): class CreateReport(relay.ClientIDMutation):
class Input: class Input:
title = graphene.String(required=True) title = graphene.String(required=True)
body = graphene.String(required=True) body = graphene.String(required=True)
...@@ -116,27 +120,26 @@ class CreateReport(relay.ClientIDMutation): ...@@ -116,27 +120,26 @@ class CreateReport(relay.ClientIDMutation):
@classmethod @classmethod
def mutate_and_get_payload(cls, root, info, **input): def mutate_and_get_payload(cls, root, info, **input):
if not info.context.user.is_authenticated: if not info.context.user.is_authenticated:
raise Exception('User must be logged in to perform this mutation.') raise Exception("User must be logged in to perform this mutation.")
author = info.context.user author = info.context.user
report = Report.objects.create( report = Report.objects.create(
author=author, author=author,
date=input.get('date'), date=input.get("date"),
title=strip_all_tags(input.get('title', '')), title=strip_all_tags(input.get("title", "")),
body=strip_all_tags(input.get('body', '')), body=strip_all_tags(input.get("body", "")),
received_benefit=strip_all_tags(input.get('received_benefit', '')), received_benefit=strip_all_tags(input.get("received_benefit", "")),
provided_benefit=strip_all_tags(input.get('provided_benefit', '')), provided_benefit=strip_all_tags(input.get("provided_benefit", "")),
our_participants=strip_all_tags(input.get('our_participants', '')), our_participants=strip_all_tags(input.get("our_participants", "")),
other_participants=strip_all_tags(input.get('other_participants', '')), other_participants=strip_all_tags(input.get("other_participants", "")),
is_draft=input.get('is_draft'), is_draft=input.get("is_draft"),
) )
return CreateReport(report=types.Report.from_db(report)) return CreateReport(report=types.Report.from_db(report))
class UpdateReport(relay.ClientIDMutation): class UpdateReport(relay.ClientIDMutation):
class Input: class Input:
id = graphene.ID(required=True) id = graphene.ID(required=True)
title = graphene.String(required=True) title = graphene.String(required=True)
...@@ -153,32 +156,36 @@ class UpdateReport(relay.ClientIDMutation): ...@@ -153,32 +156,36 @@ class UpdateReport(relay.ClientIDMutation):
@classmethod @classmethod
def mutate_and_get_payload(cls, root, info, **input): def mutate_and_get_payload(cls, root, info, **input):
if not info.context.user.is_authenticated: if not info.context.user.is_authenticated:
raise Exception('User must be logged in to perform this mutation.') raise Exception("User must be logged in to perform this mutation.")
author = info.context.user author = info.context.user
type, id = from_global_id(input.get('id')) type, id = from_global_id(input.get("id"))
try: try:
report = Report.objects.select_related('author').get(id=id, author_id=author.id) report = Report.objects.select_related("author").get(
id=id, author_id=author.id
)
except Report.DoesNotExist: except Report.DoesNotExist:
raise Exception('Viewer is not the Author of this Report or Report does not exist.') raise Exception(
"Viewer is not the Author of this Report or Report does not exist."
)
is_draft = input.get('is_draft') is_draft = input.get("is_draft")
if is_draft and not report.is_draft: if is_draft and not report.is_draft:
raise Exception('You cannot update published Report with draft.') raise Exception("You cannot update published Report with draft.")
# TODO updating published report older than like a hour should create # TODO updating published report older than like a hour should create
# new revision in history of report # new revision in history of report
report.published = arrow.utcnow().datetime report.published = arrow.utcnow().datetime
report.date = input.get('date') report.date = input.get("date")
report.title = strip_all_tags(input.get('title', '')) report.title = strip_all_tags(input.get("title", ""))
report.body = strip_all_tags(input.get('body', '')) report.body = strip_all_tags(input.get("body", ""))
report.received_benefit = strip_all_tags(input.get('received_benefit', '')) report.received_benefit = strip_all_tags(input.get("received_benefit", ""))
report.provided_benefit = strip_all_tags(input.get('provided_benefit', '')) report.provided_benefit = strip_all_tags(input.get("provided_benefit", ""))
report.our_participants = strip_all_tags(input.get('our_participants', '')) report.our_participants = strip_all_tags(input.get("our_participants", ""))
report.other_participants = strip_all_tags(input.get('other_participants', '')) report.other_participants = strip_all_tags(input.get("other_participants", ""))
report.is_draft = is_draft report.is_draft = is_draft
report.save() report.save()
......
...@@ -10,16 +10,24 @@ class MissingBeforeValueError(Exception): ...@@ -10,16 +10,24 @@ class MissingBeforeValueError(Exception):
def encode_cursor(num): def encode_cursor(num):
return base64.b64encode(str(num).encode('utf-8')).decode('utf-8') return base64.b64encode(str(num).encode("utf-8")).decode("utf-8")
def decode_cursor(cursor): def decode_cursor(cursor):
return int(base64.b64decode(cursor).decode('utf-8')) return int(base64.b64decode(cursor).decode("utf-8"))
class Paginator: class Paginator:
def __init__(
def __init__(self, *, first=None, after=None, last=None, before=None, per_page=PER_PAGE, **kwargs): self,
*,
first=None,
after=None,
last=None,
before=None,
per_page=PER_PAGE,
**kwargs
):
self.per_page = per_page self.per_page = per_page
slice_from = 0 slice_from = 0
...@@ -32,7 +40,9 @@ class Paginator: ...@@ -32,7 +40,9 @@ class Paginator:
elif last is not None: elif last is not None:
if before is None: if before is None:
raise MissingBeforeValueError('Pagination "last" works only in combination with "before" argument.') raise MissingBeforeValueError(
'Pagination "last" works only in combination with "before" argument.'
)
slice_to = decode_cursor(before) - 1 slice_to = decode_cursor(before) - 1
slice_from = slice_to - last slice_from = slice_to - last
...@@ -62,8 +72,12 @@ class Paginator: ...@@ -62,8 +72,12 @@ class Paginator:
if self.slice_to < total: if self.slice_to < total:
has_next_page = True has_next_page = True
return PageInfo(has_previous_page=has_previous_page, has_next_page=has_next_page, return PageInfo(
start_cursor=start_cursor, end_cursor=end_cursor) has_previous_page=has_previous_page,
has_next_page=has_next_page,
start_cursor=start_cursor,
end_cursor=end_cursor,
)
def get_edge_cursor(self, num): def get_edge_cursor(self, num):
return encode_cursor(self.slice_from + num) return encode_cursor(self.slice_from + num)
...@@ -8,4 +8,4 @@ def strip_all_tags(value): ...@@ -8,4 +8,4 @@ def strip_all_tags(value):
def extract_text(value): def extract_text(value):
value = strip_all_tags(value) value = strip_all_tags(value)
return ' '.join(re.findall(r'(\b\w+)', value)) return " ".join(re.findall(r"(\b\w+)", value))
...@@ -12,12 +12,14 @@ from ..models import User, Report ...@@ -12,12 +12,14 @@ from ..models import User, Report
AUTHOR_SORT_LAST_NAME_ID = 1 AUTHOR_SORT_LAST_NAME_ID = 1
AUTHOR_SORT_TOTAL_REPORTS_ID = 2 AUTHOR_SORT_TOTAL_REPORTS_ID = 2
class AuthorSortEnum(graphene.Enum): class AuthorSortEnum(graphene.Enum):
LAST_NAME = AUTHOR_SORT_LAST_NAME_ID LAST_NAME = AUTHOR_SORT_LAST_NAME_ID
TOTAL_REPORTS = AUTHOR_SORT_TOTAL_REPORTS_ID TOTAL_REPORTS = AUTHOR_SORT_TOTAL_REPORTS_ID
class Meta: class Meta:
description = 'Sort by field.' description = "Sort by field."
class AuthorsConnection(relay.Connection): class AuthorsConnection(relay.Connection):
total_count = graphene.Int() total_count = graphene.Int()
...@@ -34,36 +36,39 @@ class SearchReportsConnection(relay.Connection): ...@@ -34,36 +36,39 @@ class SearchReportsConnection(relay.Connection):
def _get_authors_cache(ids): def _get_authors_cache(ids):
authors = User.objects.filter(id__in=ids)\ authors = User.objects.filter(id__in=ids).annotate(
.annotate(total_reports=Count('report', filter=Q(report__is_draft=False))) total_reports=Count("report", filter=Q(report__is_draft=False))
)
return {a.id: types.Author.from_db(a) for a in authors} return {a.id: types.Author.from_db(a) for a in authors}
class Query: class Query:
highlight_help = ('Whether search matches should be marked with tag <mark>.' highlight_help = (
' Default: false') "Whether search matches should be marked with tag <mark>." " Default: false"
)
node = relay.Node.Field() node = relay.Node.Field()
authors = relay.ConnectionField( authors = relay.ConnectionField(
AuthorsConnection, AuthorsConnection,
description='List of Authors. Returns first 10 nodes if pagination is not specified.', description="List of Authors. Returns first 10 nodes if pagination is not specified.",
sort=AuthorSortEnum(), sort=AuthorSortEnum(),
reversed=graphene.Boolean(default_value=False, description="Reverse order of sort") reversed=graphene.Boolean(
default_value=False, description="Reverse order of sort"
),
) )
search_reports = relay.ConnectionField( search_reports = relay.ConnectionField(
SearchReportsConnection, SearchReportsConnection,
description='Fulltext search in Reports. Returns first 10 nodes if pagination is not specified.', description="Fulltext search in Reports. Returns first 10 nodes if pagination is not specified.",
query=graphene.String(description='Text to search for.'), query=graphene.String(description="Text to search for."),
highlight=graphene.Boolean(default_value=False, description=highlight_help), highlight=graphene.Boolean(default_value=False, description=highlight_help),
) )
viewer = graphene.Field(types.User, description='Active user viewing API.') viewer = graphene.Field(types.User, description="Active user viewing API.")
login_shortcuts = graphene.List( login_shortcuts = graphene.List(
types.LoginShortcut, types.LoginShortcut,
description='Shortcuts for login. Use with LoginByShortcut mutation.', description="Shortcuts for login. Use with LoginByShortcut mutation.",
) )
report_drafts = graphene.List( report_drafts = graphene.List(
types.Report, types.Report, description="Saved drafts of reports for Viewer."
description='Saved drafts of reports for Viewer.',
) )
def resolve_authors(self, info, **kwargs): def resolve_authors(self, info, **kwargs):
...@@ -71,9 +76,9 @@ class Query: ...@@ -71,9 +76,9 @@ class Query:
total = User.objects.filter(is_author=True).count() total = User.objects.filter(is_author=True).count()
authors = User.objects\ authors = User.objects.sorted(**kwargs).filter(is_author=True)[
.sorted(**kwargs)\ paginator.slice_from : paginator.slice_to
.filter(is_author=True)[paginator.slice_from:paginator.slice_to] ]
page_info = paginator.get_page_info(total) page_info = paginator.get_page_info(total)
...@@ -87,11 +92,9 @@ class Query: ...@@ -87,11 +92,9 @@ class Query:
def resolve_search_reports(self, info, **kwargs): def resolve_search_reports(self, info, **kwargs):
paginator = Paginator(**kwargs) paginator = Paginator(**kwargs)
query = kwargs.get('query', '') query = kwargs.get("query", "")
query = extract_text(query) query = extract_text(query)
params = { params = {"highlight": kwargs.get("highlight")}
'highlight': kwargs.get('highlight'),
}
response = search.query_reports(query, paginator, **params) response = search.query_reports(query, paginator, **params)
total = response.hits.total total = response.hits.total
page_info = paginator.get_page_info(total) page_info = paginator.get_page_info(total)
...@@ -104,7 +107,9 @@ class Query: ...@@ -104,7 +107,9 @@ class Query:
node = types.Report.from_es(report, author=authors[report.author_id]) node = types.Report.from_es(report, author=authors[report.author_id])
edges.append(SearchReportsConnection.Edge(node=node, cursor=cursor)) edges.append(SearchReportsConnection.Edge(node=node, cursor=cursor))
return SearchReportsConnection(page_info=page_info, edges=edges, total_count=total) return SearchReportsConnection(
page_info=page_info, edges=edges, total_count=total
)
def resolve_viewer(self, info, **kwargs): def resolve_viewer(self, info, **kwargs):
if info.context.user.is_authenticated: if info.context.user.is_authenticated:
...@@ -113,7 +118,7 @@ class Query: ...@@ -113,7 +118,7 @@ class Query:
return None return None
def resolve_login_shortcuts(self, info, **kwargs): def resolve_login_shortcuts(self, info, **kwargs):
clients = OpenIdClient.objects.filter(is_shortcut=True).order_by('name') clients = OpenIdClient.objects.filter(is_shortcut=True).order_by("name")
return [types.LoginShortcut.from_db(c) for c in clients] return [types.LoginShortcut.from_db(c) for c in clients]
def resolve_report_drafts(self, info, **kwargs): def resolve_report_drafts(self, info, **kwargs):
......
...@@ -12,9 +12,9 @@ from .. import search ...@@ -12,9 +12,9 @@ from .. import search
def get_higlighted(hit, field): def get_higlighted(hit, field):
"""Returns higlighted text of field if search is higlighted.""" """Returns higlighted text of field if search is higlighted."""
if hasattr(hit.meta, 'highlight') and field in hit.meta.highlight: if hasattr(hit.meta, "highlight") and field in hit.meta.highlight:
return hit.meta.highlight[field][0] return hit.meta.highlight[field][0]
return hit[field] if field in hit else '' return hit[field] if field in hit else ""
class Report(graphene.ObjectType): class Report(graphene.ObjectType):
...@@ -40,12 +40,12 @@ class Report(graphene.ObjectType): ...@@ -40,12 +40,12 @@ class Report(graphene.ObjectType):
author=author, author=author,
date=report.date, date=report.date,
published=report.published, published=report.published,
title=get_higlighted(report, 'title'), title=get_higlighted(report, "title"),
body=get_higlighted(report, 'body'), body=get_higlighted(report, "body"),
received_benefit=get_higlighted(report, 'received_benefit'), received_benefit=get_higlighted(report, "received_benefit"),
provided_benefit=get_higlighted(report, 'provided_benefit'), provided_benefit=get_higlighted(report, "provided_benefit"),
our_participants=get_higlighted(report, 'our_participants'), our_participants=get_higlighted(report, "our_participants"),
other_participants=get_higlighted(report, 'other_participants'), other_participants=get_higlighted(report, "other_participants"),
is_draft=report.is_draft, is_draft=report.is_draft,
extra=report.extra, extra=report.extra,
) )
...@@ -80,7 +80,7 @@ class Report(graphene.ObjectType): ...@@ -80,7 +80,7 @@ class Report(graphene.ObjectType):
if report.author_id != info.context.user.id: if report.author_id != info.context.user.id:
return None return None
author_type = cls._meta.fields['author'].type author_type = cls._meta.fields["author"].type
author = author_type.get_node(info, report.author_id) author = author_type.get_node(info, report.author_id)
return cls.from_es(report, author) return cls.from_es(report, author)
...@@ -151,9 +151,9 @@ class Author(graphene.ObjectType): ...@@ -151,9 +151,9 @@ class Author(graphene.ObjectType):
@classmethod @classmethod
def get_node(cls, info, id): def get_node(cls, info, id):
try: try:
author = models.User.objects\ author = models.User.objects.annotate(
.annotate(total_reports=Count('report', filter=Q(report__is_draft=False)))\ total_reports=Count("report", filter=Q(report__is_draft=False))
.get(id=id, is_author=True) ).get(id=id, is_author=True)
return cls.from_db(author) return cls.from_db(author)
except models.User.DoesNotExist: except models.User.DoesNotExist:
return None return None
......
...@@ -2,5 +2,5 @@ from django.http import JsonResponse ...@@ -2,5 +2,5 @@ from django.http import JsonResponse
def graphql_error_response(message, status_code=400): def graphql_error_response(message, status_code=400):
error = {'message': message} error = {"message": message}
return JsonResponse({'errors': [error]}, status=status_code) return JsonResponse({"errors": [error]}, status=status_code)
...@@ -2,4 +2,4 @@ from django.apps import AppConfig ...@@ -2,4 +2,4 @@ from django.apps import AppConfig
class CoreConfig(AppConfig): class CoreConfig(AppConfig):
name = 'core' name = "core"
...@@ -6,14 +6,13 @@ import time ...@@ -6,14 +6,13 @@ import time
def create_access_token(username, expiration=None): def create_access_token(username, expiration=None):
if expiration is None: if expiration is None:
expiration = int(time.time() + settings.SESSION_EXPIRATION) expiration = int(time.time() + settings.SESSION_EXPIRATION)
payload = { payload = {"sub": username, "exp": expiration}
'sub': username,
'exp': expiration,
}
token = jwt.encode(payload, settings.SECRET_KEY, algorithm=settings.JWT_ALGORITHM) token = jwt.encode(payload, settings.SECRET_KEY, algorithm=settings.JWT_ALGORITHM)
return token.decode('utf-8') return token.decode("utf-8")
def parse_access_token(token): def parse_access_token(token):
payload = jwt.decode(token, settings.SECRET_KEY, algorithms=[settings.JWT_ALGORITHM]) payload = jwt.decode(
return payload['sub'] token, settings.SECRET_KEY, algorithms=[settings.JWT_ALGORITHM]
)
return payload["sub"]
...@@ -5,7 +5,7 @@ import json ...@@ -5,7 +5,7 @@ import json
from .models import Report from .models import Report
report = Index('{}-reports'.format(settings.ES_INDEX)) report = Index("{}-reports".format(settings.ES_INDEX))
@report.doc_type @report.doc_type
...@@ -30,8 +30,4 @@ class ReportDoc(DocType): ...@@ -30,8 +30,4 @@ class ReportDoc(DocType):
class Meta: class Meta:
model = Report model = Report
fields = [ fields = ["date", "published", "is_draft"]
'date',
'published',
'is_draft',
]
...@@ -12,18 +12,20 @@ class TokenAuthMiddleware: ...@@ -12,18 +12,20 @@ class TokenAuthMiddleware:
self.get_response = get_response self.get_response = get_response
def __call__(self, request): def __call__(self, request):
auth_header = request.META.get('HTTP_AUTHORIZATION') auth_header = request.META.get("HTTP_AUTHORIZATION")
if auth_header is not None: if auth_header is not None:
m = re.match(r'Bearer (?P<token>.+)', auth_header) m = re.match(r"Bearer (?P<token>.+)", auth_header)
if m: if m:
token = m.group('token') token = m.group("token")
else: else:
return graphql_error_response('Wrong Authorization header. Expected: "Bearer <token>"') return graphql_error_response(
'Wrong Authorization header. Expected: "Bearer <token>"'
)
try: try:
username = parse_access_token(token) username = parse_access_token(token)
except Exception: except Exception:
return graphql_error_response('Invalid Token.', 401) return graphql_error_response("Invalid Token.", 401)
try: try:
request.user = User.objects.get(username=username) request.user = User.objects.get(username=username)
......
...@@ -13,81 +13,203 @@ class Migration(migrations.Migration): ...@@ -13,81 +13,203 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [("auth", "0009_alter_user_last_name_max_length")]
('auth', '0009_alter_user_last_name_max_length'),
]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='User', name="User",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('password', models.CharField(max_length=128, verbose_name='password')), "id",
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), models.AutoField(
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), auto_created=True,
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), primary_key=True,
('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), serialize=False,
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), verbose_name="ID",
('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), ),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), ),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), ("password", models.CharField(max_length=128, verbose_name="password")),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), (
('openid_uid', models.CharField(db_index=True, max_length=255, unique=True)), "last_login",
('extras', django.contrib.postgres.fields.jsonb.JSONField()), models.DateTimeField(
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), blank=True, null=True, verbose_name="last login"
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), ),
),
(
"is_superuser",
models.BooleanField(
default=False,
help_text="Designates that this user has all permissions without explicitly assigning them.",
verbose_name="superuser status",
),
),
(
"username",
models.CharField(
error_messages={
"unique": "A user with that username already exists."
},
help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.",
max_length=150,
unique=True,
validators=[
django.contrib.auth.validators.UnicodeUsernameValidator()
],
verbose_name="username",
),
),
(
"first_name",
models.CharField(
blank=True, max_length=30, verbose_name="first name"
),
),
(
"last_name",
models.CharField(
blank=True, max_length=150, verbose_name="last name"
),
),
(
"email",
models.EmailField(
blank=True, max_length=254, verbose_name="email address"
),
),
(
"is_staff",
models.BooleanField(
default=False,
help_text="Designates whether the user can log into this admin site.",
verbose_name="staff status",
),
),
(
"is_active",
models.BooleanField(
default=True,
help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
verbose_name="active",
),
),
(
"date_joined",
models.DateTimeField(
default=django.utils.timezone.now, verbose_name="date joined"
),
),
(
"openid_uid",
models.CharField(db_index=True, max_length=255, unique=True),
),
("extras", django.contrib.postgres.fields.jsonb.JSONField()),
(
"groups",
models.ManyToManyField(
blank=True,
help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.",
related_name="user_set",
related_query_name="user",
to="auth.Group",
verbose_name="groups",
),
),
(
"user_permissions",
models.ManyToManyField(
blank=True,
help_text="Specific permissions for this user.",
related_name="user_set",
related_query_name="user",
to="auth.Permission",
verbose_name="user permissions",
),
),
], ],
options={ options={
'verbose_name': 'user', "verbose_name": "user",
'verbose_name_plural': 'users', "verbose_name_plural": "users",
'abstract': False, "abstract": False,
}, },
managers=[ managers=[("objects", django.contrib.auth.models.UserManager())],
('objects', django.contrib.auth.models.UserManager()),
],
), ),
migrations.CreateModel( migrations.CreateModel(
name='LoginAttempt', name="LoginAttempt",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('state', models.CharField(db_index=True, max_length=50, unique=True)), "id",
('redirect_uri', models.CharField(max_length=255)), models.AutoField(
('expiration', models.IntegerField()), auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("state", models.CharField(db_index=True, max_length=50, unique=True)),
("redirect_uri", models.CharField(max_length=255)),
("expiration", models.IntegerField()),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name='OpenIdClient', name="OpenIdClient",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('name', models.CharField(max_length=255)), "id",
('is_shortcut', models.BooleanField(default=False)), models.AutoField(
('client_id', models.CharField(max_length=255)), auto_created=True,
('client_secret', models.CharField(max_length=255)), primary_key=True,
('issuer', models.CharField(db_index=True, max_length=255, unique=True)), serialize=False,
('authorization_endpoint', models.CharField(max_length=255)), verbose_name="ID",
('token_endpoint', models.CharField(max_length=255)), ),
('userinfo_endpoint', models.CharField(max_length=255)), ),
("name", models.CharField(max_length=255)),
("is_shortcut", models.BooleanField(default=False)),
("client_id", models.CharField(max_length=255)),
("client_secret", models.CharField(max_length=255)),
(
"issuer",
models.CharField(db_index=True, max_length=255, unique=True),
),
("authorization_endpoint", models.CharField(max_length=255)),
("token_endpoint", models.CharField(max_length=255)),
("userinfo_endpoint", models.CharField(max_length=255)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name='Report', name="Report",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('date', models.DateTimeField()), "id",
('published', models.DateTimeField()), models.AutoField(
('title', models.TextField()), auto_created=True,
('body', models.TextField()), primary_key=True,
('received_benefit', models.TextField()), serialize=False,
('provided_benefit', models.TextField()), verbose_name="ID",
('our_participants', models.TextField()), ),
('other_participants', models.TextField()), ),
('extra', django.contrib.postgres.fields.jsonb.JSONField()), ("date", models.DateTimeField()),
('author', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), ("published", models.DateTimeField()),
("title", models.TextField()),
("body", models.TextField()),
("received_benefit", models.TextField()),
("provided_benefit", models.TextField()),
("our_participants", models.TextField()),
("other_participants", models.TextField()),
("extra", django.contrib.postgres.fields.jsonb.JSONField()),
(
"author",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to=settings.AUTH_USER_MODEL,
),
),
], ],
), ),
migrations.AddField( migrations.AddField(
model_name='loginattempt', model_name="loginattempt",
name='openid_client', name="openid_client",
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.OpenIdClient'), field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="core.OpenIdClient"
),
), ),
] ]
...@@ -6,44 +6,42 @@ from django.db import migrations, models ...@@ -6,44 +6,42 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("core", "0001_initial")]
('core', '0001_initial'),
]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='report', model_name="report",
name='extra', name="extra",
field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True), field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True),
), ),
migrations.AlterField( migrations.AlterField(
model_name='report', model_name="report",
name='other_participants', name="other_participants",
field=models.TextField(blank=True, null=True), field=models.TextField(blank=True, null=True),
), ),
migrations.AlterField( migrations.AlterField(
model_name='report', model_name="report",
name='our_participants', name="our_participants",
field=models.TextField(blank=True, null=True), field=models.TextField(blank=True, null=True),
), ),
migrations.AlterField( migrations.AlterField(
model_name='report', model_name="report",
name='provided_benefit', name="provided_benefit",
field=models.TextField(blank=True, null=True), field=models.TextField(blank=True, null=True),
), ),
migrations.AlterField( migrations.AlterField(
model_name='report', model_name="report",
name='received_benefit', name="received_benefit",
field=models.TextField(blank=True, null=True), field=models.TextField(blank=True, null=True),
), ),
migrations.AlterField( migrations.AlterField(
model_name='report', model_name="report",
name='title', name="title",
field=models.TextField(blank=True, null=True), field=models.TextField(blank=True, null=True),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name="user",
name='extras', name="extras",
field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True), field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True),
), ),
] ]
...@@ -5,14 +5,8 @@ from django.db import migrations ...@@ -5,14 +5,8 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("core", "0002_auto_20180116_2349")]
('core', '0002_auto_20180116_2349'),
]
operations = [ operations = [
migrations.RenameField( migrations.RenameField(model_name="user", old_name="extras", new_name="extra")
model_name='user',
old_name='extras',
new_name='extra',
),
] ]
...@@ -5,14 +5,12 @@ from django.db import migrations, models ...@@ -5,14 +5,12 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("core", "0003_auto_20180117_0030")]
('core', '0003_auto_20180117_0030'),
]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name="user",
name='is_author', name="is_author",
field=models.BooleanField(default=False), field=models.BooleanField(default=False),
), )
] ]
...@@ -6,19 +6,17 @@ import django.utils.timezone ...@@ -6,19 +6,17 @@ import django.utils.timezone
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("core", "0004_user_is_author")]
('core', '0004_user_is_author'),
]
operations = [ operations = [
migrations.RenameField( migrations.RenameField(
model_name='loginattempt', model_name="loginattempt",
old_name='redirect_uri', old_name="redirect_uri",
new_name='app_redirect_uri', new_name="app_redirect_uri",
), ),
migrations.AlterField( migrations.AlterField(
model_name='report', model_name="report",
name='published', name="published",
field=models.DateTimeField(default=django.utils.timezone.now), field=models.DateTimeField(default=django.utils.timezone.now),
), ),
] ]
...@@ -6,14 +6,14 @@ import openlobby.core.models ...@@ -6,14 +6,14 @@ import openlobby.core.models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("core", "0005_auto_20180208_1210")]
('core', '0005_auto_20180208_1210'),
]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='loginattempt', model_name="loginattempt",
name='expiration', name="expiration",
field=models.IntegerField(default=openlobby.core.models.get_login_attempt_expiration), field=models.IntegerField(
default=openlobby.core.models.get_login_attempt_expiration
), ),
)
] ]
...@@ -5,21 +5,12 @@ from django.db import migrations ...@@ -5,21 +5,12 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("core", "0006_auto_20180208_1544")]
('core', '0006_auto_20180208_1544'),
]
operations = [ operations = [
migrations.RemoveField( migrations.RemoveField(
model_name='openidclient', model_name="openidclient", name="authorization_endpoint"
name='authorization_endpoint',
),
migrations.RemoveField(
model_name='openidclient',
name='token_endpoint',
),
migrations.RemoveField(
model_name='openidclient',
name='userinfo_endpoint',
), ),
migrations.RemoveField(model_name="openidclient", name="token_endpoint"),
migrations.RemoveField(model_name="openidclient", name="userinfo_endpoint"),
] ]
...@@ -5,14 +5,12 @@ from django.db import migrations, models ...@@ -5,14 +5,12 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("core", "0007_auto_20180209_1809")]
('core', '0007_auto_20180209_1809'),
]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='loginattempt', model_name="loginattempt",
name='openid_uid', name="openid_uid",
field=models.CharField(max_length=255, null=True), field=models.CharField(max_length=255, null=True),
), )
] ]
...@@ -5,14 +5,12 @@ from django.db import migrations, models ...@@ -5,14 +5,12 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("core", "0008_loginattempt_openid_uid")]
('core', '0008_loginattempt_openid_uid'),
]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name="user",
name='openid_uid', name="openid_uid",
field=models.CharField(max_length=255, null=True), field=models.CharField(max_length=255, null=True),
), )
] ]
...@@ -5,14 +5,12 @@ from django.db import migrations, models ...@@ -5,14 +5,12 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("core", "0009_auto_20180217_1850")]
('core', '0009_auto_20180217_1850'),
]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name="user",
name='has_colliding_name', name="has_colliding_name",
field=models.BooleanField(default=False), field=models.BooleanField(default=False),
), )
] ]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment