Coverage for app/venv/lib/python3.14/site-packages/weblate/memory/migrations/0001_squashed_weblate_5.py: 39%

30 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 07:15 +0000

1# Copyright © Michal Čihař <michal@weblate.org> 

2# 

3# SPDX-License-Identifier: GPL-3.0-or-later 

4 

5# Generated by Django 4.2.5 on 2023-09-18 08:24 

6 

7import django.db.models.deletion 

8from django.conf import settings 

9from django.core.exceptions import ImproperlyConfigured 

10from django.db import migrations, models 

11 

12 

13def create_index(apps, schema_editor) -> None: 

14 vendor = schema_editor.connection.vendor 

15 if vendor == "postgresql": 15 ↛ 21line 15 didn't jump to line 21 because the condition on line 15 was always true

16 # Fulltext for translation memory search 

17 schema_editor.execute( 

18 "CREATE INDEX memory_source_trgm ON memory_memory USING GIN " 

19 "(source gin_trgm_ops, target_language_id, source_language_id)" 

20 ) 

21 elif vendor == "mysql": 

22 # Fulltext for translation memory search 

23 schema_editor.execute( 

24 "CREATE FULLTEXT INDEX memory_source_fulltext ON memory_memory(source)" 

25 ) 

26 # Substring index to faster lookup existing entries instead of MD5 index which is 

27 # not supported on MariaDB 

28 schema_editor.execute( 

29 "CREATE INDEX memory_lookup_index ON " 

30 "memory_memory(source(255), target(255), origin(255))" 

31 ) 

32 else: 

33 msg = f"Unsupported database: {vendor}" 

34 raise ImproperlyConfigured(msg) 

35 

36 

37def drop_index(apps, schema_editor) -> None: 

38 vendor = schema_editor.connection.vendor 

39 if vendor == "postgresql": 

40 schema_editor.execute("DROP INDEX memory_source_trgm") 

41 schema_editor.execute("DROP INDEX memory_source_index") 

42 schema_editor.execute("DROP INDEX memory_target_index") 

43 schema_editor.execute("DROP INDEX memory_origin_index") 

44 elif vendor == "mysql": 

45 schema_editor.execute( 

46 "ALTER TABLE memory_memory DROP INDEX memory_source_fulltext" 

47 ) 

48 schema_editor.execute( 

49 "ALTER TABLE memory_memory DROP INDEX memory_lookup_index" 

50 ) 

51 else: 

52 msg = f"Unsupported database: {vendor}" 

53 raise ImproperlyConfigured(msg) 

54 

55 

56class Migration(migrations.Migration): 

57 replaces = [ 

58 ("memory", "0001_squashed_0006_memory_update"), 

59 ("memory", "0007_use_trigram"), 

60 ("memory", "0008_adjust_similarity"), 

61 ("memory", "0009_pg_index"), 

62 ("memory", "0010_auto_20210506_1439"), 

63 ("memory", "0011_alter_memory_options"), 

64 ("memory", "0012_remove_blank"), 

65 ("memory", "0013_reindex"), 

66 ("memory", "0014_rename_index"), 

67 ("memory", "0015_remove_blank"), 

68 ("memory", "0016_remove_blank"), 

69 ] 

70 

71 initial = True 

72 

73 dependencies = [ 

74 ("weblate_auth", "0002_squashed_weblate_5"), 

75 ("lang", "0001_squashed_weblate_5"), 

76 ("trans", "0001_squashed_weblate_5"), 

77 migrations.swappable_dependency(settings.AUTH_USER_MODEL), 

78 ] 

79 

80 operations = [ 

81 migrations.CreateModel( 

82 name="Memory", 

83 fields=[ 

84 ( 

85 "id", 

86 models.AutoField( 

87 auto_created=True, 

88 primary_key=True, 

89 serialize=False, 

90 verbose_name="ID", 

91 ), 

92 ), 

93 ("source", models.TextField()), 

94 ("target", models.TextField()), 

95 ("origin", models.TextField()), 

96 ("from_file", models.BooleanField(default=False)), 

97 ("shared", models.BooleanField(default=False)), 

98 ( 

99 "project", 

100 models.ForeignKey( 

101 blank=True, 

102 default=None, 

103 null=True, 

104 on_delete=django.db.models.deletion.CASCADE, 

105 to="trans.project", 

106 ), 

107 ), 

108 ( 

109 "source_language", 

110 models.ForeignKey( 

111 on_delete=django.db.models.deletion.CASCADE, 

112 related_name="memory_source_set", 

113 to="lang.language", 

114 ), 

115 ), 

116 ( 

117 "target_language", 

118 models.ForeignKey( 

119 on_delete=django.db.models.deletion.CASCADE, 

120 related_name="memory_target_set", 

121 to="lang.language", 

122 ), 

123 ), 

124 ( 

125 "user", 

126 models.ForeignKey( 

127 blank=True, 

128 default=None, 

129 null=True, 

130 on_delete=django.db.models.deletion.CASCADE, 

131 to=settings.AUTH_USER_MODEL, 

132 ), 

133 ), 

134 ], 

135 options={ 

136 "verbose_name": "Translation memory entry", 

137 "verbose_name_plural": "Translation memory entries", 

138 }, 

139 ), 

140 migrations.RunPython( 

141 code=create_index, 

142 reverse_code=drop_index, 

143 atomic=False, 

144 elidable=False, 

145 ), 

146 ]