simo 2.0.21__py3-none-any.whl → 2.0.22__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of simo might be problematic. Click here for more details.

Binary file
Binary file
Binary file
simo/core/admin.py CHANGED
@@ -269,7 +269,7 @@ class ComponentAdmin(admin.ModelAdmin):
269
269
  'alarm_category', 'arm_status'
270
270
  )
271
271
 
272
- search_fields = 'name',
272
+ search_fields = 'id', 'name', 'value', 'config', 'meta', 'notes'
273
273
  list_per_page = 100
274
274
  change_list_template = 'admin/component_change_list.html'
275
275
  inlines = ComponentPermissionInline,
simo/core/api_meta.py CHANGED
@@ -4,7 +4,8 @@ from rest_framework import serializers
4
4
  from rest_framework.metadata import SimpleMetadata
5
5
  from rest_framework.utils.field_mapping import ClassLookupDict
6
6
  from .serializers import (
7
- HiddenSerializerField, ComponentManyToManyRelatedField
7
+ HiddenSerializerField, ComponentManyToManyRelatedField,
8
+ TextAreaSerializerField
8
9
  )
9
10
 
10
11
 
@@ -36,6 +37,7 @@ class SIMOAPIMetadata(SimpleMetadata):
36
37
  serializers.ManyRelatedField: 'many related objects',
37
38
  ComponentManyToManyRelatedField: 'many related objects',
38
39
  HiddenSerializerField: 'hidden',
40
+ TextAreaSerializerField: 'textarea',
39
41
  })
40
42
 
41
43
  def get_field_info(self, field):
simo/core/forms.py CHANGED
@@ -34,7 +34,6 @@ class HiddenField(forms.CharField):
34
34
  super().__init__(widget=forms.HiddenInput())
35
35
 
36
36
 
37
-
38
37
  class HubConfigForm(forms.Form):
39
38
  name = forms.CharField(
40
39
  label=_("Hub Name"), required=True,
@@ -300,7 +299,6 @@ class ComponentAdminForm(forms.ModelForm):
300
299
  'category': autocomplete.ModelSelect2(
301
300
  url='autocomplete-category', attrs={'data-html': True}
302
301
  ),
303
- #'instance_methods': PythonCode
304
302
  }
305
303
 
306
304
  def __init__(self, *args, **kwargs):
@@ -334,6 +332,7 @@ class ComponentAdminForm(forms.ModelForm):
334
332
  #'instance_methods',
335
333
  'value_units',
336
334
  'alarm_category', 'arm_status',
335
+ 'notes'
337
336
  )
338
337
  base_fields = ['id', 'gateway', 'base_type', 'name']
339
338
  if cls.has_icon:
@@ -348,7 +347,7 @@ class ComponentAdminForm(forms.ModelForm):
348
347
 
349
348
  base_fields.append('show_in_app')
350
349
  base_fields.append('control')
351
- #base_fields.append('instance_methods')
350
+ base_fields.append('notes')
352
351
 
353
352
  fieldsets = [
354
353
  (_("Base settings"), {'fields': base_fields}),
@@ -0,0 +1,28 @@
1
+ # Generated by Django 3.2.9 on 2024-04-29 12:31
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('core', '0030_alter_instance_timezone'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name='component',
15
+ name='notes',
16
+ field=models.TextField(blank=True, null=True),
17
+ ),
18
+ migrations.AlterField(
19
+ model_name='category',
20
+ name='header_image',
21
+ field=models.ImageField(blank=True, help_text='Will be cropped down to: 830x430', null=True, upload_to='categories'),
22
+ ),
23
+ migrations.AlterField(
24
+ model_name='instance',
25
+ name='cover_image',
26
+ field=models.ImageField(blank=True, null=True, upload_to='hub_covers'),
27
+ ),
28
+ ]
simo/core/models.py CHANGED
@@ -361,6 +361,8 @@ class Component(DirtyFieldsMixin, models.Model, SimoAdminMixin, OnChangeMixin):
361
361
 
362
362
  show_in_app = models.BooleanField(default=True, db_index=True)
363
363
 
364
+ notes = models.TextField(null=True, blank=True)
365
+
364
366
  # Feature for global superusers.
365
367
  # Good candidate for reworking in to something more API oriented
366
368
  # instead of injecting the code directly.
simo/core/serializers.py CHANGED
@@ -93,6 +93,10 @@ class HiddenSerializerField(serializers.CharField):
93
93
  pass
