Tests / starter_packs/tests.py
TestOwnerManagement::test_invite_twice_does_not_duplicate
First seen 13 hours ago in 0c23747
CI
github-actions:test
4 runs
Average
224 ms
median 252 ms
max 282 ms
max 282 ms
Phases
Setup 2 ms
Call 223 ms
Teardown 0.34 ms
Categories
Database 58 ms
App code 0.90 ms
Other (Libraries, Templates, Unsampled, pytest, ...) 166 ms
40 database queries per run
Needs 2 KB of memory (max 8 KB)
Duration per run
Where the time goes
Latest run in ci:github-actions:test, 7 hours ago ·
open run
call110 ms98.8%
TestOwnerManagement.test_invite_twice_does_not_duplicatestarter_packs/tests.py:514 self.client.post(reverse("invite_owner", args=[self.pack.slug, self.friend.id]))78 ms70.2%
Client.postdjango/test/client.py:116276 ms68.8%
RequestFactory.postdjango/test/client.py:49976 ms68.8%
RequestFactory.genericdjango/test/client.py:67176 ms68.8%
Client.requestdjango/test/client.py:109176 ms68.8%
ClientHandler.__call__django/test/client.py:17362 ms55.9%
BaseHandler.load_middlewaredjango/core/handlers/base.py:6362 ms55.9%
__init____init__:-162 ms55.9%
WhiteNoiseMiddleware.__init__whitenoise/middleware.py:10462 ms55.9%
WhiteNoise.add_fileswhitenoise/base.py:10862 ms55.9%
WhiteNoise.update_files_dictionarywhitenoise/base.py:12044 ms40.1%
WhiteNoise.add_file_to_dictionarywhitenoise/base.py:13144 ms40.1%
WhiteNoise.get_static_filewhitenoise/base.py:21738 ms34.4%
StaticFile.__init__whitenoise/responders.py:7713 ms11.5%
StaticFile.get_alternativeswhitenoise/responders.py:2065 ms4.3%
compile<stdlib>/re/__init__.py:2913 ms2.9%
_compile<stdlib>/re/__init__.py:3343 ms2.9%
StaticFile.get_alternativeswhitenoise/responders.py:2005 ms4.3%
__init____init__:-12 ms1.4%
Headers.__init__<stdlib>/wsgiref/headers.py:432 ms1.4%
StaticFile.get_alternativeswhitenoise/responders.py:2013 ms2.9%
Headers.__setitem__<stdlib>/wsgiref/headers.py:642 ms1.4%
Headers.__setitem__<stdlib>/wsgiref/headers.py:622 ms1.4%
Headers.__delitem__<stdlib>/wsgiref/headers.py:712 ms1.4%
Headers._convert_string_type<stdlib>/wsgiref/headers.py:502 ms1.4%
StaticFile.__init__whitenoise/responders.py:7211 ms10.0%
StaticFile.get_file_statswhitenoise/responders.py:16111 ms10.0%
__init____init__:-111 ms10.0%
FileEntry.__init__whitenoise/responders.py:26311 ms10.0%
FileEntry.stat_regular_filewhitenoise/responders.py:27611 ms10.0%
<GC>~11 ms10.0%
StaticFile.__init__whitenoise/responders.py:738 ms7.2%
StaticFile.get_headerswhitenoise/responders.py:1765 ms4.3%
formatdate<stdlib>/email/utils.py:2663 ms2.9%
format_datetime<stdlib>/email/utils.py:2842 ms1.4%
_format_timetuple_and_zone<stdlib>/email/utils.py:2312 ms1.4%
StaticFile.get_headerswhitenoise/responders.py:1802 ms1.4%
StaticFile.__init__whitenoise/responders.py:765 ms4.3%
StaticFile.get_not_modified_responsewhitenoise/responders.py:1893 ms2.9%
StaticFile.get_not_modified_responsewhitenoise/responders.py:1882 ms1.4%
StaticFile.__init__whitenoise/responders.py:752 ms1.4%
Headers.__getitem__<stdlib>/wsgiref/headers.py:832 ms1.4%
Headers.get<stdlib>/wsgiref/headers.py:1062 ms1.4%
WhiteNoise.get_static_filewhitenoise/base.py:2126 ms5.7%
WhiteNoise.add_cache_headerswhitenoise/base.py:2333 ms2.9%
WhiteNoiseMiddleware.immutable_file_testwhitenoise/middleware.py:1763 ms2.9%
WhiteNoiseMiddleware.get_static_urlwhitenoise/middleware.py:1973 ms2.9%
URLMixin.urldebug_toolbar/panels/staticfiles.py:203 ms2.9%
HashedFilesMixin.urldjango/contrib/staticfiles/storage.py:2353 ms2.9%
HashedFilesMixin._urldjango/contrib/staticfiles/storage.py:2072 ms1.4%
HashedFilesMixin._urldjango/contrib/staticfiles/storage.py:2162 ms1.4%
WhiteNoise.update_files_dictionarywhitenoise/base.py:11514 ms12.9%
scantreewhitenoise/base.py:27113 ms11.5%
scantreewhitenoise/base.py:27111 ms10.0%
scantreewhitenoise/base.py:2736 ms5.7%
<GC>~2 ms1.4%
scantreewhitenoise/base.py:2713 ms2.9%
scantreewhitenoise/base.py:2713 ms2.9%
scantreewhitenoise/base.py:2713 ms2.9%
scantreewhitenoise/base.py:2733 ms2.9%
scantreewhitenoise/base.py:2692 ms1.4%
scantreewhitenoise/base.py:2732 ms1.4%
scantreewhitenoise/base.py:2692 ms1.4%
WhiteNoise.update_files_dictionarywhitenoise/base.py:1192 ms1.4%
WhiteNoise.update_files_dictionarywhitenoise/base.py:1172 ms1.4%
ClientHandler.__call__django/test/client.py:18614 ms12.9%
BaseHandler.get_responsedjango/core/handlers/base.py:14214 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
MiddlewareMixin.__call__django/utils/deprecation.py:38014 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
MiddlewareMixin.__call__django/utils/deprecation.py:38014 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
MiddlewareMixin.__call__django/utils/deprecation.py:38014 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
WhiteNoiseMiddleware.__call__whitenoise/middleware.py:12314 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
DebugToolbarMiddleware.__call__debug_toolbar/middleware.py:14514 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
MiddlewareMixin.__call__django/utils/deprecation.py:38014 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
MiddlewareMixin.__call__django/utils/deprecation.py:38014 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
MiddlewareMixin.__call__django/utils/deprecation.py:38014 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
MiddlewareMixin.__call__django/utils/deprecation.py:38014 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
MiddlewareMixin.__call__django/utils/deprecation.py:38014 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
MiddlewareMixin.__call__django/utils/deprecation.py:38014 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
MiddlewareMixin.__call__django/utils/deprecation.py:38014 ms12.9%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5614 ms12.9%
BaseHandler._get_responsedjango/core/handlers/base.py:19914 ms12.9%
require_http_methods.<locals>.decorator.<locals>.innerdjango/views/decorators/http.py:6314 ms12.9%
user_passes_test.<locals>.decorator.<locals>._view_wrapperdjango/contrib/auth/decorators.py:6213 ms11.5%
invite_ownerstarter_packs/views.py:490 return render(request, "owners_updated.html", owners_manager_context(starter_pack, q, error))6 ms5.7%
owners_manager_contextstarter_packs/views.py:417 owners = list(starter_pack.owners.select_related("accountaccess__account").order_by("username"))3 ms2.9%
QuerySet.__iter__django/db/models/query.py:4393 ms2.9%
QuerySet._fetch_alldjango/db/models/query.py:22623 ms2.9%
ModelIterable.__iter__django/db/models/query.py:1033 ms2.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16253 ms2.9%
CursorWrapper.executedjango/db/backends/utils.py:793 ms2.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:923 ms2.9%
CursorWrapper._executedjango/db/backends/utils.py:1053 ms2.9%
Cursor.executepsycopg/cursor.py:1133 ms2.9%
Connection.waitpsycopg/connection.py:4953 ms2.9%
BaseCursor._execute_genpsycopg/_cursor_base.py:2063 ms2.9%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2863 ms2.9%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:783 ms2.9%
owners_manager_contextstarter_packs/views.py:418 invitations = list(3 ms2.9%
QuerySet.__iter__django/db/models/query.py:4393 ms2.9%
QuerySet._fetch_alldjango/db/models/query.py:22623 ms2.9%
ModelIterable.__iter__django/db/models/query.py:1033 ms2.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16122 ms1.4%
SQLCompiler.as_sqldjango/db/models/sql/compiler.py:7682 ms1.4%
SQLCompiler.pre_sql_setupdjango/db/models/sql/compiler.py:892 ms1.4%
SQLCompiler.setup_querydjango/db/models/sql/compiler.py:782 ms1.4%
SQLCompiler.get_selectdjango/db/models/sql/compiler.py:2652 ms1.4%
SQLCompiler.get_default_columnsdjango/db/models/sql/compiler.py:10002 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms1.4%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms1.4%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms1.4%
invite_ownerstarter_packs/views.py:4742 ms1.4%
get_editable_packstarter_packs/views.py:60 return get_object_or_404(StarterPack, slug=slug, owners=request.user, **extra)2 ms1.4%
get_object_or_404django/shortcuts.py:1002 ms1.4%
QuerySet.getdjango/db/models/query.py:7022 ms1.4%
QuerySet.__len__django/db/models/query.py:4212 ms1.4%
QuerySet._fetch_alldjango/db/models/query.py:22622 ms1.4%
ModelIterable.__iter__django/db/models/query.py:1032 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
invite_ownerstarter_packs/views.py:479 elif starter_pack.owners.filter(pk=user_id).exists():2 ms1.4%
QuerySet.existsdjango/db/models/query.py:14582 ms1.4%
Query.has_resultsdjango/db/models/sql/query.py:6872 ms1.4%
SQLCompiler.has_resultsdjango/db/models/sql/compiler.py:15932 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
invite_ownerstarter_packs/views.py:481 elif starter_pack.invitations.filter(invited_user_id=user_id).exists():2 ms1.4%
invite_ownerstarter_packs/views.py:483 elif starter_pack.owners.count() + starter_pack.invitations.count() >= MAX_OWNERS:2 ms1.4%
create_forward_many_to_many_manager.<locals>.ManyRelatedManager.countdjango/db/models/fields/related_descriptors.py:12962 ms1.4%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.4%
QuerySet.countdjango/db/models/query.py:6772 ms1.4%
Query.get_countdjango/db/models/sql/query.py:6572 ms1.4%
Query.get_aggregationdjango/db/models/sql/query.py:6392 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms1.4%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms1.4%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms1.4%
user_passes_test.<locals>.decorator.<locals>._view_wrapperdjango/contrib/auth/decorators.py:592 ms1.4%
login_required.<locals>.<lambda>django/contrib/auth/decorators.py:822 ms1.4%
new_method_proxy.<locals>.innerdjango/utils/functional.py:2512 ms1.4%
SimpleLazyObject._setupdjango/utils/functional.py:4042 ms1.4%
AuthenticationMiddleware.process_request.<locals>.<lambda>django/contrib/auth/middleware.py:392 ms1.4%
get_userdjango/contrib/auth/middleware.py:192 ms1.4%
get_userdjango/contrib/auth/__init__.py:2872 ms1.4%
_get_user_session_keydjango/contrib/auth/__init__.py:1112 ms1.4%
SessionBase.__getitem__django/contrib/sessions/backends/base.py:552 ms1.4%
SessionBase._get_sessiondjango/contrib/sessions/backends/base.py:2542 ms1.4%
SessionStore.loaddjango/contrib/sessions/backends/db.py:552 ms1.4%
SessionStore._get_session_from_dbdjango/contrib/sessions/backends/db.py:342 ms1.4%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.4%
QuerySet.getdjango/db/models/query.py:7022 ms1.4%
QuerySet.__len__django/db/models/query.py:4212 ms1.4%
QuerySet._fetch_alldjango/db/models/query.py:22622 ms1.4%
ModelIterable.__iter__django/db/models/query.py:1032 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms1.4%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms1.4%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms1.4%
reversedjango/urls/base.py:392 ms1.4%
get_urlconfdjango/urls/base.py:1662 ms1.4%
Local.__getattr__asgiref/local.py:1582 ms1.4%
_CVar.__getattr__asgiref/local.py:562 ms1.4%
_CVar._storageasgiref/local.py:492 ms1.4%
TestOwnerManagement.test_invite_twice_does_not_duplicatestarter_packs/tests.py:513 self.client.force_login(self.owner)16 ms14.3%
ClientMixin.force_logindjango/test/client.py:85816 ms14.3%
ClientMixin._logindjango/test/client.py:88911 ms10.0%
logindjango/contrib/auth/__init__.py:1898 ms7.2%
SessionBase.cycle_keydjango/contrib/sessions/backends/base.py:4405 ms4.3%
SessionStore.deletedjango/contrib/sessions/backends/db.py:1755 ms4.3%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:873 ms2.9%
QuerySet.getdjango/db/models/query.py:6922 ms1.4%
QuerySet.filterdjango/db/models/query.py:16762 ms1.4%
QuerySet._filter_or_excludedjango/db/models/query.py:16892 ms1.4%
QuerySet._chaindjango/db/models/query.py:22342 ms1.4%
QuerySet._clonedjango/db/models/query.py:22472 ms1.4%
Query.chaindjango/db/models/sql/query.py:4382 ms1.4%
Query.clonedjango/db/models/sql/query.py:3962 ms1.4%
QuerySet.getdjango/db/models/query.py:7022 ms1.4%
QuerySet.__len__django/db/models/query.py:4212 ms1.4%
QuerySet._fetch_alldjango/db/models/query.py:22622 ms1.4%
ModelIterable.__iter__django/db/models/query.py:1032 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
Model.deletedjango/db/models/base.py:13312 ms1.4%
Collector.deletedjango/db/models/deletion.py:4832 ms1.4%
DeleteQuery.delete_batchdjango/db/models/sql/subqueries.py:432 ms1.4%
DeleteQuery.do_querydjango/db/models/sql/subqueries.py:252 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms1.4%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms1.4%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms1.4%
SessionBase.cycle_keydjango/contrib/sessions/backends/base.py:4373 ms2.9%
SessionStore.createdjango/contrib/sessions/backends/db.py:702 ms1.4%
SessionBase._get_new_session_keydjango/contrib/sessions/backends/base.py:2012 ms1.4%
SessionStore.existsdjango/contrib/sessions/backends/db.py:632 ms1.4%
QuerySet.existsdjango/db/models/query.py:14582 ms1.4%
Query.has_resultsdjango/db/models/sql/query.py:6872 ms1.4%
SQLCompiler.has_resultsdjango/db/models/sql/compiler.py:15932 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
SessionStore.createdjango/contrib/sessions/backends/db.py:742 ms1.4%
SessionStore.savedjango/contrib/sessions/backends/db.py:1262 ms1.4%
Atomic.__enter__django/db/transaction.py:2232 ms1.4%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:262 ms1.4%
BaseDatabaseWrapper.savepointdjango/db/backends/base/base.py:4002 ms1.4%
BaseDatabaseWrapper._savepointdjango/db/backends/base/base.py:3672 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1032 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2052 ms1.4%
BaseCursor._convert_querypsycopg/_cursor_base.py:4652 ms1.4%
PostgresClientQuery.convertpsycopg/_queries.py:2732 ms1.4%
PostgresQuery._ensure_bytespsycopg/_queries.py:1672 ms1.4%
conn_encodingpsycopg/_encodings.py:872 ms1.4%
logindjango/contrib/auth/__init__.py:1772 ms1.4%
SessionBase.__contains__django/contrib/sessions/backends/base.py:522 ms1.4%
SessionBase._get_sessiondjango/contrib/sessions/backends/base.py:2542 ms1.4%
SessionStore.loaddjango/contrib/sessions/backends/db.py:552 ms1.4%
SessionStore._get_session_from_dbdjango/contrib/sessions/backends/db.py:342 ms1.4%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.4%
QuerySet.getdjango/db/models/query.py:7022 ms1.4%
QuerySet.__len__django/db/models/query.py:4212 ms1.4%
QuerySet._fetch_alldjango/db/models/query.py:22622 ms1.4%
ModelIterable.__iter__django/db/models/query.py:1032 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16122 ms1.4%
SQLCompiler.as_sqldjango/db/models/sql/compiler.py:7962 ms1.4%
SQLCompiler.compiledjango/db/models/sql/compiler.py:5792 ms1.4%
WhereNode.as_sqldjango/db/models/sql/where.py:1512 ms1.4%
SQLCompiler.compiledjango/db/models/sql/compiler.py:5792 ms1.4%
BuiltinLookup.as_sqldjango/db/models/lookups.py:2432 ms1.4%
BuiltinLookup.process_lhsdjango/db/models/lookups.py:2352 ms1.4%
Lookup.process_lhsdjango/db/models/lookups.py:1102 ms1.4%
SQLCompiler.compiledjango/db/models/sql/compiler.py:5752 ms1.4%
logindjango/contrib/auth/__init__.py:1982 ms1.4%
Signal.senddjango/dispatch/dispatcher.py:2492 ms1.4%
update_last_logindjango/contrib/auth/models.py:242 ms1.4%
AbstractBaseUser.savedjango/contrib/auth/base_user.py:622 ms1.4%
Model.savedjango/db/models/base.py:9042 ms1.4%
Model.save_basedjango/db/models/base.py:9962 ms1.4%
Model._save_tabledjango/db/models/base.py:11402 ms1.4%
Model._do_updatedjango/db/models/base.py:12442 ms1.4%
QuerySet._updatedjango/db/models/query.py:14482 ms1.4%
SQLUpdateCompiler.execute_returning_sqldjango/db/models/sql/compiler.py:21502 ms1.4%
SQLUpdateCompiler.execute_sqldjango/db/models/sql/compiler.py:21212 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
ClientMixin._logindjango/test/client.py:8843 ms2.9%
ClientMixin.sessiondjango/test/client.py:8153 ms2.9%
SessionStore.savedjango/contrib/sessions/backends/db.py:1213 ms2.9%
SessionStore.createdjango/contrib/sessions/backends/db.py:702 ms1.4%
SessionBase._get_new_session_keydjango/contrib/sessions/backends/base.py:2012 ms1.4%
SessionStore.existsdjango/contrib/sessions/backends/db.py:632 ms1.4%
QuerySet.existsdjango/db/models/query.py:14582 ms1.4%
Query.has_resultsdjango/db/models/sql/query.py:6872 ms1.4%
SQLCompiler.has_resultsdjango/db/models/sql/compiler.py:15932 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
SessionStore.createdjango/contrib/sessions/backends/db.py:742 ms1.4%
SessionStore.savedjango/contrib/sessions/backends/db.py:1262 ms1.4%
Atomic.__exit__django/db/transaction.py:2402 ms1.4%
ClientMixin._logindjango/test/client.py:8912 ms1.4%
SessionStore.savedjango/contrib/sessions/backends/db.py:1272 ms1.4%
Model.savedjango/db/models/base.py:9042 ms1.4%
Model.save_basedjango/db/models/base.py:9962 ms1.4%
Model._save_tabledjango/db/models/base.py:11402 ms1.4%
Model._do_updatedjango/db/models/base.py:12442 ms1.4%
QuerySet._updatedjango/db/models/query.py:14482 ms1.4%
SQLUpdateCompiler.execute_returning_sqldjango/db/models/sql/compiler.py:21502 ms1.4%
SQLUpdateCompiler.execute_sqldjango/db/models/sql/compiler.py:21212 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms1.4%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms1.4%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms1.4%
TestOwnerManagement.test_invite_twice_does_not_duplicatestarter_packs/tests.py:515 self.client.post(reverse("invite_owner", args=[self.pack.slug, self.friend.id]))10 ms8.6%
Client.postdjango/test/client.py:116210 ms8.6%
RequestFactory.postdjango/test/client.py:49910 ms8.6%
RequestFactory.genericdjango/test/client.py:67110 ms8.6%
Client.requestdjango/test/client.py:109110 ms8.6%
ClientHandler.__call__django/test/client.py:18610 ms8.6%
BaseHandler.get_responsedjango/core/handlers/base.py:14210 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
MiddlewareMixin.__call__django/utils/deprecation.py:38010 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
MiddlewareMixin.__call__django/utils/deprecation.py:38010 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
MiddlewareMixin.__call__django/utils/deprecation.py:38010 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
WhiteNoiseMiddleware.__call__whitenoise/middleware.py:12310 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
DebugToolbarMiddleware.__call__debug_toolbar/middleware.py:14510 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
MiddlewareMixin.__call__django/utils/deprecation.py:38010 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
MiddlewareMixin.__call__django/utils/deprecation.py:38010 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
MiddlewareMixin.__call__django/utils/deprecation.py:38010 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
MiddlewareMixin.__call__django/utils/deprecation.py:38010 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
MiddlewareMixin.__call__django/utils/deprecation.py:38010 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
MiddlewareMixin.__call__django/utils/deprecation.py:38010 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
MiddlewareMixin.__call__django/utils/deprecation.py:38010 ms8.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5610 ms8.6%
BaseHandler._get_responsedjango/core/handlers/base.py:19910 ms8.6%
require_http_methods.<locals>.decorator.<locals>.innerdjango/views/decorators/http.py:6310 ms8.6%
user_passes_test.<locals>.decorator.<locals>._view_wrapperdjango/contrib/auth/decorators.py:628 ms7.2%
invite_ownerstarter_packs/views.py:4743 ms2.9%
get_editable_packstarter_packs/views.py:60 return get_object_or_404(StarterPack, slug=slug, owners=request.user, **extra)3 ms2.9%
get_object_or_404django/shortcuts.py:1003 ms2.9%
QuerySet.getdjango/db/models/query.py:6922 ms1.4%
QuerySet.filterdjango/db/models/query.py:16762 ms1.4%
QuerySet._filter_or_excludedjango/db/models/query.py:16942 ms1.4%
QuerySet._filter_or_exclude_inplacedjango/db/models/query.py:17042 ms1.4%
Query.add_qdjango/db/models/sql/query.py:16812 ms1.4%
Query._add_qdjango/db/models/sql/query.py:17282 ms1.4%
QuerySet.getdjango/db/models/query.py:7022 ms1.4%
QuerySet.__len__django/db/models/query.py:4212 ms1.4%
QuerySet._fetch_alldjango/db/models/query.py:22622 ms1.4%
ModelIterable.__iter__django/db/models/query.py:1032 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms1.4%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms1.4%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms1.4%
invite_ownerstarter_packs/views.py:490 return render(request, "owners_updated.html", owners_manager_context(starter_pack, q, error))3 ms2.9%
owners_manager_contextstarter_packs/views.py:417 owners = list(starter_pack.owners.select_related("accountaccess__account").order_by("username"))2 ms1.4%
QuerySet.__iter__django/db/models/query.py:4392 ms1.4%
QuerySet._fetch_alldjango/db/models/query.py:22622 ms1.4%
ModelIterable.__iter__django/db/models/query.py:1032 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms1.4%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms1.4%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms1.4%
owners_manager_contextstarter_packs/views.py:418 invitations = list(2 ms1.4%
QuerySet.__iter__django/db/models/query.py:4392 ms1.4%
QuerySet._fetch_alldjango/db/models/query.py:22622 ms1.4%
ModelIterable.__iter__django/db/models/query.py:1032 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms1.4%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms1.4%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms1.4%
invite_ownerstarter_packs/views.py:479 elif starter_pack.owners.filter(pk=user_id).exists():2 ms1.4%
QuerySet.existsdjango/db/models/query.py:14582 ms1.4%
Query.has_resultsdjango/db/models/sql/query.py:6872 ms1.4%
SQLCompiler.has_resultsdjango/db/models/sql/compiler.py:15932 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
user_passes_test.<locals>.decorator.<locals>._view_wrapperdjango/contrib/auth/decorators.py:592 ms1.4%
login_required.<locals>.<lambda>django/contrib/auth/decorators.py:822 ms1.4%
new_method_proxy.<locals>.innerdjango/utils/functional.py:2512 ms1.4%
SimpleLazyObject._setupdjango/utils/functional.py:4042 ms1.4%
AuthenticationMiddleware.process_request.<locals>.<lambda>django/contrib/auth/middleware.py:392 ms1.4%
get_userdjango/contrib/auth/middleware.py:192 ms1.4%
get_userdjango/contrib/auth/__init__.py:2872 ms1.4%
_get_user_session_keydjango/contrib/auth/__init__.py:1112 ms1.4%
SessionBase.__getitem__django/contrib/sessions/backends/base.py:552 ms1.4%
SessionBase._get_sessiondjango/contrib/sessions/backends/base.py:2542 ms1.4%
SessionStore.loaddjango/contrib/sessions/backends/db.py:552 ms1.4%
SessionStore._get_session_from_dbdjango/contrib/sessions/backends/db.py:342 ms1.4%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.4%
QuerySet.getdjango/db/models/query.py:7022 ms1.4%
QuerySet.__len__django/db/models/query.py:4212 ms1.4%
QuerySet._fetch_alldjango/db/models/query.py:22622 ms1.4%
ModelIterable.__iter__django/db/models/query.py:1032 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms1.4%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms1.4%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms1.4%
TestOwnerManagement.test_invite_twice_does_not_duplicatestarter_packs/tests.py:516 self.assertEqual(self.pack.invitations.filter(invited_user=self.friend).count(), 1)2 ms1.4%
QuerySet.countdjango/db/models/query.py:6772 ms1.4%
Query.get_countdjango/db/models/sql/query.py:6572 ms1.4%
Query.get_aggregationdjango/db/models/sql/query.py:6392 ms1.4%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
TransactionTestCase._post_teardowndjango/test/testcases.py:1243 self._fixture_teardown()2 ms1.4%
TestCase._fixture_teardowndjango/test/testcases.py:14982 ms1.4%
DatabaseWrapper.check_constraintsdjango/db/backends/postgresql/base.py:4952 ms1.4%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.4%
CursorWrapper._executedjango/db/backends/utils.py:1032 ms1.4%
Cursor.executepsycopg/cursor.py:1132 ms1.4%
Connection.waitpsycopg/connection.py:4952 ms1.4%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms1.4%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms1.4%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms1.4%
teardown0.30 ms0.3%
Estimated from 70 samples; phase durations are exact. Frames from pytest and pluggy are
hidden
.
Hot lines in your code
|
starter_packs/tests.py:514
self.client.post(reverse("invite_owner", args=[self.pack.slug, self.friend.id]))
TestOwnerManagement.test_invite_twice_does_not_duplicate
· Libraries
|
65 ms |
|
starter_packs/tests.py:513
self.client.force_login(self.owner)
TestOwnerManagement.test_invite_twice_does_not_duplicate
· Database
|
16 ms |
|
starter_packs/views.py:417
owners = list(starter_pack.owners.select_related("accountaccess__account").order_by("username"))
owners_manager_context
· Database
|
5 ms |
|
starter_packs/views.py:60
return get_object_or_404(StarterPack, slug=slug, owners=request.user, **extra)
get_editable_pack
· Database
|
5 ms |
|
starter_packs/views.py:418
invitations = list(
owners_manager_context
· Database
|
5 ms |
|
starter_packs/views.py:479
elif starter_pack.owners.filter(pk=user_id).exists():
invite_owner
· Database
|
3 ms |
|
starter_packs/views.py:481
elif starter_pack.invitations.filter(invited_user_id=user_id).exists():
invite_owner
· App code
|
2 ms |
|
starter_packs/views.py:483
elif starter_pack.owners.count() + starter_pack.invitations.count() >= MAX_OWNERS:
invite_owner
· Database
|
2 ms |
|
starter_packs/tests.py:515
self.client.post(reverse("invite_owner", args=[self.pack.slug, self.friend.id]))
TestOwnerManagement.test_invite_twice_does_not_duplicate
· Database
|
2 ms |
|
starter_packs/tests.py:516
self.assertEqual(self.pack.invitations.filter(invited_user=self.friend).count(), 1)
TestOwnerManagement.test_invite_twice_does_not_duplicate
· Database
|
2 ms |
Fixtures
Exact setup time| _dj_autoclear_mailbox function | 0.05 ms |
| _django_set_urlconf function | 0.05 ms |
| _template_string_if_invalid_marker function | 0.04 ms |
| _live_server_helper function | 0.03 ms |
| _django_db_marker function | 0.03 ms |
| _django_isolate_apps function | 0.03 ms |
| _django_clear_site_cache function | 0.02 ms |
| monkeypatch function | 0.02 ms |
Database
40 queries · 19 ms
Repeated queries are usually N+1 lookups: fetch them once with select_related / prefetch_related (or selectinload).
3×
SELECT "django_session"."session_key", "django_session"."session_data", "django_session"."expire_date" FROM "django_session" WHERE ("django_session"."expire_date" > %s AND "django_session"."session_key" = %s) LIMIT ?
Biggest pieces of work
|
call test body
starter_packs/tests.py:514
|
105 ms |
| call pytest internals | 3 ms |
|
call _post_teardown
django/test/testcases.py:1243
|
2 ms |
| teardown pytest internals | 0.30 ms |
Reliability
5 results · 0 CI failures · 0 local failuresThis test hasn't failed recently.
History
Latest 5 results, oldest first in the strip| When | Environment | Outcome | Duration | |
|---|---|---|---|---|
| 7 hours ago | CI github-actions:test | passed | 111 ms | Profile |
| 8 hours ago | CI github-actions:test | passed | 269 ms | Profile |
| 8 hours ago | CI github-actions:test | passed | 282 ms | Profile |
| 13 hours ago | CI github-actions:test | passed | 236 ms | Profile |
| 13 hours ago | CI github-actions:test | passed | 122 ms | Run |