valar 1.3.18__py3-none-any.whl → 1.3.20__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 valar might be problematic. Click here for more details.

@@ -1,5 +1,6 @@
1
1
  import jwt
2
2
  from django.conf import settings
3
+ from django.http import HttpRequest
3
4
 
4
5
  from ..classes.valar_response import ValarResponse
5
6
 
@@ -11,7 +12,7 @@ class ValaAuthError(Exception):
11
12
 
12
13
 
13
14
  def auth_required(view_func):
14
- def wrapper(request, *args, **kwargs):
15
+ def wrapper(request: HttpRequest, *args, **kwargs):
15
16
  try:
16
17
  payload = valid_request_token(request)
17
18
  request.user_id = payload["user_id"]
@@ -1,4 +1,5 @@
1
1
  from channels.generic.websocket import AsyncJsonWebsocketConsumer
2
+ from django.conf import settings
2
3
 
3
4
  VALAR_CHANNEL_GROUP = 'VALAR'
4
5
 
@@ -15,6 +16,10 @@ class ValarConsumer(AsyncJsonWebsocketConsumer):
15
16
  self.client = params.get('client')
16
17
  await self.channel_layer.group_add(VALAR_CHANNEL_GROUP, self.channel_name)
17
18
  await self.accept()
19
+ await self.send_json({
20
+ "tag": 'system',
21
+ "minio": getattr(settings, 'MINIO_ROOT') if hasattr(settings, 'MINIO_ROOT') else '/minio'
22
+ })
18
23
 
19
24
  async def disconnect(self, code):
20
25
  await self.channel_layer.group_discard(VALAR_CHANNEL_GROUP, self.channel_name)
@@ -30,17 +35,23 @@ class ValarConsumer(AsyncJsonWebsocketConsumer):
30
35
  async def user_emit(self, event):
31
36
  users: list = event.get('users', [])
32
37
  data = event.get('data', {})
38
+ tag = event.get('tag')
39
+ data.update({'tag': tag})
33
40
  if self.uid in users:
34
41
  await self.send_json(data)
35
42
 
36
43
  async def client_emit(self, event):
37
44
  clients: list = event.get('clients', [])
38
45
  data = event.get('data', {})
46
+ tag = event.get('tag')
47
+ data.update({'tag': tag})
39
48
  if self.client in clients:
40
49
  await self.send_json(data)
41
50
 
42
51
  async def broadcast_emit(self, event):
43
52
  data = event.get('data', {})
53
+ tag = event.get('tag')
54
+ data.update({'tag': tag})
44
55
  await self.send_json(data)
45
56
 
46
57
  async def register_emit(self, event):
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
 
3
3
  from ..channels.sender import ValarChannelSender
4
+ import traceback
4
5
 
5
6
 
6
7
  async def execute_channel(method, sender: ValarChannelSender):
@@ -10,5 +11,10 @@ async def execute_channel(method, sender: ValarChannelSender):
10
11
 
11
12
  def __execute__(method, sender: ValarChannelSender):
12
13
  sender.start()
13
- method(sender)
14
- sender.stop()
14
+ try:
15
+ response = method(sender)
16
+ sender.done(response)
17
+ sender.stop()
18
+ except Exception as e:
19
+ traceback.print_exc()
20
+ sender.error(str(e))
valar/channels/sender.py CHANGED
@@ -18,20 +18,21 @@ class Channel:
18
18
  self.url = body.get('url')
19
19
  self.auth = body.get('auth')
20
20
  self.broadcast = body.get('broadcast')
21
+
21
22
  self.data = body.get('data')
22
- self.resolve = body.get('resolve')
23
+ self.token = body.get('token')
23
24
 
24
- def to_dict(self, status, payload):
25
+ def to_dict(self, resolver, payload):
25
26
  data = {
26
27
  'handler': self.handler,
27
28
  'url': self.url,
28
29
  'auth': self.auth,
29
30
  'broadcast': self.broadcast,
30
- 'resolve': self.resolve,
31
+ 'token': self.token,
31
32
  'timestamp': datetime.now().timestamp()
32
33
  }
