edb14afd by 周伟奇

session_id cache

1 parent eb2d5a51
...@@ -2,6 +2,7 @@ import requests ...@@ -2,6 +2,7 @@ import requests
2 from zeep import Client 2 from zeep import Client
3 from settings import conf 3 from settings import conf
4 from . import consts 4 from . import consts
5 from common.redis_cache import redis_handler as rh
5 6
6 7
7 class EDMS: 8 class EDMS:
...@@ -15,11 +16,24 @@ class EDMS: ...@@ -15,11 +16,24 @@ class EDMS:
15 self.pwd = pwd 16 self.pwd = pwd
16 self.session_id = None 17 self.session_id = None
17 18
18 def get_session_id(self): 19 def set_session_id(self):
19 self.session_id = self.sm_client.service.StartSession(login=self.user_name, 20 self.session_id = self.sm_client.service.StartSession(login=self.user_name,
20 password=self.pwd, 21 password=self.pwd,
21 clientType=consts.CUSTOM_CLIENT) 22 clientType=consts.CUSTOM_CLIENT)
23 rh.set_session_id(self.session_id)
24 return self.session_id
25
26 def get_session_id(self):
27 if self.session_id is None:
28 # redis获取session_id
29 self.session_id = rh.get_session_id()
30 if self.session_id is None:
31 return self.set_session_id()
32 # 验证session_id
33 is_session_valid = self.sm_client.service.IsSessionValid(sessionId=self.session_id, keepAlive=False)
34 if is_session_valid is True:
22 return self.session_id 35 return self.session_id
36 return self.set_session_id()
23 37
24 def get_download_token(self, headers, metadata_version_id): 38 def get_download_token(self, headers, metadata_version_id):
25 with self.dm_client.settings(extra_http_headers=headers): 39 with self.dm_client.settings(extra_http_headers=headers):
......
...@@ -12,12 +12,11 @@ from zeep import Client ...@@ -12,12 +12,11 @@ from zeep import Client
12 12
13 from django.core.management import BaseCommand 13 from django.core.management import BaseCommand
14 from common.mixins import LoggerMixin 14 from common.mixins import LoggerMixin
15 from common.redis_cache import redis_handler as rh
16 from common.tools.file_tools import write_zip_file 15 from common.tools.file_tools import write_zip_file
17 from apps.doc.models import DocStatus, HILDoc, AFCDoc 16 from apps.doc.models import DocStatus, HILDoc, AFCDoc
18 from apps.doc import consts 17 from apps.doc import consts
19 from settings import conf 18 from settings import conf
20 from apps.doc.edms import EDMS 19 from apps.doc.edms import EDMS, rh
21 20
22 21
23 class Command(BaseCommand, LoggerMixin): 22 class Command(BaseCommand, LoggerMixin):
...@@ -57,7 +56,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -57,7 +56,7 @@ class Command(BaseCommand, LoggerMixin):
57 doc_id = int(doc_id_str) 56 doc_id = int(doc_id_str)
58 doc_class = HILDoc if business_type == consts.HIL_PREFIX else AFCDoc 57 doc_class = HILDoc if business_type == consts.HIL_PREFIX else AFCDoc
59 doc_info = doc_class.objects.filter(id=doc_id, status=DocStatus.INIT.value).values( 58 doc_info = doc_class.objects.filter(id=doc_id, status=DocStatus.INIT.value).values(
60 'id', 'metadata_version_id', 'document_name').first() 59 'id', 'metadata_version_id', 'application_id', 'document_name').first()
61 if doc_info is None: 60 if doc_info is None:
62 self.cronjob_log.warn('{0} [get_doc_info] [doc completed] [task_str={1}] [is_priority={2}]'.format( 61 self.cronjob_log.warn('{0} [get_doc_info] [doc completed] [task_str={1}] [is_priority={2}]'.format(
63 self.log_base, task_str, is_priority)) 62 self.log_base, task_str, is_priority))
...@@ -125,7 +124,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -125,7 +124,7 @@ class Command(BaseCommand, LoggerMixin):
125 s = item[1] # xref of its /SMask 124 s = item[1] # xref of its /SMask
126 is_rgb = True if item[5] == 'DeviceRGB' else False 125 is_rgb = True if item[5] == 'DeviceRGB' else False
127 126
128 # RGB 127 # GRAY/RGB # TODO 颜色空间不同处理
129 if is_rgb: 128 if is_rgb:
130 if s == 0: 129 if s == 0:
131 return doc.extractImage(x) 130 return doc.extractImage(x)
...@@ -143,7 +142,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -143,7 +142,7 @@ class Command(BaseCommand, LoggerMixin):
143 pix1 = pix2 = None # free temp pixmaps 142 pix1 = pix2 = None # free temp pixmaps
144 return self.getimage(pix) 143 return self.getimage(pix)
145 144
146 # GRAY/CMYK 145 # CMYK
147 pix1 = fitz.Pixmap(doc, x) 146 pix1 = fitz.Pixmap(doc, x)
148 pix = fitz.Pixmap(pix1) # copy of pix1, alpha channel added 147 pix = fitz.Pixmap(pix1) # copy of pix1, alpha channel added
149 148
...@@ -159,7 +158,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -159,7 +158,7 @@ class Command(BaseCommand, LoggerMixin):
159 158
160 pix1 = pix2 = None # free temp pixmaps 159 pix1 = pix2 = None # free temp pixmaps
161 160
162 pix = fitz.Pixmap(fitz.csRGB, pix) # GRAY/CMYK to RGB 161 pix = fitz.Pixmap(fitz.csRGB, pix) # CMYK to RGB
163 return self.getimage(pix) 162 return self.getimage(pix)
164 163
165 @staticmethod 164 @staticmethod
......
...@@ -6,22 +6,22 @@ from . import consts ...@@ -6,22 +6,22 @@ from . import consts
6 class DocHandler: 6 class DocHandler:
7 7
8 @staticmethod 8 @staticmethod
9 def get_link(doc_id, file='pdf'): 9 def get_link(doc_id, business_type, file='pdf'):
10 if file == 'pdf': 10 if file == 'pdf':
11 return '/data/{0}/{0}.pdf'.format(doc_id) 11 return '/data/{1}/{0}/{0}.pdf'.format(doc_id, business_type)
12 elif file == 'img': 12 elif file == 'img':
13 return '/data/{0}/{0}_img.zip'.format(doc_id) 13 return '/data/{1}/{0}/{0}_img.zip'.format(doc_id, business_type)
14 else: 14 else:
15 return '/data/{0}/{0}.xls'.format(doc_id) 15 return '/data/{1}/{0}/{0}.xls'.format(doc_id, business_type)
16 16
17 def get_doc_list(self, doc_queryset): 17 def get_doc_list(self, doc_queryset, business_type):
18 for doc_dict in doc_queryset: 18 for doc_dict in doc_queryset:
19 if doc_dict['status'] != DocStatus.COMPLETE.value: 19 if doc_dict['status'] != DocStatus.COMPLETE.value:
20 continue 20 continue
21 doc_id = doc_dict.get('id') 21 doc_id = doc_dict.get('id')
22 doc_dict['pdf_link'] = self.get_link(doc_id) 22 doc_dict['pdf_link'] = self.get_link(doc_id, business_type)
23 doc_dict['img_link'] = self.get_link(doc_id, 'img') 23 doc_dict['img_link'] = self.get_link(doc_id, business_type, file='img')
24 doc_dict['excel_link'] = self.get_link(doc_id, 'excel') 24 doc_dict['excel_link'] = self.get_link(doc_id, business_type, file='excel')
25 return list(doc_queryset) 25 return list(doc_queryset)
26 26
27 @staticmethod 27 @staticmethod
......
...@@ -247,9 +247,9 @@ class DocView(GenericView, DocHandler): ...@@ -247,9 +247,9 @@ class DocView(GenericView, DocHandler):
247 if create_time_start is not None and create_time_end is not None else Q() 247 if create_time_start is not None and create_time_end is not None else Q()
248 query = application_id_query & status_query & data_source_query & upload_finish_time_query & create_time_query 248 query = application_id_query & status_query & data_source_query & upload_finish_time_query & create_time_query
249 val_tuple = ('id', 'application_id', 'upload_finish_time', 'create_time', 'data_source', 'status') 249 val_tuple = ('id', 'application_id', 'upload_finish_time', 'create_time', 'data_source', 'status')
250 doc_class, _ = self.get_doc_class(business_type) 250 doc_class, prefix = self.get_doc_class(business_type)
251 doc_queryset = doc_class.objects.filter(query).values(*val_tuple).order_by('-upload_finish_time') 251 doc_queryset = doc_class.objects.filter(query).values(*val_tuple).order_by('-upload_finish_time')
252 doc_list = self.get_doc_list(doc_queryset) 252 doc_list = self.get_doc_list(doc_queryset, prefix)
253 253
254 total = len(doc_list) 254 total = len(doc_list)
255 start_index = page_size * (page - 1) 255 start_index = page_size * (page - 1)
......
...@@ -35,6 +35,7 @@ class RedisHandler: ...@@ -35,6 +35,7 @@ class RedisHandler:
35 self.prefix = 'bwm_ocr' 35 self.prefix = 'bwm_ocr'
36 self.common_queue_key = '{0}:common_queue'.format(self.prefix) 36 self.common_queue_key = '{0}:common_queue'.format(self.prefix)
37 self.priority_queue_key = '{0}:priority_queue'.format(self.prefix) 37 self.priority_queue_key = '{0}:priority_queue'.format(self.prefix)
38 self.session_id_key = '{0}:session_id'.format(self.prefix)
38 39
39 def enqueue(self, tasks, is_priority=False): 40 def enqueue(self, tasks, is_priority=False):
40 # 1 41 # 1
...@@ -50,3 +51,9 @@ class RedisHandler: ...@@ -50,3 +51,9 @@ class RedisHandler:
50 is_priority = False 51 is_priority = False
51 return task, is_priority 52 return task, is_priority
52 53
54 def set_session_id(self, session_id):
55 return self.redis.set(self.session_id_key, session_id)
56
57 def get_session_id(self):
58 return self.redis.get(self.session_id_key)
59
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!