94
94
 
95
95
 
96
+ class TextAreaSerializerField(serializers.CharField):
97
+ pass
98
+
99
+
96
100
  class ComponentFormsetField(FormSerializer):
97
101
 
98
102
  class Meta:
@@ -130,6 +134,7 @@ class ComponentFormsetField(FormSerializer):
130
134
  continue
131
135
 
132
136
  cls_type = form_field.__class__
137
+
133
138
  try:
134
139
  serializer_field_class = field_mapping[cls_type]
135
140
  except KeyError:
@@ -280,22 +285,26 @@ class ComponentSerializer(FormSerializer):
280
285
  form_field = form[field_name]
281
286
 
282
287
  cls = form_field.field.__class__
283
- try:
284
- serializer_field_class = field_mapping[cls]
285
- except KeyError:
286
- cls = form_field.field.__class__.__bases__[0]
288
+ if field_name == 'notes':
289
+ serializer_field_class = TextAreaSerializerField
290
+ print("TEXTAREA!~!!!")
291
+ else:
287
292
  try:
288
293
  serializer_field_class = field_mapping[cls]
289
294
  except KeyError:
290
- raise TypeError(
291
- "{field} is not mapped to a serializer field. "
292
- "Please add {field} to {serializer}.Meta.field_mapping. "
293
- "Currently mapped fields: {mapped}".format(
294
- field=form_field.field.__class__.__name__,
295
- serializer=self.__class__.__name__,
296
- mapped=', '.join(sorted([i.__name__ for i in field_mapping.keys()]))
295
+ cls = form_field.field.__class__.__bases__[0]
296
+ try:
297
+ serializer_field_class = field_mapping[cls]
298
+ except KeyError:
299
+ raise TypeError(
300
+ "{field} is not mapped to a serializer field. "
301
+ "Please add {field} to {serializer}.Meta.field_mapping. "
302
+ "Currently mapped fields: {mapped}".format(
303
+ field=form_field.field.__class__.__name__,
304
+ serializer=self.__class__.__name__,
305
+ mapped=', '.join(sorted([i.__name__ for i in field_mapping.keys()]))
306
+ )
297
307
  )
298
- )
299
308
 
300
309
  ret[field_name] = self._get_field(
301
310
  form_field.field, serializer_field_class
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: simo
3
- Version: 2.0.21
3
+ Version: 2.0.22
4
4
  Summary: Smart Home on Steroids!
5
5
  Author-email: Simanas Venčkauskas <simanas@simo.io>
6
6
  Project-URL: Homepage, https://simo.io
@@ -25,10 +25,10 @@ simo/_hub_template/hub/settings.py,sha256=4QhvhbtLRxHvAntwqG_qeAAtpDUqKvN4jzw9u3
25
25
  simo/_hub_template/hub/supervisor.conf,sha256=IY3fdK0fDD2eAothB0n54xhjQj8LYoXIR96-Adda5Z8,1353
26
26
  simo/_hub_template/hub/urls.py,sha256=Ydm-1BkYAzWeEF-MKSDIFf-7aE4qNLPm48-SA51XgJQ,25
27
27
  simo/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- simo/core/admin.py,sha256=5QFmf7ZOqkSEba2Fo-UfJp5dVe-vhKUtOUlAnfQGhno,17634
28
+ simo/core/admin.py,sha256=cPOC2x45Gjf0T8MKtmE2wJZk7DAuHMsvvy5Nk3YUIG8,17675
29
29
  simo/core/api.py,sha256=H4KJBiU377zEj8dJGSnBUKgyeyA2512WmSh9I0nH4WM,23760
30
30
  simo/core/api_auth.py,sha256=_3hG4e1eLKrcRnSAOB_xTL6cwtOJ2_7JS7GZU_iqTgA,1251
31
- simo/core/api_meta.py,sha256=dZkz7z-7GaMPVAsfQxOYCvpYaMPx_v2zynbY6JM8oD8,3477
31
+ simo/core/api_meta.py,sha256=ySmmhtVrWatI3yqnYPuP5ipapmJfyfEbl32w-7_W5O4,3551
32
32
  simo/core/app_widgets.py,sha256=EEQOto3fGR0syDqpJE38tQrx8DoTTyg26nF5kYzHY38,2018
33
33
  simo/core/auto_urls.py,sha256=0gu-IL7PHobrmKW6ksffiOkAYu-aIorykWdxRNtwGYo,1194
34
34
  simo/core/autocomplete_views.py,sha256=JT5LA2_Wtr60XYSAIqaXFKFYPjrmkEf6yunXD9y2zco,4022
@@ -38,15 +38,15 @@ simo/core/controllers.py,sha256=SHqdSRhF7G-hmRtcWEODkUs-b17y6gEHDdZM3V01uVs,2697
38
38
  simo/core/dynamic_settings.py,sha256=U2WNL96JzVXdZh0EqMPWrxqO6BaRR2Eo5KTDqz7MC4o,1943
39
39
  simo/core/events.py,sha256=LvtonJGNyCb6HLozs4EG0WZItnDwNdtnGQ4vTcnKvUs,4438
40
40
  simo/core/filters.py,sha256=ghtOZcrwNAkIyF5_G9Sn73NkiI71mXv0NhwCk4IyMIM,411
41
- simo/core/forms.py,sha256=iI3tiHMbjSrjldH8W8OYh8qJyT8QTVtfYczTPINY1ds,22502
41
+ simo/core/forms.py,sha256=FnnK4pHZ8EaMvubN0NQbz2SdTTgMXvGM-heklzN4RZo,22465
42
42
  simo/core/gateways.py,sha256=s_c2W0v2_te89i6LS4Nj7F2wn9UwjZXPT7pfy6SToVo,3714
43
43
  simo/core/loggers.py,sha256=EBdq23gTQScVfQVH-xeP90-wII2DQFDjoROAW6ggUP4,1645
44
44
  simo/core/managers.py,sha256=WoQ4OX3akIvoroSYji-nLVqXBSJzCiC1u_IiWkKbKmA,2413
45
45
  simo/core/middleware.py,sha256=64PYjnyRnYf4sgMvPfR0oQqf9UEtxUwnhJe3RV6z_HI,2040
46
- simo/core/models.py,sha256=dPLPju4xxc46x9JciOTC65SFSPogboXyNxjwrewXB1Y,19400
46
+ simo/core/models.py,sha256=c_MnZO-h02qYEu_6vnhkuW6l2OuYuKuUqlE5bc2CB_0,19453
47
47
  simo/core/permissions.py,sha256=UmFjGPDWtAUbaWxJsWORb2q6BREHqndv9mkSIpnmdLk,1379
48
48
  simo/core/routing.py,sha256=X1_IHxyA-_Q7hw1udDoviVP4_FSBDl8GYETTC2zWTbY,499
49
- simo/core/serializers.py,sha256=HMSMOA5IcIYDIVipvuozf6bymJ-drvABPjEs-4lPjsI,17251
49
+ simo/core/serializers.py,sha256=KVkp4u_FEnNySDlwO-3bDe4l_cdBJBV6Di8Smi1fNFk,17541
50
50
  simo/core/signal_receivers.py,sha256=EZ8NSYZxUgSaLS16YZdK7T__l8dl0joMRllOxx5PUt4,2809
51
51
  simo/core/socket_consumers.py,sha256=n7VE2Fvqt4iEAYLTRbTPOcI-7tszMAADu7gimBxB-Fg,9635
52
52
  simo/core/storage.py,sha256=YlxmdRs-zhShWtFKgpJ0qp2NDBuIkJGYC1OJzqkbttQ,572
@@ -56,10 +56,10 @@ simo/core/types.py,sha256=WJEq48mIbFi_5Alt4wxWMGXxNxUTXqfQU5koH7wqHHI,1108
56
56
  simo/core/views.py,sha256=hlAKpAbCbqI3a-uL5tDp532T2oLFiF0MBzKUJ_SNzo0,5833
57
57
  simo/core/widgets.py,sha256=J9e06C6I22F6xKic3VMgG7WeX07glAcl-4bF2Mg180A,2827
58
58
  simo/core/__pycache__/__init__.cpython-38.pyc,sha256=y0IW37wBUIGa3Eh_ZG28pRqHKoLiPyTgUX2OnbkEPlc,158
59
- simo/core/__pycache__/admin.cpython-38.pyc,sha256=D9Hu5xMkclP6xFjEOLB-mBOe0ZMuCF10uilsROKkvmM,13446
59
+ simo/core/__pycache__/admin.cpython-38.pyc,sha256=EqwHQhU8qQrjfSChyCZXN6J-1Eira9alYIqR45-3OnE,13475
60
60
  simo/core/__pycache__/api.cpython-38.pyc,sha256=kH2ORVfI8xtwe7M1wdOEtaqJR_SqKR8V1wrCdhazVhc,18883
61
61
  simo/core/__pycache__/api_auth.cpython-38.pyc,sha256=5UTBr3rDMERAfc0OuOVDwGeQkt6Q7GLBtZJAMBse1sg,1712
62
- simo/core/__pycache__/api_meta.cpython-38.pyc,sha256=7dDi_Aay7T4eSNYmEItMlb7yU91-5_pzEVg8GXXf4Qc,2783
62
+ simo/core/__pycache__/api_meta.cpython-38.pyc,sha256=94T3_rybn2T1_bkaDQnQRyjy21LBaGOnz-mmkJ6T0N8,2840
63
63
  simo/core/__pycache__/app_widgets.cpython-38.pyc,sha256=9Es2wZNduzUJv-jZ_HX0-L3vqwpXWBbseEwoC5K6b-w,3465
64
64
  simo/core/__pycache__/auto_urls.cpython-38.pyc,sha256=SVl4fF0-yiq7e9gt08jIM6_rL4JYcR0cNHzR9jCEi1M,931
65
65
  simo/core/__pycache__/autocomplete_views.cpython-38.pyc,sha256=hJ6JILI1LqrAtpQMvxnLvljGdW1v1gpvBsD79vFkZ58,3972
@@ -69,15 +69,15 @@ simo/core/__pycache__/controllers.cpython-38.pyc,sha256=vGRcRD7VPUdpP2WMtn2IIrnk
69
69
  simo/core/__pycache__/dynamic_settings.cpython-38.pyc,sha256=ELu06Hub4DOidja71ybvD3ZM4HdXiyZjNJrZfnXZXNA,2476
70
70
  simo/core/__pycache__/events.cpython-38.pyc,sha256=A1Axx-qftd1r7st7wkO3DkvTdt9-RkcJe5KJhpzJVk8,5109
71
71
  simo/core/__pycache__/filters.cpython-38.pyc,sha256=VIMADCBiYhziIyRmxAyUDJluZvuZmiC4bNYWTRsGSao,721
72
- simo/core/__pycache__/forms.cpython-38.pyc,sha256=iuxu0J6KHGL2TJl2nPIrVEkSFurM9N95kHFI-OAfT34,19047
72
+ simo/core/__pycache__/forms.cpython-38.pyc,sha256=U5pV_JyfoGwymn3tsws8FR2GrxihjKFa5dmtdzijexA,19071
73
73
  simo/core/__pycache__/gateways.cpython-38.pyc,sha256=XBiwMfBkjoQ2re6jvADJOwK0_0Aav-crzie9qtfqT9U,4599
74
74
  simo/core/__pycache__/loggers.cpython-38.pyc,sha256=Z-cdQnC6XlIonPV4Sl4E52tP4NMEdPAiHK0cFaIL7I8,1623
75
75
  simo/core/__pycache__/managers.cpython-38.pyc,sha256=5vstOMfm997CZBBkaSiaS7EojhLTWZlbeA_EQ8u-yfg,2554
76
76
  simo/core/__pycache__/middleware.cpython-38.pyc,sha256=bGOFJNEhJeLbpsZp8LYn1VA3paLF5HULHQ6IFKa7Juc,2022
77
- simo/core/__pycache__/models.cpython-38.pyc,sha256=J3VZfFaU-aMkptCoviPvAJzJ8zBptGHmt504zjf2TCI,17006
77
+ simo/core/__pycache__/models.cpython-38.pyc,sha256=Nz3g-p6PIKDgOdreXyjurfKXsBhmTh1P3MnqbZPKfRc,17029
78
78
  simo/core/__pycache__/permissions.cpython-38.pyc,sha256=uygjPbfRQiEzyo5-McCxsuMDJLbDYO_TLu55U7bJbR0,1809
79
79
  simo/core/__pycache__/routing.cpython-38.pyc,sha256=3T3FPJ8Cn99xZCGvMyg2xjl7al-Shm9CelbSpkJtNP8,599
80
- simo/core/__pycache__/serializers.cpython-38.pyc,sha256=YkAXdCwfPEysAQ5Nin9B48cZ5pK_2WZwyR5ZEwfJrC4,16666
80
+ simo/core/__pycache__/serializers.cpython-38.pyc,sha256=1-Xs9UtjmUZ8YCh7zkKqmet7XRpy06W1HLijyqluMTk,16871
81
81
  simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=sgjH_wv-1U99auH5uHb3or0qettPeHAlsz8P7B03ajY,2430
82
82
  simo/core/__pycache__/socket_consumers.cpython-38.pyc,sha256=NJUr7nRyHFvmAumxxWpsod5wzVVZM99rCEuJs1utHA4,8432
83
83
  simo/core/__pycache__/storage.cpython-38.pyc,sha256=BTkYH8QQyjqI0WOtJC8fHNtgu0YA1vjqZclXjC2vCVI,1116
@@ -172,6 +172,7 @@ simo/core/migrations/0027_remove_component_tags.py,sha256=V0o_lgKiVU3HfG5V8MTO-j
172
172
  simo/core/migrations/0028_rename_subcomponents_component_slaves.py,sha256=ioQcfO2_IIfPc_BZzETmSodsYstzygR9U0ULnhET6ac,373
173
173
  simo/core/migrations/0029_auto_20240229_1331.py,sha256=BYXPNwjXApAx7mxE5li3QssfksWTsSjDf_VPQ8iGV8c,1140
174
174
  simo/core/migrations/0030_alter_instance_timezone.py,sha256=XZuYr2eD9MvE21Jxfdat8RC3sbc7PaGUfNPaqqxBNzE,23248
175
+ simo/core/migrations/0031_auto_20240429_1231.py,sha256=kskD8dylxqg-l-ZQgxl6ZdZd7iNcJ52rOGPJFa9s-wk,829
175
176
  simo/core/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
177
  simo/core/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=w6GiBXVxWj30Bg4Sn_pFVeA041d-pCrkaq8mR3KuF70,5381
177
178
  simo/core/migrations/__pycache__/0002_load_icons.cpython-38.pyc,sha256=Nb9RrPjVYo_RpZ5PmzoaEIWGCeVt4kicpmGiKlBrpIw,2123
@@ -203,6 +204,7 @@ simo/core/migrations/__pycache__/0027_remove_component_tags.cpython-38.pyc,sha25
203
204
  simo/core/migrations/__pycache__/0028_rename_subcomponents_component_slaves.cpython-38.pyc,sha256=PSiMp1yDzZ36Ei36U2tcIlvyzGgB5RuvGImrJ__7Q5s,593
204
205
  simo/core/migrations/__pycache__/0029_auto_20240229_1331.cpython-38.pyc,sha256=nO6lBU-1SxMQv67jQs7cGgNnot722UVL9pj3UE14I1k,1086
205
206
  simo/core/migrations/__pycache__/0030_alter_instance_timezone.cpython-38.pyc,sha256=paRgdijg5o8QzluT4GjSEQIMk6UAF7XmSwjqknXPE_4,16333
207
+ simo/core/migrations/__pycache__/0031_auto_20240429_1231.cpython-38.pyc,sha256=Kl76gU1VUyTWMz9RIZUrbnb_xeteWLDSRfs_GtNCVow,863
206
208
  simo/core/migrations/__pycache__/__init__.cpython-38.pyc,sha256=VZmDQ57BTcebuM0KMhjiTOabgWZCBxQmSJzWZos9SO8,169
207
209
  simo/core/static/ansi_styles.css,sha256=4ieJGrjZPKyPSago9FdB_gflHoGE1vxCHi8qVn5tY-Y,37352
208
210
  simo/core/static/admin/Img/plus.svg,sha256=2NpSFPWqGIjpAQGFI7LDQHPKagEhYkJiJX95ufCoZaI,741
@@ -10446,8 +10448,8 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
10446
10448
  simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10447
10449
  simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10448
10450
  simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10449
- simo-2.0.21.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
10450
- simo-2.0.21.dist-info/METADATA,sha256=eBUGnUupmrbuL2W8Vyfk1VWkJLEztt_8CYOjOV18J8A,1730
10451
- simo-2.0.21.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
10452
- simo-2.0.21.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
10453
- simo-2.0.21.dist-info/RECORD,,
10451
+ simo-2.0.22.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
10452
+ simo-2.0.22.dist-info/METADATA,sha256=FwvdMlZV2ue45i8GkzfigcN5aynl1_HPlxcxQnXO5hc,1730
10453
+ simo-2.0.22.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
10454
+ simo-2.0.22.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
10455
+ simo-2.0.22.dist-info/RECORD,,
File without changes