33
- if status:
34
- data.update({'status': status})
34
+ if resolver:
35
+ data.update({'resolver': resolver})
35
36
  if payload:
36
37
  data.update({'payload': payload})
37
38
  return data
@@ -86,17 +87,19 @@ class ValarChannelSender(Sender):
86
87
  with self.__lock__:
87
88
  self.__payload__ = payload
88
89
 
89
- def done(self, payload):
90
- self.__emit__('done', payload)
90
+ def done(self, response):
91
+ self.__emit__('done', response)
91
92
 
92
93
  def error(self, payload):
93
94
  self.__emit__('error', payload)
94
95
 
95
96
  def __emit__(self, status='proceed', data=None):
96
97
  scope = 'broadcast' if self.__channel__.broadcast else 'client'
98
+ pay = self.__payload__ if status == 'proceed' else data
97
99
  body = {
98
100
  'type': f'{scope}.emit',
99
- 'data': self.__channel__.to_dict(status, data or self.__payload__),
101
+ 'tag': 'batch',
102
+ 'data': self.__channel__.to_dict(status, pay),
100
103
  'clients': [self.client],
101
104
  'users': []
102
105
  }
@@ -4,7 +4,7 @@ meta_field_key_defaults = {
4
4
  },
5
5
  'valar.MetaView': {
6
6
  'list': ('pick', ['code', 'name']),
7
- 'core': ('pick', ['name', 'enable', 'lock', 'property']),
7
+ 'core': ('pick', ['name', 'enable', 'lock']),
8
8
  'style': ('pick', ['form_width', 'form_height', 'table_width', 'table_height']),
9
9
  'rest': ('pick',
10
10
  ['allow_search', 'allow_order', 'allow_insert', 'allow_remove', 'allow_download', 'allow_upload']),
@@ -27,11 +27,8 @@ meta_field_value_defaults = {
27
27
  },
28
28
  "core": {
29
29
  "name": {
30
- 'span': 16
30
+ 'span': 24
31
31
  },
32
- "enable": {
33
- "span": 8
34
- }
35
32
  }
36
33
  },
