Advertisement
Guest User

Untitled

a guest
Oct 4th, 2017
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.50 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. from django.db import models
  3.  
  4. from datetime import datetime
  5.  
  6. import socket,time, math
  7.  
  8. from vas.supervisor.customer import consts
  9.  
  10. from django.db import connection
  11.  
  12.  
  13. #__ext_errors = None
  14.  
  15. __errcodes = { -1:u'Невідомо',
  16. 0:u'OK',
  17. 1:u'Внутрішня помилка черги',
  18. 2:u'Помилка при відправленні',
  19. 3:u'Неможливо відправити SMS',
  20. 4:u'Маршрут відсутній',
  21. 5:u'Таймаут',
  22. 6:u'Чекає',
  23. 7:u'Чекає повторної відправки',
  24. 8:u'Знищено',
  25. 9:u'Неможливо доставити вчасно',
  26. 10:u'Внутрішня помилка біллінгу',
  27. 11:u'DR для невідомого SMS',
  28. 12:u'Невірний агент',
  29. 100:u'Чекає',
  30. 101:u'Зчитується з черги',
  31. 102:u'Заплановано для доставки'}
  32.  
  33. __drstates = { -2 : u'',
  34. -1 : u'n/a',
  35. 0 : u'n/a',
  36. 48 : u'Доставлено',
  37. 49 : u'Не доставлено',
  38. 50 : u'Невідомий статус',
  39. 51 : u'Вийшов час',
  40. 52 : u'Немає відповіді',
  41. 53 : u'Відмінено',
  42. 54 : u'Видалено',
  43. 55 : u'Буферизовано',
  44. 56 : u'Підтверджено користувачем',
  45. 57 : u'Неможливо доставити',
  46. 58 : u'Неможливо доставити',
  47. 59 : u'Передано оператору',
  48. 60 : u'Відмовлено оператором' }
  49.  
  50. __ext_errors = { -1 : u'n/a',
  51. 0 : u'n/a',
  52. 1 : u'Невідомий абонент',
  53. 5 : u'Невідомий абонент',
  54. 6 : u'Абонент відсутній',
  55. 7 : u'Несумісне обладнання',
  56. 8 : u'Абонент відсутній',
  57. 9 : u'Невідомий абонент',
  58. 10 : u'Сервіс заблоковано',
  59. 11 : u'Сервіс заблоковано',
  60. 12 : u'Несумісне обладнання',
  61. 13 : u'Сервіс заблоковано',
  62. 27 : u'Абонент відсутній',
  63. 28 : u'Несумісне обладнання',
  64. 31 : u'Абонент зайнятий для SMS',
  65. 32 : u'Помилка доставки SMS',
  66. 42 : u'Абонент відсутній', # насправді - ні
  67. 43 : u'Невідома помилка',
  68. 45 : u'Абонент зайнятий для SMS',
  69. 1029 : u'Абонент відсутній',
  70. 4367 : u'Сервіс заблоковано',
  71. 1041 : u'Помилковий статус',
  72. 1042 : u'Абонент відсутній',
  73. 1043 : u'Сервіс заблоковано',
  74. 1044 : u'Несумісне обладнання',
  75. 8219 : u'Абонент відсутній',
  76. 4124 : u'Несумісне обладнання'
  77. }
  78.  
  79. def ext_errors(id):
  80. global __ext_errors
  81. if __ext_errors == None:
  82. __ext_errors = {}
  83. ee = ExtError.objects.all()
  84. for err in ee:
  85. __ext_errors[err.id] = (err.desc, err.customer_desc)
  86. if id in __ext_errors:
  87. return __ext_errors[id]
  88. else:
  89. return None
  90.  
  91. class User(models.Model):
  92. name = models.CharField(max_length = 100)
  93. login = models.CharField(max_length = 20)
  94. password = models.CharField(max_length = 20)
  95. enabled = models.BooleanField()
  96. minick_account = models.IntegerField()
  97.  
  98. def __str__(self):
  99. return self.name
  100.  
  101. class Meta:
  102. db_table = 'users'
  103.  
  104. class UserSetting(models.Model):
  105. user = models.ForeignKey(User, db_column = 'id_user')
  106. name = models.CharField(max_length = 20)
  107. value = models.CharField(max_length = 50, db_column = 'val')
  108.  
  109. def __str__(self):
  110. return self.user.name + "." + self.name
  111.  
  112. def apply_settings(self, user, new_settings):
  113. # clear all settings
  114. UserSetting.objects.filter(user = user).delete()
  115. for key in new_settings.keys():
  116. us = UserSetting()
  117. us.user = user
  118. us.name = key
  119. us.value = new_settings[key]
  120. us.save()
  121. return None
  122.  
  123. def modify_setting(self, user, name, value):
  124. UserSetting.objects.filter(user = user, name = name).delete()
  125. us = UserSetting()
  126. us.user = user
  127. us.name = name
  128. us.value = value
  129. us.save()
  130.  
  131. class Meta:
  132. db_table = 'user_settings'
  133.  
  134. class UserSettings:
  135. def __init__(self, user):
  136. self.user = user
  137. self.params = {}
  138. settings = UserSetting.objects.filter(user = self.user)
  139. for option in settings:
  140. self.params[option.name] = option.value
  141.  
  142. def contains(self, key):
  143. return key in self.params
  144.  
  145. def get(self, key):
  146. if key in self.params:
  147. return self.params[key]
  148. else:
  149. return None
  150.  
  151. def getd(self, key, default):
  152. if key in self.params:
  153. return self.params[key]
  154. else:
  155. return default
  156.  
  157. def __str__(self):
  158. return str(self.params)
  159.  
  160.  
  161. class MinickAccount(models.Model):
  162. user = models.ForeignKey(User, db_column = 'user_id')
  163. minick_account = models.IntegerField(db_column = 'minick_account_id')
  164. account_type = models.IntegerField(choices = ((0, "Bulk"), (1, "Notifications")))
  165. comment = models.CharField(max_length = 45)
  166.  
  167. def apply_accounts(self, user, new_accounts):
  168. # clear all settings
  169. MinickAccount.objects.filter(user = user).delete()
  170. for key in new_accounts.keys():
  171. us = MinickAccount()
  172. us.user = user
  173. us.account_type = key
  174. us.minick_account = new_accounts[key][0]
  175. us.comment = new_accounts[key][1]
  176. us.save()
  177.  
  178. def __str__(self):
  179. return self.comment + " (" + self.user.name + " - " + str(self.minick_account) + ")"
  180.  
  181. class Meta:
  182. db_table = 'minick_accounts'
  183.  
  184. class Message:
  185. pass
  186.  
  187. class Job(models.Model):
  188. name = models.CharField(max_length = 100)
  189. user = models.ForeignKey(User, db_column = 'id_user')
  190. plan_start = models.DateTimeField(db_column = 'planned_start_date')
  191. actual_start = models.DateTimeField(db_column = 'actual_start_date')
  192. rate = models.FloatField()
  193. run_from = models.TimeField()
  194. run_till = models.TimeField()
  195. finished = models.DateTimeField(db_column = 'finished_date')
  196. status = models.IntegerField()
  197. deadline = models.IntegerField(db_column = 'deadline_hrs')
  198. paused = models.BooleanField()
  199. sms_template = models.CharField(max_length = 320)
  200. originator_ton = models.IntegerField()
  201. originator_npi = models.IntegerField()
  202. originator = models.CharField(max_length = 45)
  203. separator = models.CharField(max_length = 3)
  204. reset_counter = models.IntegerField()
  205. last_msg_date = models.DateTimeField()
  206. validity_period = models.IntegerField()
  207. phone = models.CharField(max_length = 20)
  208. user_deleted = models.IntegerField()
  209. who_ch_st = models.IntegerField()
  210. who_paused = models.IntegerField()
  211. who_del = models.IntegerField()
  212. is_push = 0
  213. num_file_name = models.CharField(max_length = 50)
  214. is_exporting = models.DateTimeField()
  215. export_ready = models.IntegerField()
  216.  
  217. def txt_status(self):
  218. if self.status <= 0:
  219. return "Не завантажено"
  220. elif self.status == 1:
  221. return "Завантажено"
  222. elif self.status == 2:
  223. return "Оброблюється"
  224. elif self.status == 3:
  225. return "Чекає DR"
  226. elif self.status == 4:
  227. return "Завершено"
  228. elif self.status == 5:
  229. return "Експортовано"
  230. else:
  231. return "Дивно"
  232.  
  233. def txt_status2(self):
  234. if self.paused:
  235. return "Пауза"
  236. if self.status <= 0:
  237. return "Не завантажено"
  238. elif self.status == 1:
  239. return "Завантажено"
  240. elif self.status == 2:
  241. return "Оброблюється"
  242. elif self.status == 3:
  243. return "Чекає DR"
  244. elif self.status == 4:
  245. return "Завершено"
  246. elif self.status == 5:
  247. return "Експортовано"
  248. else:
  249. return "Дивно"
  250.  
  251.  
  252. def get_msg_count(self):
  253. return Message.objects.filter(job = self).count()
  254.  
  255. def calc_msg_additional(self):
  256. self.sent_only = Message.objects.filter(job = self).filter(status__in = [2]).count()
  257. self.sent_failed = Message.objects.filter(job = self).filter(status__in = [1,3]).count()
  258.  
  259. def calculate_msg_count(self):
  260. messages = Message.objects.filter(job = self)
  261. #messages = Message.objects.raw("SELECT * FROM messages WHERE id_job=" + self.id)
  262. noc_in_msgs = 0
  263. for message in messages:
  264. if consts.noc in message.dest:
  265. noc_in_msgs += 1
  266. self.msg_count = self.get_msg_count()
  267. if self.msg_count != 0 and noc_in_msgs:
  268. self.msg_count = self.msg_count-noc_in_msgs
  269. self.unsent_count = Message.objects.filter(job = self).filter(status = 0).count()
  270. self.sent_count = Message.objects.filter(job = self).filter(status__in = [1,2,3,4,5]).count()
  271. if self.sent_count != 0 and noc_in_msgs:
  272. self.sent_count = self.sent_count-noc_in_msgs
  273. self.dlvr_count = Message.objects.filter(job = self).filter(status = 4).count()
  274. if self.dlvr_count != 0 and noc_in_msgs:
  275. self.dlvr_count = self.dlvr_count-noc_in_msgs
  276. #self.udlvr_count = Message.objects.filter(job = self).filter(status = 5).count()
  277. self.udlvr_count = self.sent_count - self.dlvr_count
  278.  
  279. def calculate_msg_count2(self):
  280. cursor = connection.cursor().cursor
  281. sql = "SELECT status, COUNT(id) FROM messages WHERE id_job=" +\
  282. str(self.id) + " AND dest!='" + consts.noc + "' GROUP BY status;"
  283. cursor.execute(sql)
  284. rows = cursor.fetchall()
  285. result = {}
  286. for row in rows:
  287. result[int(row[0])] = int(row[1])
  288. self.msg_count = result.get(0, 0) + result.get(1, 0) + result.get(2, 0) +\
  289. result.get(3, 0) + result.get(4, 0) + result.get(5, 0)
  290. self.unsent_count = result.get(0, 0)
  291. self.sent_count = result.get(1, 0) + result.get(2, 0) + result.get(3, 0) +\
  292. result.get(4, 0) + result.get(5, 0)
  293. self.dlvr_count = result.get(4, 0)
  294. self.udlvr_count = self.sent_count - self.dlvr_count
  295.  
  296.  
  297. def get_operator_distribution(self):
  298. from django.db import connection
  299. query = connection.cursor()
  300. query.execute('select count(id), nwc from messages where id_job = ' + str(self.id) + \
  301. ' group by 2')
  302. rows = query.fetchall()
  303. result = {}
  304. for row in rows:
  305. result[row[1]] = row[0]
  306.  
  307. return result
  308.  
  309. def calc_sms_quan(self):
  310. text = self.sms_template
  311. if '{' not in text :
  312. text_len = len(text)
  313. isUcsFlag = False
  314. if (isUcs(text)):
  315. isUcsFlag = True
  316. sms_quan = 1
  317. if (not isUcsFlag):
  318. text_len += getExtGsm(text)
  319. if (isUcsFlag):
  320. if (text_len < 71):
  321. sms_quan = 1
  322. else:
  323. sms_quan = math.ceil(text_len/67.0)
  324. else:
  325. if (text_len < 161):
  326. sms_quan = 1
  327. else:
  328. sms_quan = math.ceil(text_len/153.0)
  329. return int(sms_quan)
  330. else:
  331. return ''
  332.  
  333. def separator_idx(self):
  334. return {"\t":1, ",":2, ";":3}[self.separator]
  335.  
  336. def editable(self):
  337. return self.status <= 0
  338.  
  339. def __str__(self):
  340. return self.name
  341.  
  342. class Meta:
  343. db_table = 'jobs'
  344.  
  345. class Message(models.Model):
  346. extra_id = models.CharField(max_length = 30)
  347. orig = models.CharField(max_length = 20)
  348. dest = models.CharField(max_length = 20)
  349. text = models.CharField(max_length = 320)
  350. status = models.IntegerField()
  351. time_in = models.DateTimeField()
  352. time_sent = models.DateTimeField(null = True, blank = True)
  353. time_dr = models.DateTimeField(null = True, blank = True)
  354. job = models.ForeignKey(Job, db_column = 'id_job')
  355. error = models.IntegerField()
  356. attempts = models.IntegerField()
  357. sequence_number = models.IntegerField()
  358. message_id = models.CharField(max_length = 45)
  359. time_scheduled = models.DateTimeField(null = True, blank = True)
  360. nwc = models.IntegerField(null = True, blank = True)
  361. ext_error = models.IntegerField(null = True, blank = True)
  362. id_text = models.IntegerField(null = True, blank = True)
  363.  
  364. __nwc = {
  365.  
  366. '38050': 25501,
  367. '38066': 25501,
  368. '38095': 25501,
  369. '38099': 25501,
  370.  
  371. '38068': 25502,
  372.  
  373. '38067': 25503,
  374. '38096': 25503,
  375. '38097': 25503,
  376. '38098': 25503,
  377.  
  378. '38039': 25504,
  379.  
  380. '38063': 25506,
  381. '38093': 25506,
  382.  
  383. '38091': 25507,
  384.  
  385. '38092': 25521,
  386.  
  387. '38094': 25522
  388. }
  389.  
  390. def find_nwc(self):
  391. prefix = self.dest[:5]
  392. if prefix in self.__nwc:
  393. self.nwc = self.__nwc[prefix]
  394. else:
  395. self.nwc = 0
  396.  
  397. #def __init__(self):
  398. def clear(self):
  399. #models.Model.__init__(self)
  400. self.error = 0
  401. self.attempts = 0
  402. self.status = 0
  403. self.time_scheduled = None
  404. self.nwc = 0
  405. self.sequence_number = 0
  406. self.message_id = ''
  407.  
  408. def txt_status(self):
  409. if self.status == 0:
  410. return 'Не відправлено'
  411. elif self.status == 1:
  412. return 'Відправлено, без submit_sm_resp'
  413. elif self.status == 2:
  414. return 'Відправлено'
  415. elif self.status == 3:
  416. return 'Помилка відправлення'
  417. elif self.status == 4:
  418. return 'Доставлено'
  419. elif self.status == 5:
  420. #return 'Недоставлено (' + self.txt_error() + ')'
  421. return 'Недоставлено'
  422.  
  423. def txt_status2(self):
  424. if self.status == 0 or self.status == 1:
  425. return 'Не відправлено'
  426. elif self.status == 2:
  427. return 'Відправлено'
  428. elif self.status == 3:
  429. return 'Помилка відправлення'
  430. elif self.status == 4:
  431. return 'Доставлено'
  432. elif self.status == 5:
  433. #return 'Недоставлено (' + self.txt_error() + ')'
  434. return 'Недоставлено'
  435.  
  436. def txt_error(self):
  437. if self.error == -10:
  438. return 'Таймаут'
  439. elif self.error == -11:
  440. return 'Invalid message'
  441. elif self.error == -19:
  442. return 'Enroute'
  443. elif self.error == -20:
  444. return 'Expired'
  445. elif self.error == -21:
  446. return 'Deleted'
  447. elif self.error == -22:
  448. return 'Undeliverable'
  449. elif self.error == -23:
  450. return 'Accepted'
  451. elif self.error == -24:
  452. return 'Unknown'
  453. elif self.error == -25:
  454. return 'Rejected'
  455. else:
  456. return 'Unknown (' + str(self.error) + ')'
  457.  
  458. def txt_error2(self):
  459. if self.error == -11 or self.ext_error == -11:
  460. return 'Невірне повідомлення'
  461. elif self.error == -19 or self.ext_error == -19:
  462. return 'Доставляється'
  463. elif self.error == -20 or self.ext_error == -20:
  464. return 'Час вийшов'
  465. elif self.error == -21 or self.ext_error == -21:
  466. return 'Видалено'
  467. elif self.error == -22 or self.ext_error == -22:
  468. return 'Неможливо доставити'
  469. elif self.error == -23 or self.ext_error == -23:
  470. return 'Прийнято'
  471. elif self.error == -24 or self.ext_error == -24:
  472. return 'Невідомо'
  473. elif self.error == -25 or self.ext_error == -25:
  474. return 'Відкинуто'
  475. elif self.error == 0:
  476. return ''
  477. elif self.error == -10:
  478. return 'Внутрішня помилка'
  479. elif self.error == 53:
  480. return 'Відмінено'
  481. else:
  482. return 'Невідомо (' + str(self.error) + ')'
  483.  
  484. def customer_ext_error(self):
  485. s = ext_errors(self.ext_error)
  486. if self.status == 2:
  487. return u'Чекає DR'
  488. elif self.status == 4:
  489. return u'Доставлено'
  490. elif self.status == 3 or self.status == 5:
  491. return u'Недоставлено'
  492. elif s:
  493. return s;
  494. else:
  495. return u''
  496. #elif self.error == -20:
  497. # return u'Абонент відсутній'
  498. #if s == None:
  499. # return u'Невідомо'
  500. #else:
  501. # return s
  502.  
  503. def compiled_text_simple(self):
  504. if self.job.sms_template != '':
  505. msg = self.job.sms_template
  506. if self.text != None and self.text != '':
  507. msg = msg + ' (' + self.text + ')'
  508. return msg
  509. else:
  510. return self.text
  511.  
  512. def compiled_text(self):
  513. if self.job.sms_template != '':
  514. msg = self.job.sms_template
  515. if self.text != None and self.text != '':
  516. params = self.text.split(self.job.separator)
  517. for i in range(len(params)):
  518. msg = msg.replace('{' + str(i) + '}', params[i])
  519. return msg
  520. else:
  521. return self.text
  522.  
  523. def calc_sms_quan(self):
  524. text = self.compiled_text()
  525. text_len = len(text)
  526. isUcsFlag = False
  527. if (isUcs(text)):
  528. isUcsFlag = True
  529. sms_quan = 1
  530. if (not isUcsFlag):
  531. text_len += getExtGsm(text)
  532. if (isUcsFlag):
  533. if (text_len < 71):
  534. sms_quan = 1
  535. else:
  536. sms_quan = math.ceil(text_len/67.0)
  537. else:
  538. if (text_len < 161):
  539. sms_quan = 1
  540. else:
  541. sms_quan = math.ceil(text_len/153.0)
  542. return int(sms_quan)
  543.  
  544.  
  545. def __str__(self):
  546. return self.orig + '>' + self.dest
  547.  
  548. class Meta:
  549. db_table = 'messages'
  550.  
  551. def getExtGsm(text):
  552. q = 0
  553. for i in text:
  554. for j in consts.extGsm:
  555. if i == j:
  556. q += 1
  557. return q
  558.  
  559. def getExtGsmChar(char):
  560. if char in consts.extGsm:
  561. return True
  562. else:
  563. return False
  564.  
  565. def isUcs(text):
  566. try:
  567. y = text.encode('latin1')
  568. return False
  569. except Exception:
  570. return True
  571.  
  572. class ParameterDef(models.Model):
  573. param_name = models.CharField(max_length = 45)
  574. description = models.CharField(max_length = 145)
  575. mandatory = models.BooleanField()
  576. allowed_values = models.CharField(max_length = 75)
  577.  
  578. value = ''
  579.  
  580. class Meta:
  581. db_table = 'parameters'
  582.  
  583. class AccountType(models.Model):
  584. act_type = models.IntegerField()
  585. description = models.CharField(max_length = 50)
  586.  
  587. value = ''
  588. com_value = ''
  589.  
  590. class Meta:
  591. db_table = 'account_types'
  592.  
  593. class Logging(models.Model):
  594. from django.contrib.auth.models import User
  595.  
  596. action = models.CharField(max_length = 90)
  597. action_time = models.DateTimeField(default = datetime.now())
  598. user = models.ForeignKey(User)
  599.  
  600. def log_action(user, info):
  601. log = Logging(action = info, user = user)
  602. log.save()
  603.  
  604. class Operator(models.Model):
  605. nwc = models.IntegerField(primary_key = True)
  606. operator = models.CharField(max_length = 45, db_column='opname')
  607. active = models.BooleanField()
  608.  
  609. class Meta:
  610. db_table = 'nwc'
  611.  
  612. class ExtError(models.Model):
  613. ext_error_val = models.IntegerField()
  614. desc = models.CharField(max_length = 45, db_column = 'ext_error_desc')
  615. customer_desc = models.CharField(max_length = 45)
  616.  
  617. class Meta:
  618. db_table = 'ext_error'
  619.  
  620. class Script(models.Model):
  621. name = models.CharField(max_length = 50)
  622. ctrl_server = models.CharField(max_length = 20)
  623. ctrl_port = models.IntegerField()
  624. script_server = models.CharField(max_length = 20)
  625. script_port = models.IntegerField()
  626. script_path = models.CharField(max_length = 150)
  627.  
  628. WEIRD_STATE = -1
  629. NOT_STARTED = 0
  630. RUNNING = 1
  631.  
  632. status = "N/A"
  633. istatus = WEIRD_STATE
  634. connected = False
  635.  
  636. def send_command(self, command, wait = 0.1):
  637. print "Sending ", command
  638. self.socket.send(command + "\n")
  639. print "Receiving"
  640. try:
  641. time.sleep(wait)
  642. result = self.socket.recv(1024).strip()
  643. print "Received: ", result
  644. return result
  645. except Exception,ex:
  646. print "error", ex
  647.  
  648. def parse_status(self, status):
  649. st = status.lower()
  650. if status == "n/a":
  651. return self.WEIRD_STATE
  652. elif status == "not started":
  653. return self.NOT_STARTED
  654. elif status == "stopped":
  655. return self.WEIRD_STATE
  656. elif status == "sleeping" or status == "running":
  657. return self.RUNNING
  658. else:
  659. return self.WEIRD_STATE
  660.  
  661. def init_connection(self):
  662. self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  663. try:
  664. self.socket.connect((self.ctrl_server, self.ctrl_port))
  665. #self.socket.settimeout(15)
  666. self.socket.setblocking(1)
  667. result = self.send_command(":service " + str(self.id))
  668. if result == "OK":
  669. result = self.send_command(":connect")
  670. if result.strip() == "OK":
  671. self.connected = True
  672. self.status = "N/A"
  673. else:
  674. print "Cannot connect, possible not started"
  675. self.connected = False;
  676. self.status = "not started"
  677. self.istatus = self.parse_status(self.status)
  678. except Exception, err:
  679. print "Failure: ", err
  680. self.connected = False
  681. self.socket = None
  682. self.status = 'N/A'
  683. self.istatus = self.WEIRD_STATE
  684. print "status: ", self.status, "istatus: ", self.istatus
  685.  
  686. def get_status(self):
  687. self.init_connection()
  688. self.check_status()
  689. self.close_connection()
  690. return self.status
  691.  
  692. def check_status(self):
  693. if self.connected:
  694. self.status = self.send_command("status", 0.5)
  695. else:
  696. self.status = "N/A"
  697. print "Recieved script status: ", self.status
  698. self.istatus = self.parse_status(self.status)
  699.  
  700. def close_connection(self):
  701. if self.socket != None:
  702. try:
  703. self.send_command(":quit")
  704. except:
  705. print "Cannot close"
  706.  
  707. def start(self):
  708. if self.connected:
  709. self.send_command(":start", 20)
  710.  
  711. def stop(self):
  712. if self.connected:
  713. self.send_command("shutdown", 0.5)
  714.  
  715. def restart(self):
  716. if self.connected:
  717. self.send_command("restart", 0.5)
  718.  
  719. class BlackList(models.Model):
  720. user = models.ForeignKey(User, db_column = 'id_user')
  721. alphaname = models.CharField(max_length = 20, db_column = 'alphaname')
  722. list = models.CharField(max_length = 10000, db_column = 'list')
  723.  
  724. def aply_new_list(self, list_dict):
  725. list = ''
  726. for item in list_dict:
  727. list += item + ";"
  728. list = list[:-2]
  729. print list
  730.  
  731.  
  732. #def __str__(self):
  733. #return self.user.name + "." + self.name
  734.  
  735. class Meta:
  736. db_table = 'black_list'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement