flakytest.dev anze3db flakytest
Tests / apps/api/tests.py

ProfileUploadTest::test_the_same_upload_twice_changes_nothing

First seen 8 hours ago in 78a4357
CI github-actions:test 5 runs
Average
86 ms
median 86 ms
max 121 ms
Phases
Setup 0.88 ms Call 85 ms Teardown 0.24 ms
Categories
Database 58 ms App code 1 ms Other (Libraries, Serialization, Unsampled, pytest) 27 ms

68 database queries per run

Needs 81 KB of memory (max 156 KB)

Duration per run

Where the time goes

Latest run in ci:github-actions:test, an hour ago · open run
Show pytest frames
call85 ms98.8%
ProfileUploadTest.test_the_same_upload_twice_changes_nothingapps/api/tests.py:860 first = self.upload(document).json()73 ms85.7%
ProfileUploadTest.uploadapps/api/tests.py:49546 ms54.0%
_SharedTaskProxy.__call__potatoq/app.py:76346 ms54.0%
Task.__call__potatoq/task.py:18946 ms54.0%
process_profileapps/api/tasks.py:23926 ms29.8%
process_profile_partapps/projects/profiles.py:342 profile = claim_part(part, document)13 ms14.9%
claim_partapps/projects/profiles.py:3783 ms3.7%
get_or_create_environmentapps/projects/environments.py:63 obj, created = Environment.objects.get_or_create(3 ms3.7%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:873 ms3.7%
QuerySet.get_or_createdjango/db/models/query.py:9872 ms1.9%
QuerySet.getdjango/db/models/query.py:6352 ms1.9%
QuerySet.__len__django/db/models/query.py:3722 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
QuerySet.get_or_createdjango/db/models/query.py:9942 ms1.9%
QuerySet.createdjango/db/models/query.py:6692 ms1.9%
Model.savedjango/db/models/base.py:8742 ms1.9%
Model.save_basedjango/db/models/base.py:9662 ms1.9%
Model._save_tabledjango/db/models/base.py:11672 ms1.9%
Model._do_insertdjango/db/models/base.py:12182 ms1.9%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.9%
QuerySet._insertdjango/db/models/query.py:19182 ms1.9%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19252 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
claim_partapps/projects/profiles.py:383 commit, _ = Commit.objects.get_or_create(3 ms3.7%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:873 ms3.7%
QuerySet.get_or_createdjango/db/models/query.py:9872 ms1.9%
QuerySet.getdjango/db/models/query.py:6352 ms1.9%
QuerySet.__len__django/db/models/query.py:3722 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
QuerySet.get_or_createdjango/db/models/query.py:9942 ms1.9%
QuerySet.createdjango/db/models/query.py:6692 ms1.9%
Model.savedjango/db/models/base.py:8742 ms1.9%
Model.save_basedjango/db/models/base.py:9662 ms1.9%
Model._save_tabledjango/db/models/base.py:11672 ms1.9%
Model._do_insertdjango/db/models/base.py:12182 ms1.9%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.9%
QuerySet._insertdjango/db/models/query.py:19182 ms1.9%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19252 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
claim_partapps/projects/profiles.py:358 profile = Profile.objects.select_for_update(no_key=True).get(pk=part.profile_id)2 ms1.9%
QuerySet.getdjango/db/models/query.py:6352 ms1.9%
QuerySet.__len__django/db/models/query.py:3722 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
claim_partapps/projects/profiles.py:360 ProfilePart.objects.filter(profile=profile, index=part.index, id__lt=part.id).delete() # superseded uploads2 ms1.9%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.9%
QuerySet.filterdjango/db/models/query.py:15422 ms1.9%
QuerySet._filter_or_excludedjango/db/models/query.py:15602 ms1.9%
QuerySet._filter_or_exclude_inplacedjango/db/models/query.py:15702 ms1.9%
Query.add_qdjango/db/models/sql/query.py:16712 ms1.9%
Query._add_qdjango/db/models/sql/query.py:17032 ms1.9%
Query.build_filterdjango/db/models/sql/query.py:16112 ms1.9%
claim_partapps/projects/profiles.py:376 project = profile.project2 ms1.9%
ForwardManyToOneDescriptor.__get__django/db/models/fields/related_descriptors.py:2572 ms1.9%
ForwardManyToOneDescriptor.get_objectdjango/db/models/fields/related_descriptors.py:2222 ms1.9%
QuerySet.getdjango/db/models/query.py:6352 ms1.9%
QuerySet.__len__django/db/models/query.py:3722 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
claim_partapps/projects/profiles.py:4462 ms1.9%
Profile.saveapps/projects/models.py:466 super().save(*args, **kwargs)2 ms1.9%
Model.savedjango/db/models/base.py:8742 ms1.9%
Model.save_basedjango/db/models/base.py:9662 ms1.9%
Model._save_tabledjango/db/models/base.py:11102 ms1.9%
Model._do_updatedjango/db/models/base.py:12112 ms1.9%
QuerySet._updatedjango/db/models/query.py:13272 ms1.9%
SQLUpdateCompiler.execute_returning_sqldjango/db/models/sql/compiler.py:21402 ms1.9%
SQLUpdateCompiler.execute_sqldjango/db/models/sql/compiler.py:21112 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
BaseCursor._execute_genpsycopg/_cursor_base.py:2052 ms1.9%
BaseCursor._convert_querypsycopg/_cursor_base.py:4652 ms1.9%
PostgresClientQuery.convertpsycopg/_queries.py:2892 ms1.9%
PostgresClientQuery.dumppsycopg/_queries.py:2992 ms1.9%
PostgresClientQuery.dump.<locals>.<genexpr>psycopg/_queries.py:3002 ms1.9%
process_profile_partapps/projects/profiles.py:3445 ms5.6%
upsert_testsapps/projects/profiles.py:4515 ms5.6%
TestManager.upsertapps/projects/models.py:2293 ms3.7%
TestManager.slugs_forapps/projects/models.py:240 existing = dict(self.filter(project_id=project_id, name__in=names).values_list("name", "slug"))2 ms1.9%
TestManager.slugs_forapps/projects/models.py:242 taken = set(self.filter(project_id=project_id, slug__in=set(new.values())).values_list("slug", flat=True))2 ms1.9%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.9%
QuerySet.filterdjango/db/models/query.py:15422 ms1.9%
QuerySet._filter_or_excludedjango/db/models/query.py:15602 ms1.9%
QuerySet._filter_or_exclude_inplacedjango/db/models/query.py:15702 ms1.9%
Query.add_qdjango/db/models/sql/query.py:16712 ms1.9%
Query._add_qdjango/db/models/sql/query.py:17032 ms1.9%
Query.build_filterdjango/db/models/sql/query.py:15982 ms1.9%
TestManager.upsertapps/projects/models.py:236 return {test.name: test for test in self.filter(project=project, name__in=names)}2 ms1.9%
QuerySet.__iter__django/db/models/query.py:3902 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16112 ms1.9%
SQLCompiler.as_sqldjango/db/models/sql/compiler.py:7952 ms1.9%
SQLCompiler.compiledjango/db/models/sql/compiler.py:5782 ms1.9%
WhereNode.as_sqldjango/db/models/sql/where.py:1512 ms1.9%
SQLCompiler.compiledjango/db/models/sql/compiler.py:5782 ms1.9%
process_profile_partapps/projects/profiles.py:345 write_perfs(profile, part, entries, tests)3 ms3.7%
write_perfsapps/projects/profiles.py:457 TestPerf.objects.filter(profile=profile, part=part.index).delete()2 ms1.9%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.9%
QuerySet.filterdjango/db/models/query.py:15422 ms1.9%
QuerySet._filter_or_excludedjango/db/models/query.py:15602 ms1.9%
QuerySet._filter_or_exclude_inplacedjango/db/models/query.py:15702 ms1.9%
Query.add_qdjango/db/models/sql/query.py:16712 ms1.9%
Query._add_qdjango/db/models/sql/query.py:17032 ms1.9%
Query.build_filterdjango/db/models/sql/query.py:15772 ms1.9%
write_perfsapps/projects/profiles.py:458 TestPerf.objects.bulk_create(2 ms1.9%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.9%
QuerySet.bulk_createdjango/db/models/query.py:8332 ms1.9%
QuerySet._batched_insertdjango/db/models/query.py:19562 ms1.9%
QuerySet._insertdjango/db/models/query.py:19182 ms1.9%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19252 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
process_profile_partapps/projects/profiles.py:335 part = ProfilePart.objects.filter(pk=part.pk).first()2 ms1.9%
QuerySet.firstdjango/db/models/query.py:11452 ms1.9%
QuerySet.__iter__django/db/models/query.py:3902 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
process_profile_partapps/projects/profiles.py:3412 ms1.9%
load_documentapps/projects/profiles.py:112 return json.loads(gzip.decompress(bytes(part.document)))2 ms1.9%
loads<stdlib>/json/__init__.py:3712 ms1.9%
JSONDecoder.decode<stdlib>/json/decoder.py:3582 ms1.9%
JSONDecoder.raw_decode<stdlib>/json/decoder.py:3742 ms1.9%
process_profile_partapps/projects/profiles.py:3462 ms1.9%
write_snapshotsapps/projects/profiles.py:313 cursor.executemany(SNAPSHOT_UPSERT, batch)2 ms1.9%
CursorWrapper.executemanydjango/db/backends/utils.py:842 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executemanydjango/db/backends/utils.py:1142 ms1.9%
Cursor.executemanypsycopg/cursor.py:1372 ms1.9%
Connection._pipeline_nolockpsycopg/connection.py:4722 ms1.9%
Pipeline.__exit__psycopg/_pipeline.py:732 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
process_profileapps/api/tasks.py:25318 ms20.5%
_SharedTaskProxy.__call__potatoq/app.py:76318 ms20.5%
Task.__call__potatoq/task.py:18918 ms20.5%
finalize_profile_partsapps/api/tasks.py:259 if finalize_profile(profile_id):16 ms18.6%
finalize_profileapps/projects/profiles.py:4965 ms5.6%
add_perfsapps/projects/rollups.py:88 TestDailyStats.objects.bulk_create(3 ms3.7%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:873 ms3.7%
QuerySet.bulk_createdjango/db/models/query.py:8333 ms3.7%
QuerySet._batched_insertdjango/db/models/query.py:19563 ms3.7%
QuerySet._insertdjango/db/models/query.py:19183 ms3.7%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19242 ms1.9%
SQLInsertCompiler.as_sqldjango/db/models/sql/compiler.py:18162 ms1.9%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19252 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
add_perfsapps/projects/rollups.py:30 for perf in perfs:2 ms1.9%
QuerySet.__iter__django/db/models/query.py:3902 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16112 ms1.9%
SQLCompiler.as_sqldjango/db/models/sql/compiler.py:7672 ms1.9%
SQLCompiler.pre_sql_setupdjango/db/models/sql/compiler.py:862 ms1.9%
SQLCompiler.setup_querydjango/db/models/sql/compiler.py:752 ms1.9%
SQLCompiler.get_selectdjango/db/models/sql/compiler.py:3172 ms1.9%
Atomic.__enter__django/db/transaction.py:2112 ms1.9%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:262 ms1.9%
BaseDatabaseWrapper.savepointdjango/db/backends/base/base.py:4002 ms1.9%
BaseDatabaseWrapper._savepointdjango/db/backends/base/base.py:3672 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1032 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
finalize_profileapps/projects/profiles.py:479 profile = Profile.objects.select_for_update(no_key=True).get(pk=profile_id)2 ms1.9%
QuerySet.getdjango/db/models/query.py:6352 ms1.9%
QuerySet.__len__django/db/models/query.py:3722 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
finalize_profileapps/projects/profiles.py:483 for part in ProfilePart.objects.filter(profile=profile).defer("document").order_by("index", "id"):2 ms1.9%
QuerySet.__iter__django/db/models/query.py:3902 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
finalize_profileapps/projects/profiles.py:488 ProfilePart.objects.filter(profile=profile).exclude(pk__in=[part.pk for part in current]).delete()2 ms1.9%
QuerySet.deletedjango/db/models/query.py:12382 ms1.9%
Collector.deletedjango/db/models/deletion.py:4712 ms1.9%
QuerySet._raw_deletedjango/db/models/query.py:12602 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
finalize_profileapps/projects/profiles.py:491 duplicates = rows.values("test").annotate(count=Count("id"), keep=Max("id")).filter(count__gt=1)2 ms1.9%
QuerySet.valuesdjango/db/models/query.py:14142 ms1.9%
QuerySet._valuesdjango/db/models/query.py:14092 ms1.9%
Query.set_valuesdjango/db/models/sql/query.py:25522 ms1.9%
finalize_profileapps/projects/profiles.py:495 Environment.objects.select_for_update(no_key=True).filter(pk=profile.environment_id).first()2 ms1.9%
QuerySet.filterdjango/db/models/query.py:15422 ms1.9%
QuerySet._filter_or_excludedjango/db/models/query.py:15602 ms1.9%
QuerySet._filter_or_exclude_inplacedjango/db/models/query.py:15702 ms1.9%
Query.add_qdjango/db/models/sql/query.py:16712 ms1.9%
finalize_profile_partsapps/api/tasks.py:2602 ms1.9%
Task.delaypotatoq/task.py:2572 ms1.9%
Task.apply_asyncpotatoq/task.py:2812 ms1.9%
Task.build_messagepotatoq/task.py:3442 ms1.9%
process_profileapps/api/tasks.py:237 part = ProfilePart.objects.select_related("profile").get(id=part_id)3 ms3.7%
QuerySet.getdjango/db/models/query.py:6353 ms3.7%
QuerySet.__len__django/db/models/query.py:3723 ms3.7%
QuerySet._fetch_alldjango/db/models/query.py:20003 ms3.7%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16112 ms1.9%
SQLCompiler.as_sqldjango/db/models/sql/compiler.py:7672 ms1.9%
SQLCompiler.pre_sql_setupdjango/db/models/sql/compiler.py:862 ms1.9%
SQLCompiler.setup_querydjango/db/models/sql/compiler.py:752 ms1.9%
SQLCompiler.get_selectdjango/db/models/sql/compiler.py:3172 ms1.9%
ModelIterable.__iter__django/db/models/query.py:1272 ms1.9%
SQLCompiler.results_iterdjango/db/models/sql/compiler.py:15772 ms1.9%
SQLCompiler.get_convertersdjango/db/models/sql/compiler.py:15262 ms1.9%
ProfileUploadTest.uploadapps/api/tests.py:487 response = self.client.post(27 ms31.7%
Client.postdjango/test/client.py:115327 ms31.7%
RequestFactory.postdjango/test/client.py:49927 ms31.7%
RequestFactory.genericdjango/test/client.py:67127 ms31.7%
Client.requestdjango/test/client.py:108227 ms31.7%
ClientHandler.__call__django/test/client.py:17316 ms18.6%
BaseHandler.load_middlewaredjango/core/handlers/base.py:6216 ms18.6%
__init____init__:-114 ms16.8%
WhiteNoiseMiddleware.__init__whitenoise/middleware.py:10414 ms16.8%
WhiteNoise.add_fileswhitenoise/base.py:10814 ms16.8%
WhiteNoise.update_files_dictionarywhitenoise/base.py:12011 ms13.0%
WhiteNoise.add_file_to_dictionarywhitenoise/base.py:13111 ms13.0%
WhiteNoise.get_static_filewhitenoise/base.py:2085 ms5.6%
StaticFile.__init__whitenoise/responders.py:742 ms1.9%
parsedate<stdlib>/email/_parseaddr.py:1852 ms1.9%
StaticFile.__init__whitenoise/responders.py:762 ms1.9%
WhiteNoise.get_static_filewhitenoise/base.py:2035 ms5.6%
WhiteNoise.add_cache_headerswhitenoise/base.py:2245 ms5.6%
WhiteNoiseMiddleware.immutable_file_testwhitenoise/middleware.py:1763 ms3.7%
WhiteNoiseMiddleware.get_static_urlwhitenoise/middleware.py:1973 ms3.7%
URLMixin.urldebug_toolbar/panels/staticfiles.py:203 ms3.7%
HashedFilesMixin.urldjango/contrib/staticfiles/storage.py:2052 ms1.9%
HashedFilesMixin._urldjango/contrib/staticfiles/storage.py:1862 ms1.9%
WhiteNoise.get_static_filewhitenoise/base.py:2022 ms1.9%
WhiteNoise.update_files_dictionarywhitenoise/base.py:1153 ms3.7%
scantreewhitenoise/base.py:2623 ms3.7%
scantreewhitenoise/base.py:2623 ms3.7%
scantreewhitenoise/base.py:2623 ms3.7%
scantreewhitenoise/base.py:2622 ms1.9%
scantreewhitenoise/base.py:2622 ms1.9%
scantreewhitenoise/base.py:2642 ms1.9%
ClientHandler.__call__django/test/client.py:18611 ms13.0%
BaseHandler.get_responsedjango/core/handlers/base.py:14111 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
DebugToolbarMiddleware.__call__debug_toolbar/middleware.py:13011 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
MiddlewareMixin.__call__django/utils/deprecation.py:30911 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
WhiteNoiseMiddleware.__call__whitenoise/middleware.py:12311 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
MiddlewareMixin.__call__django/utils/deprecation.py:30911 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
MiddlewareMixin.__call__django/utils/deprecation.py:30911 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
MiddlewareMixin.__call__django/utils/deprecation.py:30911 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
MiddlewareMixin.__call__django/utils/deprecation.py:30911 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
MiddlewareMixin.__call__django/utils/deprecation.py:30911 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
MiddlewareMixin.__call__django/utils/deprecation.py:30911 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
AccountMiddleware.<locals>.middlewareallauth/account/middleware.py:3411 ms13.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5511 ms13.0%
BaseHandler._get_responsedjango/core/handlers/base.py:19811 ms13.0%
csrf_exempt.<locals>._view_wrapperdjango/views/decorators/csrf.py:6511 ms13.0%
jsonify_errors.<locals>.wrapped_viewapps/api/urls.py:3711 ms13.0%
require_http_methods.<locals>.decorator.<locals>.innerdjango/views/decorators/http.py:6411 ms13.0%
api_request.<locals>.decorator.<locals>.wrapped_viewapps/api/urls.py:756 ms7.5%
profile_uploadapps/api/urls.py:1502 ms1.9%
get_or_create_numberedapps/projects/models.py:24 return model.objects.create(project=project, number=number, **lookup, **(defaults or {})), True2 ms1.9%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.9%
QuerySet.createdjango/db/models/query.py:6672 ms1.9%
Model.__init__django/db/models/base.py:5662 ms1.9%
profile_uploadapps/api/urls.py:152 part = ProfilePart.objects.filter(profile=profile, index=index).order_by("-id").first()2 ms1.9%
QuerySet.firstdjango/db/models/query.py:11452 ms1.9%
QuerySet.__iter__django/db/models/query.py:3902 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
profile_uploadapps/api/urls.py:154 part = ProfilePart.objects.create(2 ms1.9%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.9%
QuerySet.createdjango/db/models/query.py:6692 ms1.9%
Model.savedjango/db/models/base.py:8742 ms1.9%
Model.save_basedjango/db/models/base.py:9662 ms1.9%
Model._save_tabledjango/db/models/base.py:11672 ms1.9%
Model._do_insertdjango/db/models/base.py:12182 ms1.9%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.9%
QuerySet._insertdjango/db/models/query.py:19182 ms1.9%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19252 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
profile_uploadapps/api/urls.py:1632 ms1.9%
Project.urlapps/projects/models.py:59 return reverse(name, args=[self.organization.slug, self.slug, *args])2 ms1.9%
ForwardManyToOneDescriptor.__get__django/db/models/fields/related_descriptors.py:2572 ms1.9%
ForwardManyToOneDescriptor.get_objectdjango/db/models/fields/related_descriptors.py:2222 ms1.9%
QuerySet.getdjango/db/models/query.py:6352 ms1.9%
QuerySet.__len__django/db/models/query.py:3722 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
api_request.<locals>.decorator.<locals>.wrapped_viewapps/api/urls.py:73 touch_token(request.headers.get("Authorization"))3 ms3.7%
touch_tokenapps/api/urls.py:59 SecretTokens.objects.filter(pk__in=list(stale)).update(date_last_used=now)3 ms3.7%
QuerySet.__iter__django/db/models/query.py:3902 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
FlatValuesListIterable.__iter__django/db/models/query.py:2772 ms1.9%
SQLCompiler.results_iterdjango/db/models/sql/compiler.py:15732 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16112 ms1.9%
SQLCompiler.as_sqldjango/db/models/sql/compiler.py:8832 ms1.9%
QuerySet.updatedjango/db/models/query.py:13002 ms1.9%
SQLUpdateCompiler.execute_sqldjango/db/models/sql/compiler.py:21112 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
api_request.<locals>.decorator.<locals>.wrapped_viewapps/api/urls.py:72 project = get_object_or_404(Project, secrettokens__token=request.headers.get("Authorization"))2 ms1.9%
get_object_or_404django/shortcuts.py:902 ms1.9%
QuerySet.getdjango/db/models/query.py:6352 ms1.9%
QuerySet.__len__django/db/models/query.py:3722 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
ProfileUploadTest.test_the_same_upload_twice_changes_nothingapps/api/tests.py:8616 ms7.5%
ProfileUploadTest.uploadapps/api/tests.py:487 response = self.client.post(6 ms7.5%
Client.postdjango/test/client.py:11536 ms7.5%
RequestFactory.postdjango/test/client.py:4996 ms7.5%
RequestFactory.genericdjango/test/client.py:6716 ms7.5%
Client.requestdjango/test/client.py:10826 ms7.5%
ClientHandler.__call__django/test/client.py:1866 ms7.5%
BaseHandler.get_responsedjango/core/handlers/base.py:1416 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
DebugToolbarMiddleware.__call__debug_toolbar/middleware.py:1306 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
MiddlewareMixin.__call__django/utils/deprecation.py:3096 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
WhiteNoiseMiddleware.__call__whitenoise/middleware.py:1236 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
MiddlewareMixin.__call__django/utils/deprecation.py:3096 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
MiddlewareMixin.__call__django/utils/deprecation.py:3096 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
MiddlewareMixin.__call__django/utils/deprecation.py:3096 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
MiddlewareMixin.__call__django/utils/deprecation.py:3096 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
MiddlewareMixin.__call__django/utils/deprecation.py:3096 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
MiddlewareMixin.__call__django/utils/deprecation.py:3096 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
AccountMiddleware.<locals>.middlewareallauth/account/middleware.py:346 ms7.5%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:556 ms7.5%
BaseHandler._get_responsedjango/core/handlers/base.py:1986 ms7.5%
csrf_exempt.<locals>._view_wrapperdjango/views/decorators/csrf.py:656 ms7.5%
jsonify_errors.<locals>.wrapped_viewapps/api/urls.py:376 ms7.5%
require_http_methods.<locals>.decorator.<locals>.innerdjango/views/decorators/http.py:646 ms7.5%
api_request.<locals>.decorator.<locals>.wrapped_viewapps/api/urls.py:755 ms5.6%
profile_uploadapps/api/urls.py:1372 ms1.9%
parse_documentapps/projects/profiles.py:77 document = json.loads(data)2 ms1.9%
loads<stdlib>/json/__init__.py:3712 ms1.9%
JSONDecoder.decode<stdlib>/json/decoder.py:3582 ms1.9%
profile_uploadapps/api/urls.py:1502 ms1.9%
get_or_create_numberedapps/projects/models.py:18 existing = model.objects.filter(project=project, **lookup).first()2 ms1.9%
QuerySet.firstdjango/db/models/query.py:11452 ms1.9%
QuerySet.__iter__django/db/models/query.py:3902 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
profile_uploadapps/api/urls.py:1632 ms1.9%
Project.urlapps/projects/models.py:59 return reverse(name, args=[self.organization.slug, self.slug, *args])2 ms1.9%
ForwardManyToOneDescriptor.__get__django/db/models/fields/related_descriptors.py:2572 ms1.9%
ForwardManyToOneDescriptor.get_objectdjango/db/models/fields/related_descriptors.py:2222 ms1.9%
QuerySet.getdjango/db/models/query.py:6352 ms1.9%
QuerySet.__len__django/db/models/query.py:3722 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
api_request.<locals>.decorator.<locals>.wrapped_viewapps/api/urls.py:72 project = get_object_or_404(Project, secrettokens__token=request.headers.get("Authorization"))2 ms1.9%
get_object_or_404django/shortcuts.py:902 ms1.9%
QuerySet.getdjango/db/models/query.py:6352 ms1.9%
QuerySet.__len__django/db/models/query.py:3722 ms1.9%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms1.9%
ModelIterable.__iter__django/db/models/query.py:952 ms1.9%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
TransactionTestCase._post_teardowndjango/test/testcases.py:1240 self._fixture_teardown()3 ms3.7%
TestCase._fixture_teardowndjango/test/testcases.py:14942 ms1.9%
TestCase._should_check_constraintsdjango/test/testcases.py:15032 ms1.9%
DatabaseWrapper.is_usabledjango/db/backends/postgresql/base.py:4922 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
TestCase._fixture_teardowndjango/test/testcases.py:14952 ms1.9%
DatabaseWrapper.check_constraintsdjango/db/backends/postgresql/base.py:4842 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1032 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
TransactionTestCase._pre_setupdjango/test/testcases.py:1164 cls._fixture_setup()2 ms1.9%
TestCase._fixture_setupdjango/test/testcases.py:14782 ms1.9%
TestCase._enter_atomicsdjango/test/testcases.py:13962 ms1.9%
Atomic.__enter__django/db/transaction.py:2112 ms1.9%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:262 ms1.9%
BaseDatabaseWrapper.savepointdjango/db/backends/base/base.py:4002 ms1.9%
BaseDatabaseWrapper._savepointdjango/db/backends/base/base.py:3672 ms1.9%
CursorWrapper.executedjango/db/backends/utils.py:792 ms1.9%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms1.9%
CursorWrapper._executedjango/db/backends/utils.py:1032 ms1.9%
Cursor.executepsycopg/cursor.py:1132 ms1.9%
Connection.waitpsycopg/connection.py:4952 ms1.9%
teardown0.19 ms0.2%
Estimated from 54 samples; phase durations are exact. Frames from pytest and pluggy are hidden .

Hot lines in your code

apps/api/tests.py:487
response = self.client.post(
ProfileUploadTest.upload · Libraries
16 ms
apps/api/urls.py:72
project = get_object_or_404(Project, secrettokens__token=request.headers.get("Authorization"))
api_request.<locals>.decorator.<locals>.wrapped_view · Database
3 ms
apps/api/urls.py:59
SecretTokens.objects.filter(pk__in=list(stale)).update(date_last_used=now)
touch_token · Database
3 ms
apps/projects/models.py:59
return reverse(name, args=[self.organization.slug, self.slug, *args])
Project.url · Database
3 ms
apps/api/tasks.py:237
part = ProfilePart.objects.select_related("profile").get(id=part_id)
process_profile · Database
3 ms
apps/projects/environments.py:63
obj, created = Environment.objects.get_or_create(
get_or_create_environment · Database
3 ms
apps/projects/profiles.py:383
commit, _ = Commit.objects.get_or_create(
claim_part · Database
3 ms
apps/api/tasks.py:259
if finalize_profile(profile_id):
finalize_profile_parts · Database
3 ms
apps/projects/rollups.py:88
TestDailyStats.objects.bulk_create(
add_perfs · Database
3 ms
apps/projects/models.py:24
return model.objects.create(project=project, number=number, **lookup, **(defaults or {})), True
get_or_create_numbered · Database
2 ms

Fixtures

Exact setup time
_django_clear_site_cache function 0.08 ms
_django_db_marker function 0.05 ms
_template_string_if_invalid_marker function 0.05 ms
_django_set_urlconf function 0.05 ms
_live_server_helper function 0.05 ms
_dj_autoclear_mailbox function 0.04 ms
monkeypatch function 0.03 ms

Database

68 queries · 25 ms

Repeated queries are usually N+1 lookups: fetch them once with select_related / prefetch_related (or selectinload).

5×
SELECT "projects_profilepart"."id", "projects_profilepart"."profile_id", "projects_profilepart"."index", "projects_profilepart"."count", "projects_profilepart"."checksum", "projects_profilepart"."status", "projects_profilepart"."error", "projects_profilepart"."tests_count", "projects_profilepart"."…
4×
SELECT "projects_profile"."id", "projects_profile"."project_id", "projects_profile"."number", "projects_profile"."environment_id", "projects_profile"."session_id", "projects_profile"."run_id", "projects_profile"."commit_id", "projects_profile"."ingest_id", "projects_profile"."external_id", "project…
3×
SELECT "projects_project"."id", "projects_project"."organization_id", "projects_project"."name", "projects_project"."slug", "projects_project"."public", "projects_project"."description", "projects_project"."date_created", "projects_project"."date_updated", "projects_project"."created_by_id" FROM "p…

Biggest pieces of work

call test body
apps/api/tests.py:860
80 ms
call _post_teardown
django/test/testcases.py:1240
3 ms
call _pre_setup
django/test/testcases.py:1164
2 ms
teardown pytest internals 0.19 ms

Reliability

5 results · 0 CI failures · 0 local failures

This test hasn't failed recently.

History

Latest 5 results, oldest first in the strip
When Environment Outcome Duration Commit
an hour ago CI github-actions:test passed 86 ms 9caa567 main Profile
an hour ago CI github-actions:test passed 86 ms ec75501 main Profile
8 hours ago CI github-actions:test passed 121 ms d2c12e5 main Profile
8 hours ago CI github-actions:test passed 49 ms 0b902f6 main Profile
8 hours ago CI github-actions:test passed 88 ms 78a4357 main Profile