django-botmanager 0.1.14__tar.gz → 0.2.15__tar.gz
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.
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/PKG-INFO +1 -1
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/admin.py +3 -2
- django-botmanager-0.2.15/botmanager/migrations/0011_alter_task_create_dt_alter_task_id.py +24 -0
- django-botmanager-0.2.15/botmanager/models.py +71 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/settings.py +46 -38
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/django_botmanager.egg-info/PKG-INFO +1 -1
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/django_botmanager.egg-info/SOURCES.txt +2 -0
- django-botmanager-0.2.15/django_botmanager.egg-info/pbr.json +1 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/django_botmanager.egg-info/requires.txt +1 -1
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/setup.py +2 -2
- django-botmanager-0.1.14/botmanager/models.py +0 -71
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/README.md +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/__init__.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/apps.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/basetask.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/management/__init__.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/management/commands/__init__.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/management/commands/bot_manager.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0001_initial.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0002_auto_20161208_1406.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0003_auto_20161208_1529.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0004_auto_20161219_1931.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0005_task_parent.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0006_task_priority.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0007_task_is_persistent.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0008_auto_20170331_1752.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0009_task_extra_params.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0010_auto_20170531_1321.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/__init__.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/utils.py +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/django_botmanager.egg-info/dependency_links.txt +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/django_botmanager.egg-info/top_level.txt +0 -0
- {django-botmanager-0.1.14 → django-botmanager-0.2.15}/setup.cfg +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
from django.contrib import admin
|
|
3
3
|
from django.utils.html import escape
|
|
4
|
+
from django.utils.translation import gettext_lazy as _
|
|
4
5
|
from botmanager.models import Task
|
|
5
6
|
|
|
6
7
|
|
|
@@ -28,12 +29,12 @@ class TaskAdmin(admin.ModelAdmin):
|
|
|
28
29
|
else:
|
|
29
30
|
return None
|
|
30
31
|
|
|
31
|
-
error_field.short_description =
|
|
32
|
+
error_field.short_description = _("Ошибка")
|
|
32
33
|
error_field.allow_tags = True
|
|
33
34
|
|
|
34
35
|
def input_field(self, obj):
|
|
35
36
|
return obj.input
|
|
36
37
|
|
|
37
|
-
input_field.short_description = "Вводные данные"
|
|
38
|
+
input_field.short_description = _("Вводные данные")
|
|
38
39
|
|
|
39
40
|
admin.site.register(Task, TaskAdmin)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated by Django 4.1.2 on 2023-06-28 11:19
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.utils.timezone
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
('botmanager', '0010_auto_20170531_1321'),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AlterField(
|
|
15
|
+
model_name='task',
|
|
16
|
+
name='create_dt',
|
|
17
|
+
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Дата создания задачи'),
|
|
18
|
+
),
|
|
19
|
+
migrations.AlterField(
|
|
20
|
+
model_name='task',
|
|
21
|
+
name='id',
|
|
22
|
+
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
|
23
|
+
),
|
|
24
|
+
]
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
from __future__ import unicode_literals
|
|
3
|
+
from django.db import models
|
|
4
|
+
from jsonfield import JSONField
|
|
5
|
+
from datetime import timedelta, datetime
|
|
6
|
+
from django.utils import timezone
|
|
7
|
+
from django.utils.translation import gettext_lazy as _
|
|
8
|
+
|
|
9
|
+
class Task(models.Model):
|
|
10
|
+
|
|
11
|
+
STATUS_NEW = 'NEW'
|
|
12
|
+
STATUS_IN_PROCESS = 'IN_PROCESS'
|
|
13
|
+
STATUS_OK = 'OK'
|
|
14
|
+
|
|
15
|
+
STATUSES = (
|
|
16
|
+
(STATUS_NEW, u'В ожидании'),
|
|
17
|
+
(STATUS_IN_PROCESS, u'Идет загрузка'),
|
|
18
|
+
(STATUS_OK, u'Данные загружены'),
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
name = models.CharField(max_length=256, verbose_name=_(u'Название'))
|
|
22
|
+
create_dt = models.DateTimeField(verbose_name=_(u"Дата создания задачи"), default=timezone.now)
|
|
23
|
+
finish_dt = models.DateTimeField(verbose_name=_(u"Дата завершения"), null=True, blank=True)
|
|
24
|
+
is_complete = models.BooleanField(verbose_name=_(u"Выполнена"), default=False)
|
|
25
|
+
is_failed = models.BooleanField(verbose_name=_(u"Аварийное завершение"), default=False)
|
|
26
|
+
is_persistent = models.BooleanField(verbose_name=_(u"Выполнять пока не завершится успешно"), default=True)
|
|
27
|
+
in_process = models.BooleanField(verbose_name=_(u"В процессе"), default=False)
|
|
28
|
+
|
|
29
|
+
input = JSONField(null=True, blank=True)
|
|
30
|
+
output = JSONField(null=True, blank=True)
|
|
31
|
+
last_error = JSONField(null=True, blank=True)
|
|
32
|
+
extra_params = JSONField(null=True, blank=True)
|
|
33
|
+
|
|
34
|
+
last_error_dt = models.DateTimeField(verbose_name=_(u"Дата последнего fail-а"), null=True, blank=True)
|
|
35
|
+
queue_key = models.CharField(max_length=32, verbose_name=_(u'Ключ группировки задач'))
|
|
36
|
+
failed_action = models.CharField(max_length=256, verbose_name=_(u'Action, на котором произошла ошибка'), null=True, blank=True)
|
|
37
|
+
attempt_count = models.SmallIntegerField(verbose_name=_(u'Счетчик попыток'), default=0)
|
|
38
|
+
last_attempt_dt = models.DateTimeField(verbose_name=_(u"Последняя попытка выполнения"), null=True, blank=True)
|
|
39
|
+
max_attempt_count = models.IntegerField(
|
|
40
|
+
verbose_name=_(u"Максимальное кол-во попыток выполнение (если None, то бесконечно)"), null=True, blank=True
|
|
41
|
+
)
|
|
42
|
+
attempt_period = models.DurationField(verbose_name=_(u'Период между попытками'), default=timedelta(hours=1))
|
|
43
|
+
parent = models.ForeignKey('self', verbose_name=_(u'Родительская задача'), null=True, blank=True, related_name='child_tasks', on_delete=models.CASCADE)
|
|
44
|
+
priority = models.SmallIntegerField(default=0)
|
|
45
|
+
|
|
46
|
+
def __unicode__(self):
|
|
47
|
+
return "Task {0} #{1}".format(self.name, self.id)
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def can_execute(self):
|
|
51
|
+
if not self.is_complete and not self.in_process:
|
|
52
|
+
if self.is_failed:
|
|
53
|
+
if self.last_attempt_dt + self.attempt_period > timezone.now():
|
|
54
|
+
return False
|
|
55
|
+
else:
|
|
56
|
+
if self.max_attempt_count is None:
|
|
57
|
+
return True
|
|
58
|
+
else:
|
|
59
|
+
if self.attempt_count < self.max_attempt_count:
|
|
60
|
+
return True
|
|
61
|
+
else:
|
|
62
|
+
return False # надо пофиксить is_complete ?
|
|
63
|
+
else:
|
|
64
|
+
return True
|
|
65
|
+
else:
|
|
66
|
+
return False
|
|
67
|
+
|
|
68
|
+
class Meta:
|
|
69
|
+
db_table = 'botmanager_task'
|
|
70
|
+
verbose_name = _(u"Задача для BotManager")
|
|
71
|
+
verbose_name_plural = _(u"Задачи для BotManager")
|
|
@@ -16,24 +16,64 @@ if 'tasks' not in MAIN_CONFIG:
|
|
|
16
16
|
if 'task_logs_separated' not in MAIN_CONFIG['logs']:
|
|
17
17
|
MAIN_CONFIG['logs']['task_logs_separated'] = False
|
|
18
18
|
if MAIN_CONFIG['logs']['task_logs_separated'] and 'logs_life_hours' not in MAIN_CONFIG['logs']:
|
|
19
|
-
MAIN_CONFIG['logs']['logs_life_hours'] = 7*24
|
|
19
|
+
MAIN_CONFIG['logs']['logs_life_hours'] = 7 * 24
|
|
20
20
|
if 'success_tasks_life_hours' not in MAIN_CONFIG['logs']:
|
|
21
|
-
MAIN_CONFIG['logs']['success_tasks_life_hours'] = 7*24
|
|
21
|
+
MAIN_CONFIG['logs']['success_tasks_life_hours'] = 7 * 24
|
|
22
22
|
|
|
23
23
|
DEFAULT_LOG_LEVEL = 'INFO'
|
|
24
24
|
|
|
25
25
|
if 'dir' in MAIN_CONFIG['logs'] and MAIN_CONFIG['logs']['dir'] is not None:
|
|
26
26
|
|
|
27
27
|
log_conf = MAIN_CONFIG['logs']
|
|
28
|
-
max_bytes = log_conf['maxBytes'] if 'maxBytes' in log_conf and log_conf['maxBytes'] else 1024*1024*100
|
|
28
|
+
max_bytes = log_conf['maxBytes'] if 'maxBytes' in log_conf and log_conf['maxBytes'] else 1024 * 1024 * 100
|
|
29
29
|
backupCount = log_conf['backupCount'] if 'backupCount' in log_conf and log_conf['backupCount'] else 10
|
|
30
30
|
level = log_conf['level'] if 'level' in log_conf and log_conf['level'] else DEFAULT_LOG_LEVEL
|
|
31
31
|
sentry_enabled = log_conf.get('sentry_enabled', False)
|
|
32
32
|
|
|
33
33
|
handlers = ['console', 'common_errors', 'common']
|
|
34
34
|
|
|
35
|
+
handlers_config = {
|
|
36
|
+
'mail_admins': {
|
|
37
|
+
'level': 'ERROR',
|
|
38
|
+
'class': 'django.utils.log.AdminEmailHandler',
|
|
39
|
+
},
|
|
40
|
+
'console': {
|
|
41
|
+
'level': level,
|
|
42
|
+
'class': 'logging.StreamHandler',
|
|
43
|
+
'formatter': 'default',
|
|
44
|
+
'stream': sys.stdout
|
|
45
|
+
},
|
|
46
|
+
'common_errors': {
|
|
47
|
+
'level': 'ERROR',
|
|
48
|
+
'class': 'logging.handlers.RotatingFileHandler',
|
|
49
|
+
'filename': os.path.join(log_conf['dir'], 'botmanager_errors.log'),
|
|
50
|
+
'maxBytes': max_bytes,
|
|
51
|
+
'formatter': 'default',
|
|
52
|
+
'encoding': 'utf-8',
|
|
53
|
+
'backupCount': backupCount,
|
|
54
|
+
},
|
|
55
|
+
'common': {
|
|
56
|
+
'level': level,
|
|
57
|
+
'class': 'logging.handlers.RotatingFileHandler',
|
|
58
|
+
'filename': os.path.join(log_conf['dir'], 'botmanager.log'),
|
|
59
|
+
'maxBytes': max_bytes,
|
|
60
|
+
'formatter': 'default',
|
|
61
|
+
'encoding': 'utf-8',
|
|
62
|
+
'backupCount': backupCount,
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
35
66
|
if sentry_enabled:
|
|
36
|
-
|
|
67
|
+
try:
|
|
68
|
+
import raven
|
|
69
|
+
|
|
70
|
+
handlers.append('sentry')
|
|
71
|
+
handlers_config['sentry'] = {
|
|
72
|
+
'level': 'ERROR',
|
|
73
|
+
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
|
|
74
|
+
}
|
|
75
|
+
except ImportError:
|
|
76
|
+
raise ImportError('module "raven" not installed')
|
|
37
77
|
|
|
38
78
|
if 'mail_admins' in log_conf and log_conf['mail_admins']:
|
|
39
79
|
handlers.append('mail_admins')
|
|
@@ -46,40 +86,7 @@ if 'dir' in MAIN_CONFIG['logs'] and MAIN_CONFIG['logs']['dir'] is not None:
|
|
|
46
86
|
'format': '%(asctime)s - %(processName)s - %(levelname)s - %(message)s'
|
|
47
87
|
}
|
|
48
88
|
},
|
|
49
|
-
'handlers':
|
|
50
|
-
'sentry': {
|
|
51
|
-
'level': 'ERROR',
|
|
52
|
-
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
|
|
53
|
-
},
|
|
54
|
-
'mail_admins': {
|
|
55
|
-
'level': 'ERROR',
|
|
56
|
-
'class': 'django.utils.log.AdminEmailHandler',
|
|
57
|
-
},
|
|
58
|
-
'console': {
|
|
59
|
-
'level': level,
|
|
60
|
-
'class': 'logging.StreamHandler',
|
|
61
|
-
'formatter': 'default',
|
|
62
|
-
'stream': sys.stdout
|
|
63
|
-
},
|
|
64
|
-
'common_errors': {
|
|
65
|
-
'level': 'ERROR',
|
|
66
|
-
'class': 'logging.handlers.RotatingFileHandler',
|
|
67
|
-
'filename': os.path.join(log_conf['dir'], 'botmanager_errors.log'),
|
|
68
|
-
'maxBytes': max_bytes,
|
|
69
|
-
'formatter': 'default',
|
|
70
|
-
'encoding': 'utf-8',
|
|
71
|
-
'backupCount': backupCount,
|
|
72
|
-
},
|
|
73
|
-
'common': {
|
|
74
|
-
'level': level,
|
|
75
|
-
'class': 'logging.handlers.RotatingFileHandler',
|
|
76
|
-
'filename': os.path.join(log_conf['dir'], 'botmanager.log'),
|
|
77
|
-
'maxBytes': max_bytes,
|
|
78
|
-
'formatter': 'default',
|
|
79
|
-
'encoding': 'utf-8',
|
|
80
|
-
'backupCount': backupCount,
|
|
81
|
-
}
|
|
82
|
-
},
|
|
89
|
+
'handlers': handlers_config,
|
|
83
90
|
'loggers': {
|
|
84
91
|
'default': {
|
|
85
92
|
'handlers': handlers,
|
|
@@ -88,5 +95,6 @@ if 'dir' in MAIN_CONFIG['logs'] and MAIN_CONFIG['logs']['dir'] is not None:
|
|
|
88
95
|
},
|
|
89
96
|
}
|
|
90
97
|
}
|
|
98
|
+
|
|
91
99
|
else:
|
|
92
100
|
TASKS_LOGGING = None
|
{django-botmanager-0.1.14 → django-botmanager-0.2.15}/django_botmanager.egg-info/SOURCES.txt
RENAMED
|
@@ -20,9 +20,11 @@ botmanager/migrations/0007_task_is_persistent.py
|
|
|
20
20
|
botmanager/migrations/0008_auto_20170331_1752.py
|
|
21
21
|
botmanager/migrations/0009_task_extra_params.py
|
|
22
22
|
botmanager/migrations/0010_auto_20170531_1321.py
|
|
23
|
+
botmanager/migrations/0011_alter_task_create_dt_alter_task_id.py
|
|
23
24
|
botmanager/migrations/__init__.py
|
|
24
25
|
django_botmanager.egg-info/PKG-INFO
|
|
25
26
|
django_botmanager.egg-info/SOURCES.txt
|
|
26
27
|
django_botmanager.egg-info/dependency_links.txt
|
|
28
|
+
django_botmanager.egg-info/pbr.json
|
|
27
29
|
django_botmanager.egg-info/requires.txt
|
|
28
30
|
django_botmanager.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"is_release": false, "git_version": "52264f9"}
|
|
@@ -3,14 +3,14 @@ from setuptools import setup, find_packages
|
|
|
3
3
|
|
|
4
4
|
setup(
|
|
5
5
|
name='django-botmanager',
|
|
6
|
-
version='0.
|
|
6
|
+
version='0.2.15',
|
|
7
7
|
description='Async tasks for django',
|
|
8
8
|
author='Dimoha',
|
|
9
9
|
author_email='dimoha@controlstyle.ru',
|
|
10
10
|
url='https://github.com/dimoha/django-botmanager',
|
|
11
11
|
install_requires=[
|
|
12
12
|
"setproctitle==1.1.10",
|
|
13
|
-
"jsonfield==1.0
|
|
13
|
+
"jsonfield==3.1.0",
|
|
14
14
|
"psutil==5.8.0"
|
|
15
15
|
],
|
|
16
16
|
packages=find_packages(),
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
from __future__ import unicode_literals
|
|
3
|
-
from django.db import models
|
|
4
|
-
from jsonfield import JSONField
|
|
5
|
-
from datetime import timedelta, datetime
|
|
6
|
-
from django.utils import timezone
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class Task(models.Model):
|
|
10
|
-
|
|
11
|
-
STATUS_NEW = 'NEW'
|
|
12
|
-
STATUS_IN_PROCESS = 'IN_PROCESS'
|
|
13
|
-
STATUS_OK = 'OK'
|
|
14
|
-
|
|
15
|
-
STATUSES = (
|
|
16
|
-
(STATUS_NEW, u'В ожидании'),
|
|
17
|
-
(STATUS_IN_PROCESS, u'Идет загрузка'),
|
|
18
|
-
(STATUS_OK, u'Данные загружены'),
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
name = models.CharField(max_length=256, verbose_name=u'Название')
|
|
22
|
-
create_dt = models.DateTimeField(verbose_name=u"Дата создания задачи", auto_now_add=True)
|
|
23
|
-
finish_dt = models.DateTimeField(verbose_name=u"Дата завершения", null=True, blank=True)
|
|
24
|
-
is_complete = models.BooleanField(verbose_name=u"Выполнена", default=False)
|
|
25
|
-
is_failed = models.BooleanField(verbose_name=u"Аварийное завершение", default=False)
|
|
26
|
-
is_persistent = models.BooleanField(verbose_name=u"Выполнять пока не завершится успешно", default=True)
|
|
27
|
-
in_process = models.BooleanField(verbose_name=u"В процессе", default=False)
|
|
28
|
-
|
|
29
|
-
input = JSONField(null=True, blank=True)
|
|
30
|
-
output = JSONField(null=True, blank=True)
|
|
31
|
-
last_error = JSONField(null=True, blank=True)
|
|
32
|
-
extra_params = JSONField(null=True, blank=True)
|
|
33
|
-
|
|
34
|
-
last_error_dt = models.DateTimeField(verbose_name=u"Дата последнего fail-а", null=True, blank=True)
|
|
35
|
-
queue_key = models.CharField(max_length=32, verbose_name=u'Ключ группировки задач')
|
|
36
|
-
failed_action = models.CharField(max_length=256, verbose_name=u'Action, на котором произошла ошибка', null=True, blank=True)
|
|
37
|
-
attempt_count = models.SmallIntegerField(verbose_name=u'Счетчик попыток', default=0)
|
|
38
|
-
last_attempt_dt = models.DateTimeField(verbose_name=u"Последняя попытка выполнения", null=True, blank=True)
|
|
39
|
-
max_attempt_count = models.IntegerField(
|
|
40
|
-
verbose_name=u"Максимальное кол-во попыток выполнение (если None, то бесконечно)", null=True, blank=True
|
|
41
|
-
)
|
|
42
|
-
attempt_period = models.DurationField(verbose_name=u'Период между попытками', default=timedelta(hours=1))
|
|
43
|
-
parent = models.ForeignKey('self', verbose_name=u'Родительская задача', null=True, blank=True, related_name='child_tasks', on_delete=models.CASCADE)
|
|
44
|
-
priority = models.SmallIntegerField(default=0)
|
|
45
|
-
|
|
46
|
-
def __unicode__(self):
|
|
47
|
-
return "Task {0} #{1}".format(self.name, self.id)
|
|
48
|
-
|
|
49
|
-
@property
|
|
50
|
-
def can_execute(self):
|
|
51
|
-
if not self.is_complete and not self.in_process:
|
|
52
|
-
if self.is_failed:
|
|
53
|
-
if self.last_attempt_dt + self.attempt_period > timezone.now():
|
|
54
|
-
return False
|
|
55
|
-
else:
|
|
56
|
-
if self.max_attempt_count is None:
|
|
57
|
-
return True
|
|
58
|
-
else:
|
|
59
|
-
if self.attempt_count < self.max_attempt_count:
|
|
60
|
-
return True
|
|
61
|
-
else:
|
|
62
|
-
return False # надо пофиксить is_complete ?
|
|
63
|
-
else:
|
|
64
|
-
return True
|
|
65
|
-
else:
|
|
66
|
-
return False
|
|
67
|
-
|
|
68
|
-
class Meta:
|
|
69
|
-
db_table = 'botmanager_task'
|
|
70
|
-
verbose_name = u"Задача для BotManager"
|
|
71
|
-
verbose_name_plural = u"Задачи для BotManager"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/management/commands/__init__.py
RENAMED
|
File without changes
|
{django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/management/commands/bot_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0005_task_parent.py
RENAMED
|
File without changes
|
{django-botmanager-0.1.14 → django-botmanager-0.2.15}/botmanager/migrations/0006_task_priority.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django-botmanager-0.1.14 → django-botmanager-0.2.15}/django_botmanager.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|