Advertisement
NeyderCorrea

Binary Error

Sep 9th, 2023
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.55 KB | None | 0 0
  1. ######## Modelo 1 ########
  2.     cut_text = fields.Text("Cut Text")
  3.     cut_image = fields.Binary("Cut Image")
  4.  
  5.     @classmethod
  6.     def convert_cut_image(cls, data):
  7.         if data and Image:
  8.             image = Image.open(BytesIO(data))
  9.             image.thumbnail((200, 200), Image.LANCZOS)
  10.             data = BytesIO()
  11.             image.save(data, image.format)
  12.             data = fields.Binary.cast(data.getvalue())
  13.         return data
  14.    
  15.     @classmethod
  16.     def create(cls, vlist):
  17.         vlist = [x.copy() for x in vlist]
  18.         for values in vlist:
  19.             if 'cut_image' in values:
  20.                 values['cut_image'] = cls.convert_cut_image(values['cut_image'])
  21.         return super(AnatomyOrgan, cls).create(vlist)
  22. ######## Modelo 2 En el modelo 2 se encuentra igual que en el modelo 1 ########
  23.  
  24.     cut_text = fields.Text("Cut Text")
  25.     cut_image = fields.Binary("Cut Image")
  26.  
  27.     @classmethod
  28.     def convert_cut_image(cls, data):
  29.         if data and Image:
  30.             image = Image.open(BytesIO(data))
  31.             image.thumbnail((200, 200), Image.LANCZOS)
  32.             data = BytesIO()
  33.             image.save(data, image.format)
  34.             data = fields.Binary.cast(data.getvalue())
  35.         return data
  36.    
  37.     @classmethod
  38.     def create(cls, vlist):
  39.         vlist = [x.copy() for x in vlist]
  40.         for values in vlist:
  41.             if 'cut_image' in values:
  42.                 values['cut_image'] = cls.convert_cut_image(values['cut_image'])
  43.         return super(AnatomyOrgan, cls).create(vlist)
  44.  
  45. ######## Asistente ########
  46.  
  47.     def _create_study(self):
  48.         Study = Pool().get('study.study')
  49.  
  50.         to_create_container = []
  51.         for c in self.start.containers:
  52.             samples = []
  53.             for s in c.samples:
  54.                 criteria = []
  55.                 for criterion in s.organ.criteria:
  56.                     options = [
  57.                         {
  58.                             'name': option.name,
  59.                             'type_measure': option.type_measure,
  60.                             'pre_sub': option.pre_sub,
  61.                             'pos_sub': option.pos_sub,
  62.                             'sub_options': [
  63.                                 {
  64.                                     'name': subOption.name,
  65.                                     'result': subOption.result
  66.                                 }
  67.                                 for subOption in option.sub_options
  68.                                 if option.sub_options
  69.                             ],
  70.                             'result': option.result,
  71.                             'for_diagnostic': option.for_diagnostic
  72.                         }
  73.                         for option in criterion.options
  74.                         if criterion.options
  75.                     ]
  76.  
  77.                     result = choice(options)['result'] \
  78.                         if criterion.utility == 'ts'else ""
  79.  
  80.                     criteria.append(
  81.                         {
  82.                             'sequence': criterion.sequence,
  83.                             'name': criterion.name,
  84.                             'type_critearea': criterion.type_critearea,
  85.                             'utility': criterion.utility,
  86.                             'type_measure': criterion.type_measure,
  87.                             'singular': criterion.singular,
  88.                             'plural': criterion.plural,
  89.                             'post_measure': criterion.post_measure,
  90.                             'pre_option': criterion.pre_option,
  91.                             'post_option': criterion.post_option,
  92.                             'options': options,
  93.                             'unit_measure': criterion.unit_measure and criterion.unit_measure.id,
  94.                             'text_option': result,
  95.                             'result':  result,
  96.                             'for_diagnostic': criterion.for_diagnostic
  97.                         }
  98.                     )
  99.  
  100.                 slides = [
  101.                     {
  102.                         'name': self.incremental_slide(len(
  103.                             to_create_container) + 1,
  104.                             len(samples) + 1, j + 1,
  105.                             slide.name)
  106.                     }
  107.                     for j, slide in enumerate(s.organ.slides)
  108.                     if s.organ.slides
  109.                 ]
  110.  
  111.                 if s.type_sample == 'complete' and s.organ.divisions:
  112.                     for division in s.organ.divisions:
  113.                         to_create_container.append(
  114.                             {
  115.                                 'name': self.incremental_container(
  116.                                     len(to_create_container) + 1),
  117.                                 'desc': division.name,
  118.                                 'samples': [
  119.                                     {
  120.                                         'name': self.incremental_sample(
  121.                                             len(to_create_container) + 1,
  122.                                             1, division.name),
  123.                                         'system': s.system.id,
  124.                                         'organ': s.organ.id,
  125.                                         'criteria': criteria,
  126.                                         'slides': [
  127.                                             {
  128.                                                 'name': self.incremental_slide(len(
  129.                                                     to_create_container) + 1,
  130.                                                     len(samples) + 1, j + 1,
  131.                                                     slide.name)
  132.                                             }
  133.                                             for j, slide in enumerate(s.organ.slides)
  134.                                             if s.organ.slides
  135.                                         ],
  136. ######## asi se guarda el campo del modelo 2 llamado desde el modelo 1 ########
  137.                                         'cut_text': s.organ.cut_text,
  138.                                         'cut_image': self.convert_cut_image(s.organ.cut_image),
  139.                                     }
  140.                                 ]
  141.                             }
  142.                         )
  143.                 else:
  144. ######## asi se guarda el campo del modelo 2 llamado desde el modelo 1 ########
  145.                     samples.append(
  146.                         {
  147.                             'system': s.system.id,
  148.                             'organ': s.organ.id,
  149.                             'criteria': criteria,
  150.                             'slides': slides,
  151.                             'cut_text': s.organ.cut_text,
  152.                             'cut_image': self.convert_cut_image(s.organ.cut_image),
  153.                         })
  154.  
  155.             if not samples:
  156.                 continue
  157.  
  158.             for i, sample in enumerate(samples):
  159.                 sample['name'] = self.incremental_sample(
  160.                     len(to_create_container) + 1, i + 1)
  161.  
  162.             to_create_container.append(
  163.                 {
  164.                     'name': self.incremental_container(
  165.                         len(to_create_container) + 1),
  166.                     'desc': c.desc,
  167.                     'samples': samples
  168.                 })
  169.  
  170.         study = Study()
  171.         study.patient = self.start.patient.id
  172.         study.institution_request = self.start.institution_requested.id
  173.         study.pathologist = self.start.pathologist.id
  174.         study.date = self.start.date
  175.         study.containers = to_create_container
  176.         study.save()
  177.         return study
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement