| @@ -7,7 +7,7 @@ from jsonfield import JSONField | ||
| 7 | 7 | from TimeConvert import TimeConvert as tc | 
| 8 | 8 |  | 
| 9 | 9 | from kodo.basemodels import LensmanTypeBoolMixin | 
| 10 | -from mch.models import MaintenancemanInfo, SaleclerkInfo, ConsumeInfoSubmitLogInfo | |
| 10 | +from mch.models import ConsumeInfoSubmitLogInfo, MaintenancemanInfo, SaleclerkInfo | |
| 11 | 11 | from sales.models import SalesResponsibilityInfo | 
| 12 | 12 |  | 
| 13 | 13 |  | 
| @@ -542,7 +542,7 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): | ||
| 542 | 542 | 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'), | 
| 543 | 543 | 'code_version': self.code_version, | 
| 544 | 544 |  | 
| 545 | - #商品信息 | |
| 545 | + # 商品信息 | |
| 546 | 546 | 'models': list(models), | 
| 547 | 547 |  | 
| 548 | 548 | # 会员信息 | 
| @@ -16,9 +16,9 @@ from TimeConvert import TimeConvert as tc | ||
| 16 | 16 | from account.models import UserInfo | 
| 17 | 17 | from coupon.models import UserCouponInfo | 
| 18 | 18 | from integral.models import SaleclerkSubmitLogInfo | 
| 19 | -from mch.models import AdministratorInfo, ConsumeInfoSubmitLogInfo, ModelInfo, DistributorInfo | |
| 20 | -from member.models import GoodsOrderInfo | |
| 21 | 19 | from logs.models import MchInfoEncryptLogInfo | 
| 20 | +from mch.models import AdministratorInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo | |
| 21 | +from member.models import GoodsOrderInfo | |
| 22 | 22 | from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo | 
| 23 | 23 | from utils.error.errno_utils import (AdministratorStatusCode, ProductBrandStatusCode, ProductCouponStatusCode, | 
| 24 | 24 | ProductMachineStatusCode, UserStatusCode) | 
| @@ -238,7 +238,7 @@ def query_userinfo(request): | ||
| 238 | 238 |  | 
| 239 | 239 | if sex: | 
| 240 | 240 | userinfos = userinfos.filter(sex=sex) | 
| 241 | - | |
| 241 | + | |
| 242 | 242 | if province: | 
| 243 | 243 | userinfos = userinfos.filter(province_name=province) | 
| 244 | 244 |  | 
| @@ -407,7 +407,7 @@ def statistic_distributor(request): | ||
| 407 | 407 |  | 
| 408 | 408 | model_logs = SaleclerkSubmitLogInfo.objects.raw(model_sql) | 
| 409 | 409 |          model_logs = [{'model_uni_name': log.model_uni_name, 'num': log.num, 'code1': log.code1, 'code2': log.code2, 'has_code1_scan_num': log.has_code1_scan_num, 'has_code2_scan_num': log.has_code2_scan_num} for log in model_logs] | 
| 410 | - | |
| 410 | + | |
| 411 | 411 | distributor_logs = [] | 
| 412 | 412 | if distributor_name == '': | 
| 413 | 413 |          distributor_sql = 'select id, distributor_name, Count(*) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2, Count((code_version=1 AND has_scan=True) or NULL) AS has_code1_scan_num, Count((code_version=2 AND has_scan=True) or NULL) AS has_code2_scan_num FROM integral_saleclerksubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND test_sn=False AND status=True %s GROUP BY distributor_name;' % (start_time, end_time, ('AND model_uni_name="%s"' % (model_name)) if model_name else '') | 
| @@ -497,7 +497,7 @@ def statistic_consumer(request): | ||
| 497 | 497 |  | 
| 498 | 498 | model_logs = ConsumeInfoSubmitLogInfo.objects.raw(model_sql) | 
| 499 | 499 |          model_logs = [{'model_uni_name': log.model_uni_name, 'num': log.num, 'code1': log.code1, 'code2': log.code2} for log in model_logs] | 
| 500 | - | |
| 500 | + | |
| 501 | 501 |      province_sql = 'select id, province, Count(id) AS num, Count(code_version=1 or NULL) AS code1, Count(code_version=2 or NULL) AS code2 FROM mch_consumeinfosubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND status=True %s GROUP BY province ORDER BY num desc;' % (start_time, end_time, ('AND model_uni_name="%s"' % (model_name)) if model_name else '') | 
| 502 | 502 |  | 
| 503 | 503 | province_logs = ConsumeInfoSubmitLogInfo.objects.raw(province_sql) | 
| @@ -647,6 +647,7 @@ def record_sale(request): | ||
| 647 | 647 | 'left': left | 
| 648 | 648 | }) | 
| 649 | 649 |  | 
| 650 | + | |
| 650 | 651 | def model_list(request): | 
| 651 | 652 |      brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | 
| 652 | 653 |      admin_id = request.POST.get('admin_id', '') | 
| @@ -664,7 +665,8 @@ def model_list(request): | ||
| 664 | 665 |      return response(200, 'Get Model List Success', u'获取型号列表成功', data={ | 
| 665 | 666 | 'models': infos | 
| 666 | 667 | }) | 
| 667 | - | |
| 668 | + | |
| 669 | + | |
| 668 | 670 | def distributor_list(request): | 
| 669 | 671 |      brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | 
| 670 | 672 |      admin_id = request.POST.get('admin_id', '') | 
| @@ -682,7 +684,8 @@ def distributor_list(request): | ||
| 682 | 684 |      return response(200, 'Get Model List Success', u'获取经销商列表成功', data={ | 
| 683 | 685 | 'distributors': infos | 
| 684 | 686 | }) | 
| 685 | - | |
| 687 | + | |
| 688 | + | |
| 686 | 689 | def member_goods_order(request): | 
| 687 | 690 |      brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | 
| 688 | 691 |      admin_id = request.POST.get('admin_id', '') | 
| @@ -714,6 +717,7 @@ def member_goods_order(request): | ||
| 714 | 717 | 'count': count | 
| 715 | 718 | }) | 
| 716 | 719 |  | 
| 720 | + | |
| 717 | 721 | def member_goods_order_update(request): | 
| 718 | 722 |      brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | 
| 719 | 723 |      admin_id = request.POST.get('admin_id', '') | 
| @@ -732,6 +736,7 @@ def member_goods_order_update(request): | ||
| 732 | 736 |  | 
| 733 | 737 | return response(200, 'Get Member Goods Order Update Success', u'获取会员商品订单修改成功') | 
| 734 | 738 |  | 
| 739 | + | |
| 735 | 740 | def record_warehouse(request): | 
| 736 | 741 |      brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | 
| 737 | 742 |      admin_id = request.POST.get('admin_id', '') | 
| @@ -749,17 +754,17 @@ def record_warehouse(request): | ||
| 749 | 754 | administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) | 
| 750 | 755 | except AdministratorInfo.DoesNotExist: | 
| 751 | 756 | return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) | 
| 752 | - | |
| 757 | + | |
| 753 | 758 |      models = ModelInfo.objects.filter(model_name__icontains=model_name, status=True).values_list('pk', flat=True) | 
| 754 | 759 | logs = MchInfoEncryptLogInfo.objects.filter(model_pk__in=models, sn__icontains=sn, status=True) | 
| 755 | 760 |  | 
| 756 | 761 | if start_time and end_time: | 
| 757 | 762 | start_time = datetime.strptime(start_time, '%Y%m%d') | 
| 758 | - end_time = datetime.strptime(end_time+' 23:59:59', '%Y%m%d %H:%M:%S') | |
| 763 | + end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S') | |
| 759 | 764 | logs = logs.filter(created_at__range=(start_time, end_time)) | 
| 760 | - | |
| 765 | + | |
| 761 | 766 |      logs = logs.order_by('-created_at') | 
| 762 | - | |
| 767 | + | |
| 763 | 768 | count = logs.count() | 
| 764 | 769 | logs, left = pagination(logs, page, num) | 
| 765 | 770 | logs = [log.admindata for log in logs] | 
| @@ -292,7 +292,7 @@ def consumer_info_api(request): | ||
| 292 | 292 | during_activity = False | 
| 293 | 293 | else: | 
| 294 | 294 | during_activity = True if activities else False | 
| 295 | - | |
| 295 | + | |
| 296 | 296 | # 更新销售员提交的表 | 
| 297 | 297 | SaleclerkSubmitLogInfo.objects.filter(code=serialNo, model_pk=model.pk, status=True).update(has_scan=True) | 
| 298 | 298 |  | 
| @@ -355,10 +355,8 @@ def consumer_info_api(request): | ||
| 355 | 355 | submit_pk=log.pk, | 
| 356 | 356 | ) | 
| 357 | 357 |  | 
| 358 | - | |
| 359 | 358 | if not user.test_user and not dupload: | 
| 360 | 359 | # TODO: Make statistic async | 
| 361 | - | |
| 362 | 360 | cusi, _ = ConsumeUserStatisticInfo.objects.get_or_create( | 
| 363 | 361 | brand_id=brand.brand_id, | 
| 364 | 362 | ymd=ymd, | 
| @@ -1,19 +1,18 @@ | ||
| 1 | 1 | # -*- coding: utf-8 -*- | 
| 2 | 2 |  | 
| 3 | 3 | from django.conf import settings | 
| 4 | -from django.contrib.admin.views.decorators import staff_member_required | |
| 5 | 4 | from django.db import transaction | 
| 6 | 5 | from django_logit import logit | 
| 7 | 6 | from django_response import response | 
| 8 | 7 |  | 
| 9 | -from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo | |
| 10 | -from mch.models import BrandInfo, DistributorInfo, ModelInfo, SaleclerkInfo, ConsumeInfoSubmitLogInfo, ActivityInfo | |
| 11 | -from staff.models import StaffDeleteClerkSaleSubmitLogInfo | |
| 12 | -from coupon.models import CouponInfo, UserCouponInfo | |
| 13 | 8 | from account.models import UserInfo | 
| 9 | +from coupon.models import CouponInfo, UserCouponInfo | |
| 10 | +from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo | |
| 11 | +from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo | |
| 14 | 12 | from member.models import RightInfo | 
| 15 | -from statistic.models import (DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo, | |
| 16 | - SaleclerkSaleStatisticInfo, SaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeDistributorSaleStatisticInfo, ConsumeModelSaleStatisticInfo, ConsumeProvinceSaleStatisticInfo, ConsumeUserStatisticInfo) | |
| 13 | +from statistic.models import (ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo, | |
| 14 | + DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo, | |
| 15 | + SaleclerkSaleStatisticInfo, SaleStatisticInfo) | |
| 17 | 16 |  | 
| 18 | 17 |  | 
| 19 | 18 | def exec_del_clerk_sale_submit(pk): | 
| @@ -52,15 +51,15 @@ def exec_del_clerk_sale_submit(pk): | ||
| 52 | 51 | ymd = str(ssli.ymd) | 
| 53 | 52 |  | 
| 54 | 53 | if not clerk.test_user and not ssli.dupload: | 
| 55 | - #删除积分 | |
| 56 | - | |
| 54 | + # 删除积分 | |
| 57 | 55 | try: | 
| 58 | 56 | income = SaleclerkIntegralIncomeExpensesInfo.objects.select_for_update().get(model_id=model.model_id, code=ssli.code, clerk_id=ssli.clerk_id) | 
| 59 | - income.status = False | |
| 60 | - income.save() | |
| 61 | 57 | except SaleclerkIntegralIncomeExpensesInfo.DoesNotExist: | 
| 62 | 58 | return response() | 
| 63 | - | |
| 59 | + | |
| 60 | + income.status = False | |
| 61 | + income.save() | |
| 62 | + | |
| 64 | 63 | integral = model.integral | 
| 65 | 64 |  | 
| 66 | 65 | clerk.num -= 1 | 
| @@ -221,6 +220,7 @@ def del_clerk_sale_submit_api(request): | ||
| 221 | 220 |  | 
| 222 | 221 | return response(200, 'Del Success', u'删除成功') | 
| 223 | 222 |  | 
| 223 | + | |
| 224 | 224 | def exec_del_consumer_submit(pk): | 
| 225 | 225 | try: | 
| 226 | 226 | ssli = ConsumeInfoSubmitLogInfo.objects.select_for_update().get(pk=pk) | 
| @@ -236,7 +236,7 @@ def exec_del_consumer_submit(pk): | ||
| 236 | 236 | ssli.save() | 
| 237 | 237 |  | 
| 238 | 238 | ConsumeInfoSubmitLogInfo.objects.filter(serialNo=sn, model_id=ssli.model_id, dupload=True, status=True).update(status=False) | 
| 239 | - | |
| 239 | + | |
| 240 | 240 | if ssli.dupload: | 
| 241 | 241 | return response() | 
| 242 | 242 |  | 
| @@ -255,7 +255,7 @@ def exec_del_consumer_submit(pk): | ||
| 255 | 255 | except UserInfo.DoesNotExist: | 
| 256 | 256 | return response() | 
| 257 | 257 |  | 
| 258 | - #消除用户劵 | |
| 258 | + # 消除用户劵 | |
| 259 | 259 | if user.shots_num <= 5: | 
| 260 | 260 | rights = RightInfo.objects.filter(is_send_coupon=True, status=True) | 
| 261 | 261 | for right in rights: | 
| @@ -285,12 +285,12 @@ def exec_del_consumer_submit(pk): | ||
| 285 | 285 |              user_coupons = UserCouponInfo.objects.filter(user_id=user.user_id, coupon_id=coupon_id, coupon_from='MEMBER_BENEFITS', status=True, has_used=False).values_list('pk', flat=True) | 
| 286 | 286 | # 防止用户部分劵已使用,不够消除 | 
| 287 | 287 | UserCouponInfo.objects.filter(pk__in=list(user_coupons)[0:min(coupon_num, len(user_coupons))]).update(status=False) | 
| 288 | - | |
| 288 | + | |
| 289 | 289 | # 消除活动劵 | 
| 290 | 290 | if ssli.submit_during_activity: | 
| 291 | 291 | UserCouponInfo.objects.filter(user_id=user.user_id, coupon_from='PROMOTION', submit_pk=ssli.pk).update(status=False) | 
| 292 | 292 |  | 
| 293 | - #消除积分及会员等级 | |
| 293 | + # 消除积分及会员等级 | |
| 294 | 294 | integral = model.shot_member_integral | 
| 295 | 295 |  | 
| 296 | 296 | if user.shots_num <= 5: | 
| @@ -327,7 +327,6 @@ def exec_del_consumer_submit(pk): | ||
| 327 | 327 | ssi.num -= 1 | 
| 328 | 328 | ssi.save() | 
| 329 | 329 |  | 
| 330 | - | |
| 331 | 330 | # 日用户统计 | 
| 332 | 331 | ussi, _ = ConsumeUserStatisticInfo.objects.select_for_update().get_or_create( | 
| 333 | 332 | brand_id=brand.brand_id, | 
| @@ -44,14 +44,14 @@ class Command(CompatibilityBaseCommand): | ||
| 44 | 44 | try: | 
| 45 | 45 | upload_file_path(ssli.image.path, key=ssli.image.name, bucket='tamron') | 
| 46 | 46 | os.remove(ssli.image.path) | 
| 47 | - except: | |
| 47 | + except Exception: | |
| 48 | 48 | pass | 
| 49 | 49 |  | 
| 50 | 50 | if ssli.code_image: | 
| 51 | 51 | try: | 
| 52 | 52 | upload_file_path(ssli.code_image.path, key=ssli.code_image.name, bucket='tamron') | 
| 53 | 53 | os.remove(ssli.code_image.path) | 
| 54 | - except: | |
| 54 | + except Exception: | |
| 55 | 55 | pass | 
| 56 | 56 |  | 
| 57 | 57 | ssli.is_upload_qiniu = True | 
| @@ -21,6 +21,6 @@ class Command(CompatibilityBaseCommand): | ||
| 21 | 21 |  | 
| 22 | 22 | for ssli in sslis: | 
| 23 | 23 |              r.rpushjson(QINIU_UPLOAD_LIST, { | 
| 24 | - 'model': 'SaleclerkSubmitLogInfo', | |
| 25 | - 'pk': ssli.pk, | |
| 24 | + 'model': 'SaleclerkSubmitLogInfo', | |
| 25 | + 'pk': ssli.pk, | |
| 26 | 26 | }) | 
| @@ -1,3 +1,3 @@ | ||
| 1 | 1 | #!/bin/bash | 
| 2 | 2 |  | 
| 3 | -isort -rc -sp . . | |
| 3 | +isort . | 
| @@ -44,15 +44,16 @@ def DJANGO_WE_MESSAGE_CALLBACK_FUNC(request, data, decrypted=None): | ||
| 44 | 44 |  | 
| 45 | 45 | def DJANGO_WE_COMPONENT_CALLBACK_FUNC(request, appid, data, decrypted=None): | 
| 46 | 46 | """ WeChat Component Message Callback Func """ | 
| 47 | - from account.models import UserInfo | |
| 48 | 47 | from django_we.models import SubscribeUserInfo | 
| 49 | 48 | from pywe_component_authorizer_token import authorizer_access_token | 
| 50 | 49 | from pywe_custom_message import send_custom_card_message | 
| 51 | 50 | from pywe_event_message import parse_eventkey | 
| 52 | 51 | from pywe_storage import RedisStorage | 
| 53 | 52 | from pywe_user import get_user_info | 
| 53 | + | |
| 54 | + from account.models import UserInfo | |
| 54 | 55 | from utils.redis.connect import r | 
| 55 | - from utils.redis.rkeys import SUBSCRIBE_USERINFO_LIST, MEMBERCARD_USERINFO_LIST | |
| 56 | + from utils.redis.rkeys import MEMBERCARD_USERINFO_LIST, SUBSCRIBE_USERINFO_LIST | |
| 56 | 57 |  | 
| 57 | 58 | logger.info(appid) | 
| 58 | 59 | logger.info(data) | 
| @@ -202,6 +203,7 @@ def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None): | ||
| 202 | 203 |      zbar = int(request.POST.get('zbar', 0)) | 
| 203 | 204 | if zbar: | 
| 204 | 205 | import os | 
| 206 | + | |
| 205 | 207 | from utils.zbar.zbar import zbar | 
| 206 | 208 |  | 
| 207 | 209 | file_path = os.path.join(settings.MEDIA_ROOT, file_path) | 
| @@ -214,6 +216,7 @@ def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None): | ||
| 214 | 216 |      zbar2 = int(request.POST.get('zbar2', 0)) | 
| 215 | 217 | if zbar: | 
| 216 | 218 | import os | 
| 219 | + | |
| 217 | 220 | from utils.zbar.zbar2 import zbar2 | 
| 218 | 221 |  | 
| 219 | 222 | file_path = os.path.join(settings.MEDIA_ROOT, file_path) | 
| @@ -3,10 +3,11 @@ | ||
| 3 | 3 | from django.db import models | 
| 4 | 4 | from django.utils.translation import ugettext_lazy as _ | 
| 5 | 5 | from django_models_ext import BaseModelMixin, upload_file_url, upload_path | 
| 6 | -from mch.models import ModelInfo, OperatorInfo | |
| 7 | 6 | from shortuuidfield import ShortUUIDField | 
| 8 | 7 | from TimeConvert import TimeConvert as tc | 
| 9 | 8 |  | 
| 9 | +from mch.models import ModelInfo, OperatorInfo | |
| 10 | + | |
| 10 | 11 |  | 
| 11 | 12 | class MchInfoEncryptLogInfo(BaseModelMixin): | 
| 12 | 13 | plaintext = models.CharField(_(u'plaintext'), max_length=64, blank=True, null=True, help_text=u'待加密字符串', db_index=True, unique=True) | 
| @@ -36,13 +37,13 @@ class MchInfoEncryptLogInfo(BaseModelMixin): | ||
| 36 | 37 |  | 
| 37 | 38 | def __unicode__(self): | 
| 38 | 39 | return unicode(self.pk) | 
| 39 | - | |
| 40 | + | |
| 40 | 41 | @property | 
| 41 | 42 | def admindata(self): | 
| 42 | 43 | model = ModelInfo.objects.get(pk=self.model_pk, status=True) | 
| 43 | 44 | try: | 
| 44 | 45 | operator_name = OperatorInfo.objects.get(operator_id=self.operator_id).name | 
| 45 | - except: | |
| 46 | + except OperatorInfo.DoesNotExist: | |
| 46 | 47 | operator_name = '深圳捷成' | 
| 47 | 48 |  | 
| 48 | 49 |          return { | 
| @@ -135,7 +135,7 @@ class GoodsOrderInfo(BaseModelMixin): | ||
| 135 | 135 |  | 
| 136 | 136 | def __unicode__(self): | 
| 137 | 137 | return unicode(self.pk) | 
| 138 | - | |
| 138 | + | |
| 139 | 139 | @property | 
| 140 | 140 | def admindata(self): | 
| 141 | 141 | good = GoodsInfo.objects.get(good_id=self.good_id) | 
| @@ -312,7 +312,6 @@ class MemberActivityInfo(BaseModelMixin): | ||
| 312 | 312 |  | 
| 313 | 313 | position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True) | 
| 314 | 314 |  | 
| 315 | - | |
| 316 | 315 | is_signup = models.BooleanField(_(u'is_signup'), default=True, help_text=u'是否有报名功能', db_index=True) | 
| 317 | 316 |  | 
| 318 | 317 | class Meta: | 
| @@ -156,14 +156,15 @@ def mini_login_api(request): | ||
| 156 | 156 | user.appid = appId | 
| 157 | 157 | if unionid: | 
| 158 | 158 | user.unionid = unionid | 
| 159 | - | |
| 159 | + | |
| 160 | 160 | # 同步销售员手机号 | 
| 161 | 161 | try: | 
| 162 | 162 | saleclerk = SaleclerkInfo.objects.get(unionid=unionid, is_auth=True, status=True) | 
| 163 | - user.phone = saleclerk.clerk_phone | |
| 164 | 163 | except SaleclerkInfo.DoesNotExist: | 
| 165 | - saleclerk = None | |
| 164 | + saleclerk = None | |
| 166 | 165 |  | 
| 166 | + if saleclerk: | |
| 167 | + user.phone = saleclerk.clerk_phone | |
| 167 | 168 | user.user_status = UserInfo.ACTIVATED | 
| 168 | 169 | user.signup_ip = client_ip(request) | 
| 169 | 170 | user.signup_at = tc.utc_datetime() | 
| @@ -24,7 +24,7 @@ elif django.VERSION >= (1, 8): | ||
| 24 | 24 | name='simditor_upload'), | 
| 25 | 25 | ] | 
| 26 | 26 | else: | 
| 27 | - from django.conf.urls import patterns # pylint disable=C0411 | |
| 27 | + from django.conf.urls import patterns # pylint disable=C0411 | |
| 28 | 28 |  | 
| 29 | 29 | # pylint disable=C0103 | 
| 30 | 30 | urlpatterns = patterns( | 
| @@ -25,7 +25,7 @@ try: | ||
| 25 | 25 | from django.forms.utils import flatatt | 
| 26 | 26 | except ImportError: | 
| 27 | 27 | # Django <1.7 | 
| 28 | - from django.forms.util import flatatt # pylint disable=E0611, E0401 | |
| 28 | + from django.forms.util import flatatt # pylint disable=E0611, E0401 | |
| 29 | 29 |  | 
| 30 | 30 |  | 
| 31 | 31 | class LazyEncoder(DjangoJSONEncoder): | 
| @@ -2,7 +2,6 @@ | ||
| 2 | 2 |  | 
| 3 | 3 | from django.conf import settings | 
| 4 | 4 | from PIL import Image, ImageEnhance | 
| 5 | - | |
| 6 | 5 | from pyzbar import pyzbar | 
| 7 | 6 |  | 
| 8 | 7 |  |