37
34
  'valar.MetaFieldDomain': {
@@ -104,7 +101,6 @@ meta_field_value_defaults = {
104
101
  },
105
102
  "tool": {
106
103
  'column_width': 100,
107
- 'span': 24,
108
104
  'tool': 'tree',
109
105
  'refer': {
110
106
  'entity': 'valar.MetaFieldTool',
@@ -119,11 +115,13 @@ meta_field_value_defaults = {
119
115
  },
120
116
  "refer": {
121
117
  'allow_edit': False,
122
- 'column_width': 80
118
+ 'column_width': 80,
119
+ "hide_on_form": True
123
120
  },
124
121
  "format": {
125
122
  'allow_edit': False,
126
- 'column_width': 80
123
+ 'column_width': 80,
124
+ "hide_on_form": True
127
125
  },
128
126
  'header_color': {
129
127
  'tool': 'color',
valar/dao/meta.py CHANGED
@@ -1,7 +1,6 @@
1
1
  import copy
2
2
 
3
3
  from deepmerge import always_merger
4
- from django.conf import settings
5
4
 
6
5
  from ..dao.defaults.field_keys_default import meta_field_key_defaults
7
6
  from ..dao.defaults.field_values_default import meta_field_value_defaults
@@ -11,7 +10,6 @@ from ..dao.frame import meta_field_tool_mapping
11
10
  from ..dao.mon_dao import MonDao
12
11
  from ..dao.orm_dao import OrmDao
13
12
  from ..dao.orm_field import column_width
14
- from ..models.frame import MetaFieldDomain
15
13
  from ..models.meta import Meta, MetaView
16
14
 
17
15
 
@@ -56,18 +54,15 @@ class ValarMeta:
56
54
  name, entity = meta['name'], meta['entity']
57
55
  fields = self.view.metafield_set.all().order_by('-sort')
58
56
  _fields = {}
59
- _minio = settings.MINIO_ROOT if hasattr(settings, 'MINIO_ROOT') else '/minio'
60
57
  for field in fields:
61
- _field = field.json(entity=entity, code=self.code, db='orm', minio=_minio)
58
+ _field = field.json(entity=entity, code=self.code, db='orm')
62
59
  align, tool, width, domain = _field['align'], _field['tool'], _field['column_width'], _field['domain']
63
60
  _field['align'] = align if align else meta_field_tool_mapping.get(tool, 'left')
64
61
  _field['column_width'] = width if width else column_width(domain, tool)
65
62
 
66
63
  _fields[field.prop] = _field
67
64
 
68
- _minio = settings.MINIO_ROOT if hasattr(settings, 'MINIO_ROOT') else '/minio'
69
65
  _view.update({
70
- '$minio': _minio,
71
66
  '$db': 'orm',
72
67
  '$entity': entity,
73
68
  '$code': self.code,
@@ -87,17 +82,6 @@ class ValarMeta:
87
82
  view_item.update({
88
83
  "name": self.code.upper(),
89
84
  "saved": True,
90
- "property": {
91
- "value": "id",
92
- "label": "name",
93
- "display": "id",
94
- "sort": "sort",
95
- "disabled": "disabled",
96
- "isLeaf": "isLeaf",
97
- "icon": "icon",
98
- "children": "children",
99
- "pid": "pid",
100
- }
101
85
  })
102
86
  values = always_merger.merge(default_values, code_values)
103
87
  view_item.update(values)
valar/dao/orm_dao.py CHANGED
@@ -1,7 +1,6 @@
1
1
  import datetime
2
2
  import json
3
3
 
4
- from django.conf import settings
5
4
  from django.core.paginator import Paginator
6
5
  from django.db.models.options import Options
7
6
 
@@ -15,7 +14,6 @@ from django.db.models.fields.files import FieldFile
15
14
  from django.forms import FileField
16
15
 
17
16
  from ..dao.orm_field import OrmField
18
- from ..models.auth import Account
19
17
  from ..models.core import VTree, VModel
20
18
  from ..models.meta import MetaField
21
19
 
@@ -52,7 +50,6 @@ class OrmDao(AbstractDao):
52
50
  return list(query_set.values(*props))
53
51
 
54
52
  def insert_one(self, item):
55
- print(item)
56
53
  return self.__save__(item)
57
54
 
58
55
  def update_one(self, item):
@@ -332,7 +329,6 @@ def __set_simple_values__(fields, values):
332
329
  elif domain == 'JSONField':
333
330
  json_props.append(prop)
334
331
  for row in values:
335
- row['$minio'] = settings.MINIO_ROOT
336
332
  for prop, formating in date_props_mapping.items():
337
333
  if row.get(prop):
338
334
  row[prop] = row[prop].strftime(formating)
valar/models/core.py CHANGED
@@ -1,7 +1,6 @@
1
1
  import json
2
2
 
3
3
  from django.apps import AppConfig
4
- from django.conf import settings
5
4
  from django.db import models
6
5
  from django.db.models import ManyToOneRel, OneToOneRel, ManyToManyRel, ManyToManyField, UUIDField, FileField, \
7
6
  ForeignKey, OneToOneField, DateField, TimeField, DateTimeField, BigAutoField, JSONField
@@ -76,7 +75,6 @@ class VModel(models.Model):
76
75
  _set = getattr(self, accessor).all().order_by('-sort')
77
76
  data[prop] = [item.id for item in _set]
78
77
  data[f'{prop}_set'] = [item.json() for item in _set]
79
- data['$minio'] = settings.MINIO_ROOT
80
78
  return data
81
79
 
82
80
 
valar/models/meta.py CHANGED
@@ -15,7 +15,6 @@ class Meta(VModel):
15
15
 
16
16
  class MetaView(VModel):
17
17
  meta = models.ForeignKey('Meta', on_delete=models.CASCADE, verbose_name='元数据')
18
- property = models.JSONField(default=dict, verbose_name='属性')
19
18
 
20
19
  code = models.CharField(max_length=50, verbose_name='类视图', default='default ')
21
20
  name = models.CharField(max_length=50, verbose_name='视图名称', null=True)
valar/urls.py CHANGED
@@ -5,6 +5,9 @@ from django.urls import path, re_path
5
5
  urlpatterns = [
6
6
  path('socket/<str:handler>', handel_channel),
7
7
  path('batch', rest.batch),
8
+
9
+ path('<str:db>/<str:entity>/save_many', rest.save_many),
10
+ path('<str:db>/<str:entity>/delete_many', rest.delete_many),
8
11
  path('<str:db>/<str:entity>/save_one', rest.save_one),
9
12
  path('<str:db>/<str:entity>/insert_one', rest.insert_one),
10
13
  path('<str:db>/<str:entity>/delete_one', rest.delete_one),
@@ -20,7 +23,7 @@ urlpatterns = [
20
23
  path('load_customs', meta.load_customs),
21
24
  path('get_fields', meta.get_fields),
22
25
  path('save_custom', meta.save_custom),
23
- path('upload_mapping', meta.upload_mapping),
26
+ path('upload_frame', meta.upload_frame),
24
27
 
25
28
  path('<str:db>/<str:entity>/save_file', file.save_file),
26
29
  path('<str:db>/<str:entity>/remove_file', file.remove_file),
valar/views/auth.py CHANGED
@@ -14,24 +14,23 @@ from ..models.auth import Account, AbstractUser, Menu
14
14
 
15
15
  def sign_in(request):
16
16
  body = json.loads(request.body)
17
- username = body.get("username")
18
- email = body.get("email")
19
- password = body.get("password")
20
- signin = body.get("signin")
17
+ keys = ['username', 'email', 'password', 'signin']
18
+ username, email, password, signin = [body.get(k) for k in keys]
21
19
  dao = Dao('valar.Account')
22
20
  account = dao.search({"username": username}).first()
21
+
23
22
  if account is not None:
24
23
  if signin:
25
24
  if not account.is_auth(password):
26
- return ValarResponse(False, '密码错误', 'warning', status=400)
25
+ return ValarResponse(False, '密码错误', 'warning')
27
26
  else:
28
- return ValarResponse(False, f"{username}已被占用", 'warning', status=400)
27
+ return ValarResponse(False, f"{username}已被占用", 'warning')
29
28
  else:
30
29
  if signin:
31
- return ValarResponse(False, f"{username}不存在", 'warning', status=400)
30
+ return ValarResponse(False, f"{username}不存在", 'warning')
32
31
  else:
33
32
  if username == 'admin' and password != settings.SECRET_KEY:
34
- return ValarResponse(False, "请输入正确的admin密码", 'warning', status=400)
33
+ return ValarResponse(False, "请输入正确的admin密码", 'warning')
35
34
  else:
36
35
  account = dao.save_one({
37
36
  "username": username,
valar/views/handler.py CHANGED
@@ -17,37 +17,31 @@ def valar_test_handler(sender: ValarChannelSender):
17
17
  tick = counter.tick()
18
18
  tick.update({'name': 'test1'})
19
19
  sender.load(tick)
20
+ return "aba"
20
21
 
21
22
 
22
23
  def batch_handler(sender: ValarChannelSender):
23
24
  data = sender.data
24
25
  entity, db, method = data.get("entity"), data.get("db"), data.get("method")
25
26
  dao = Dao(entity, db)
26
- body = {"method": method}
27
-
28
- try:
29
- if method == 'save_many':
30
- array = data.get("array", [])
31
- counter = Counter(array)
32
- keys = []
33
- for item in array:
34
- item.update({'saved': True})
35
- bean = dao.save_one(item)
36
- keys.append(bean.id)
37
- payload = counter.tick()
38
- sender.load(payload)
39
- body.update({'keys': keys})
40
- sender.done(body)
41
- elif method == 'delete_many':
42
- conditions = data.get("conditions", [])
43
- paths = dao.delete(conditions)
44
- counter = Counter(len(paths))
45
- minio = ValarEngine().get_minio_bucket(entity)
46
- for path in paths:
47
- minio.remove(path)
48
- payload = counter.tick()
49
- sender.load(payload)
50
- sender.done(body)
51
- except Exception as e:
52
- traceback.print_exc()
53
- sender.error(str(e))
27
+ if method == 'save_many':
28
+ array = data.get("data", [])
29
+ counter = Counter(array)
30
+ keys = []
31
+ for item in array:
32
+ item.update({'saved': True})
33
+ bean = dao.save_one(item)
34
+ keys.append(bean.id)
35
+ payload = counter.tick()
36
+ sender.load(payload)
37
+ return keys
38
+ elif method == 'delete_many':
39
+ conditions = data.get("data", [])
40
+ paths = dao.delete(conditions)
41
+ counter = Counter(len(paths))
42
+ minio = ValarEngine().get_minio_bucket(entity)
43
+ for path in paths:
44
+ minio.remove(path)
45
+ payload = counter.tick()
46
+ sender.load(payload)
47
+ return []
valar/views/meta.py CHANGED
@@ -10,7 +10,7 @@ from ..dao.meta import ValarMeta
10
10
  from ..models.meta import MetaView, Meta, MetaField
11
11
 
12
12
 
13
- def upload_mapping(request):
13
+ def upload_frame(request):
14
14
  body = json.loads(request.body)
15
15
  db = body.get('db')
16
16
  entity = body.get('entity')
@@ -19,9 +19,17 @@ def upload_mapping(request):
19
19
  view__meta__db=db,
20
20
  view__meta__entity=entity,
21
21
  view__code=code,
22
- domain__in=['ManyToManyField', 'ManyToManyRel', 'ManyToOneRel', 'OneToOneField', 'OneToOneRel', 'ForeignKey']
22
+ domain__in=[
23
+ 'ManyToManyField',
24
+ 'ManyToManyRel',
25
+ 'ManyToOneRel',
26
+ 'OneToOneField',
27
+ 'OneToOneRel',
28
+ 'ForeignKey',
29
+ 'CharField'
30
+ ]
23
31
  ).filter(Q(allow_upload=True) | Q(allow_update=True))
24
- mapping = {}
32
+ frame = {}
25
33
  for field in fields:
26
34
  prop = field.prop
27
35
  refer = field.refer
@@ -29,14 +37,18 @@ def upload_mapping(request):
29
37
  entity = refer['entity']
30
38
  value = refer['value']
31
39
  label = refer['label']
32
- includes = {prop: refer['includes'][prop] for prop in refer['includes'] if not prop.startswith('$')}
33
- excludes = {prop: refer['excludes'][prop] for prop in refer['excludes'] if not prop.startswith('$')}
34
- values = Dao(entity, db).manager.filter(**includes).exclude(**excludes).values(*[value, label])
35
- mapping[prop] = {
36
- row[value]: row[label]
37
- for row in values if row[value]
38
- }
39
- return ValarResponse(mapping)
40
+ try:
41
+ includes = {prop: refer['includes'][prop] for prop in refer['includes'] if not prop.startswith('$')}
42
+ excludes = {prop: refer['excludes'][prop] for prop in refer['excludes'] if not prop.startswith('$')}
43
+ values = Dao(entity, db).manager.filter(**includes).exclude(**excludes).values(*[value, label])
44
+ frame[prop] = [
45
+ {"value": row[value], "label": row[label]}
46
+ for row in values if row[value]
47
+ ]
48
+ except Exception:
49
+ pass
50
+
51
+ return ValarResponse(frame)
40
52
 
41
53
 
42
54
  def meta_view(request, db, entity):
@@ -121,7 +133,7 @@ def add_fields(request):
121
133
 
122
134
 
123
135
  def metas(request):
124
- values = Meta.objects.all().values('db', 'entity', 'name', 'tree', 'metaview__name')
136
+ values = Meta.objects.all().values('db', 'entity', 'name', 'tree')
125
137
  mapping = {'orm': {'valar': []}, 'mon': []}
126
138
  for row in values:
127
139
  db = row['db']
valar/views/password.py CHANGED
@@ -57,4 +57,4 @@ def __send__(account):
57
57
  return ValarResponse(False, '该账户未登记邮箱信息', code='error')
58
58
  content = f'Your temporary password is {token}, please change it as soon as possible.'
59
59
  ValarEngine().send_email('Retrieve Password', content, email)
60
- return ValarResponse(True, '临时密码发送成功', 'success')
60
+ return ValarResponse(f'临时密码已发送至{email}')
valar/views/rest.py CHANGED
@@ -8,6 +8,7 @@ from ..channels.executer import execute_channel
8
8
  from ..channels.sender import ValarChannelSender
9
9
  from ..classes.valar_response import ValarResponse
10
10
  from ..dao import Dao
11
+ from ..dao.engine import ValarEngine
11
12
 
12
13
 
13
14
  async def batch(request):
@@ -16,10 +17,30 @@ async def batch(request):
16
17
  return ValarResponse(True)
17
18
 
18
19
 
20
+ def save_many(request, db, entity):
21
+ array = json.loads(request.body)
22
+ dao = Dao(entity, db)
23
+ keys = []
24
+ for item in array:
25
+ item.update({'saved': True})
26
+ bean = dao.save_one(item)
27
+ keys.append(bean.id)
28
+ return ValarResponse(keys)
29
+
30
+
31
+ def delete_many(request, db, entity):
32
+ conditions = json.loads(request.body)
33
+ dao = Dao(entity, db)
34
+ paths = dao.delete(conditions)
35
+ minio = ValarEngine().get_minio_bucket(entity)
36
+ for path in paths:
37
+ minio.remove(path)
38
+ return ValarResponse(True)
39
+
40
+
19
41
  def insert_one(request, db, entity):
20
42
  item = json.loads(request.body)
21
43
  dao = Dao(entity, db)
22
- print(item)
23
44
  bean = dao.insert_one(item)
24
45
  item = dao.serialize(bean)
25
46
  return ValarResponse(item)
@@ -56,7 +77,6 @@ def find_one(request, db, entity):
56
77
  dao = Dao(entity, db)
57
78
  bean = dao.find_one(_id)
58
79
  item = dao.serialize(bean)
59
- item['$minio'] = settings.MINIO_ROOT
60
80
  return ValarResponse(item)
61
81
 
62
82
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valar
3
- Version: 1.3.18
3
+ Version: 1.3.20
4
4
  Summary: valar for morghulis
5
5
  Home-page: https://gitee.com/GRIFFIN120/valar_dev
6
6
  Author: LYP
@@ -1,15 +1,15 @@
1
1
  valar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  valar/apps.py,sha256=g7ayvb8tKf4hA5sdTi4kyMs9g_gfbemezZVVhF3qMGw,750
3
- valar/urls.py,sha256=jUx2-mRa10H-ip7Qa2jlunQfDB3HNhilMBeYysPDmYw,1421
4
- valar/auth/Authentication.py,sha256=8HCQ7U0SWMyIKgi5ZMXhVAkduaixJEF-RvNYM5IJpRA,1513
3
+ valar/urls.py,sha256=qOHPyC6eNgC3xdOqOYQmfcJWUoo893OOX40z2Twl8RA,1544
4
+ valar/auth/Authentication.py,sha256=i28icu1P3GAzltQJZvi_3oXdC9IQLieKQJjNkky7z6k,1562
5
5
  valar/auth/Middleware.py,sha256=axg1UnA9NRY4Ug1WaR7i8uoq19OLEPnbtpRo1TSUllQ,1197
6
6
  valar/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  valar/channels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- valar/channels/consumer.py,sha256=_013IDOzx4_VU55jo4wgZEunTJkWt22S9gbFMyYhm8Q,1481
8
+ valar/channels/consumer.py,sha256=cE_ZEC4X4KTtysg9zIYJqTUaEq4LkimB1NCrhgjX_IQ,1882
9
9
  valar/channels/counter.py,sha256=K8aQUI1RiIrSOg3280tV102soC-ZC1qSRZvBXuwNYQ0,377
10
- valar/channels/executer.py,sha256=_Ap859nvxRl8Ln0BWMqhnL6cQNl-1NQSmMR4Akh-afY,333
10
+ valar/channels/executer.py,sha256=yZZXBBZ5d2mBzchLSB8AzMG8U4hOmQcqKyn58aLsXPI,494
11
11
  valar/channels/mapping.py,sha256=1SBqxEYO4epbRkSOUw5zm6gau15imz1gokrRTQcy94A,755
12
- valar/channels/sender.py,sha256=6TJR5RlG9K44chhSUC34gvl1G2MgjRxnRpz9lGrs0rU,3852
12
+ valar/channels/sender.py,sha256=9GDhHqDkwcesa7-GFdDdFsi2vsCZxfapuSTfHgKdG5g,3926
13
13
  valar/channels/views.py,sha256=4J_f-Bn3VR0o0spOa9D52aRcxMRZ0YYgo-dMzJqFrd4,375
14
14
  valar/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  valar/classes/singleton_meta.py,sha256=aa9DZKG4Q9Cr67ZWrQ0yaFLrEjwFoTMQbDrpoIqgJZs,245
@@ -22,33 +22,33 @@ valar/dao/__init__.py,sha256=HRpBnsBSNgh2IHGg6zjOnNOkKETbSiuo1Qi6BG7wR2c,1525
22
22
  valar/dao/abstract.py,sha256=6GurHbMmNTjLVVRHtv3zvZqxDS7lBjGW68RuszneS8c,2566
23
23
  valar/dao/engine.py,sha256=wiMOGr_RQYAzLr91C0WkxCQMMlJ-qsZf3IV-NlEwf04,3058
24
24
  valar/dao/frame.py,sha256=cz2SWcRgKww0XVNZpCcPD3ACcW6q6piMba2StshT60M,7462
25
- valar/dao/meta.py,sha256=2o720rFqPdDxQ0yXW74zHU0m914PfKkzvLwPINtiRbg,5051
25
+ valar/dao/meta.py,sha256=jhSz62GCjsyp0BGBzK67SQpolOzmu-5HTQ-o9Zn9kYg,4412
26
26
  valar/dao/mon_dao.py,sha256=OlbbEl8Pl-2ABoYTT9goj2q51mgxmWy9770ZQv3fB_s,3665
27
27
  valar/dao/mon_field.py,sha256=AJp-KS19oRiRHtMidC_1uTv2oCplqO4-bdKNDLMllWU,570
28
- valar/dao/orm_dao.py,sha256=AwLduycRAN0uUwZtnK-IQ4j-PDV4E8W-YBg4EwTnFlY,13984
28
+ valar/dao/orm_dao.py,sha256=yiIHV6S_LLEoQpS7E_xZXjvC_aDffCLGPj_M4mGtREY,13853
29
29
  valar/dao/orm_field.py,sha256=qADDGPM_EUVxP2VEGfnb2m97gYeSFxXt5fOmY2Df11c,4981
30
30
  valar/dao/query.py,sha256=7MqCdwjdhXWBWjEggHVFQfC0zlZH3TrwuVxKE7E0OKA,1049
31
31
  valar/dao/defaults/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- valar/dao/defaults/field_keys_default.py,sha256=SegJzDXn7aHyIyIGyFIHbOltSWA1-JWwkQiaOva4WUY,2262
33
- valar/dao/defaults/field_values_default.py,sha256=ZyiN0f2nCqewEMfXWjwv6Yeq7gK16EBggTMU6s0pF40,3915
32
+ valar/dao/defaults/field_keys_default.py,sha256=1JOg55q9bYiorcBT2U3W5peb6WLufkQ7Zfn1brUNOx8,2250
33
+ valar/dao/defaults/field_values_default.py,sha256=7A02LRuLgFi2GTlm9XyJ29WVyZACkI-6t1ur2doMWB0,3899
34
34
  valar/dao/defaults/view_defaults.py,sha256=v2wEgiaXqEcM4lcjM2uV83cLA5EJZf6qHfLZ7YJikIg,572
35
35
  valar/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  valar/models/__init__.py,sha256=GMosgOi_o4kFIyReJg1qFqtbWSob5Mazd5FSGT_zfqI,55
37
37
  valar/models/auth.py,sha256=nxtLgJwBEgvYWXATcN-RN1e5LIzeUzK97jExUSjoIOk,1710
38
- valar/models/core.py,sha256=Tc1Mx1tIOXBy1PKtqrIu0pY12leSaKqfQFURmprEqYk,3772
38
+ valar/models/core.py,sha256=9lOEGuECtlzepzkDbMIT8gw73RR6nUQ70GShm6NhaT8,3694
39
39
  valar/models/frame.py,sha256=N13Bok7XNJDLoYDCpCIq8tEUktQVNerrLtk_U0KDJAE,851
40
40
  valar/models/indicator.py,sha256=vytY_CFFziUO44oMNB2SXOxs8PKlZQ6NgAiYp2MjK_I,1384
41
- valar/models/meta.py,sha256=sNCYJZKzx8JNbRidgRQunwIHYn9WXm89Svoc7-uutd4,4967
41
+ valar/models/meta.py,sha256=VfP6IdnVC_BQnVfKmUXguh_wenQIiuKS6EYkGIWhrV4,4898
42
42
  valar/models/test.py,sha256=3yfyZHJgviEybV1NyN4Qs1BGKE3DvAtb_e4oFI2MVos,1319
43
43
  valar/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- valar/views/auth.py,sha256=zVsXJkMacpHZjQfwQ-LFS4rtUmM2tBbH56L7JSzG55w,4135
44
+ valar/views/auth.py,sha256=gUvoTHwCQ-h_10MNTsjeb5nxFSyiTQ6ddjZQRFWztD0,4077
45
45
  valar/views/file.py,sha256=MdsmuoauyPJTDb89_-mk57IFId5w8HJNpBVozBKAG7s,1538
46
- valar/views/handler.py,sha256=KlXWhVU-b_b5uxrUwQBHW7H4shSPy4NnXj6AINM_Joo,1619
47
- valar/views/meta.py,sha256=H3_raG-LEcfg1p_CBpluhPXBsLFQB_jtaI5CKGgYOKk,4774
48
- valar/views/password.py,sha256=O094qG8Sh4ilT_wpEMw4IZtAlcQjrDVcFD5BHaWKg2Q,2127
49
- valar/views/rest.py,sha256=iqBCXU105CyS-lQISqrTTD2LCGzXZNijhQfxM7Fc4_Q,2758
50
- valar-1.3.18.dist-info/licenses/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
51
- valar-1.3.18.dist-info/METADATA,sha256=vY9OmnSw1dEJoJ8mX0-Obzk4knsoWVzpBiyzYxay__E,5173
52
- valar-1.3.18.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
53
- valar-1.3.18.dist-info/top_level.txt,sha256=TVi6VcvvYfVYZ_WnUVwT4psI8p6inaP3KfmQEWrrvYg,6
54
- valar-1.3.18.dist-info/RECORD,,
46
+ valar/views/handler.py,sha256=lUBVyjDl5CyqDO-UMwqsD1FshTELQaBDFocJ87Shrkw,1361
47
+ valar/views/meta.py,sha256=LHSkxZ-ni1TgyUNFxvz5Xsom-5sZ_wEiEpa0oL13jLc,4960
48
+ valar/views/password.py,sha256=YBKiPU3IWn69oJlfpezlO_bFNwwL4d9xyh49-xVv-lc,2118
49
+ valar/views/rest.py,sha256=OnW2SHz4flZxIkYEUrqpaoiHOdqQZOrOLWmGPGEQ1E4,3282
50
+ valar-1.3.20.dist-info/licenses/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
51
+ valar-1.3.20.dist-info/METADATA,sha256=U8tVP2-TUg1r18xtIordIyol06xSiHzL78La7eRKftE,5173
52
+ valar-1.3.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
53
+ valar-1.3.20.dist-info/top_level.txt,sha256=TVi6VcvvYfVYZ_WnUVwT4psI8p6inaP3KfmQEWrrvYg,6
54
+ valar-1.3.20.dist-info/RECORD,,
File without changes