Edgewall Software

Ticket #9209: add-ticket-class-var_to_ticket-model-py.patch

File add-ticket-class-var_to_ticket-model-py.patch, 4.8 KB (added by hoff.st@…, 2 years ago)

patch for trac/ticket/model.py: 14 insertions, 28 deletions

  • trac/ticket/model.py

    diff --git a/trac/ticket/model.py b/trac/ticket/model.py
    a b  
    5252            tkt_id = int(tkt_id) 
    5353        self.resource = Resource('ticket', tkt_id, version) 
    5454        self.fields = TicketSystem(self.env).get_ticket_fields() 
     55        self.std_fields = [f['name'] for f in self.fields 
     56                               if not f.get('custom')] 
     57        self.custom_fields = [f['name'] for f in self.fields 
     58                              if f.get('custom')] 
    5559        self.time_fields = [f['name'] for f in self.fields 
    5660                            if f['type'] == 'time'] 
    5761        self.values = {} 
     
    9599            db = self._get_db(db) 
    96100 
    97101            # Fetch the standard ticket fields 
    98             std_fields = [f['name'] for f in self.fields 
    99                           if not f.get('custom')] 
    100102            cursor = db.cursor() 
    101103            cursor.execute("SELECT %s FROM ticket WHERE id=%%s" 
    102                            % ','.join(std_fields), (tkt_id,)) 
     104                           % ','.join(self.std_fields), (tkt_id,)) 
    103105            row = cursor.fetchone() 
    104106        if not row: 
    105107            raise ResourceNotFound(_('Ticket %(id)s does not exist.',  
    106108                                     id=tkt_id), _('Invalid ticket number')) 
    107109 
    108110        self.id = tkt_id 
    109         for i, field in enumerate(std_fields): 
     111        for i, field in enumerate(self.std_fields): 
    110112            value = row[i] 
    111113            if field in self.time_fields: 
    112114                self.values[field] = from_utimestamp(value) 
     
    116118                self.values[field] = value 
    117119 
    118120        # Fetch custom fields if available 
    119         custom_fields = [f['name'] for f in self.fields if f.get('custom')] 
    120121        cursor.execute("SELECT name,value FROM ticket_custom WHERE ticket=%s", 
    121122                       (tkt_id,)) 
    122123        for name, value in cursor: 
    123             if name in custom_fields: 
     124            if name in self.custom_fields: 
    124125                if value is None: 
    125126                    self.values[name] = empty 
    126127                else: 
     
    200201                values[field] = to_utimestamp(values[field]) 
    201202         
    202203        # Insert ticket record 
    203         std_fields = [] 
    204         custom_fields = [] 
    205         for f in self.fields: 
    206             fname = f['name'] 
    207             if fname in self.values: 
    208                 if f.get('custom'): 
    209                     custom_fields.append(fname) 
    210                 else: 
    211                     std_fields.append(fname) 
    212  
    213204        tkt_id = [None] 
    214205        @self.env.with_transaction(db) 
    215206        def do_insert(db): 
    216207            cursor = db.cursor() 
    217208            cursor.execute("INSERT INTO ticket (%s) VALUES (%s)" 
    218                            % (','.join(std_fields), 
    219                               ','.join(['%s'] * len(std_fields))), 
    220                            [values[name] for name in std_fields]) 
     209                           % (','.join(self.std_fields), 
     210                              ','.join(['%s'] * len(self.std_fields))), 
     211                           [values[name] for name in self.std_fields]) 
    221212            tkt_id[0] = db.get_last_id(cursor, 'ticket') 
    222213 
    223214            # Insert custom fields 
    224             if custom_fields: 
     215            if self.custom_fields: 
    225216                cursor.executemany(""" 
    226217                INSERT INTO ticket_custom (ticket,name,value) VALUES (%s,%s,%s) 
    227                 """, [(tkt_id[0], name, self[name]) for name in custom_fields]) 
     218                """, [(tkt_id[0], name, self[name]) for name in self.custom_fields]) 
    228219 
    229220        self.id = tkt_id[0] 
    230221        self.resource = self.resource(id=tkt_id[0]) 
     
    306297                comment_num = str(num + 1) 
    307298 
    308299            # store fields 
    309             custom_fields = [f['name'] for f in self.fields if f.get('custom')] 
    310  
    311300            for name in self._old.keys(): 
    312                 if name in custom_fields: 
     301                if name in self.custom_fields: 
    313302                    cursor.execute(""" 
    314303                        SELECT * FROM ticket_custom  
    315304                        WHERE ticket=%s and name=%s 
     
    441430                return 
    442431            ts = row[0] 
    443432             
    444             custom_fields = set(f['name'] for f in self.fields 
    445                                 if f.get('custom')) 
    446  
    447433            # Find modified fields and their previous value 
    448434            cursor.execute(""" 
    449435                SELECT field, oldvalue, newvalue FROM ticket_change 
     
    469455                    break 
    470456                else: 
    471457                    # No next change, edit ticket field 
    472                     if field in custom_fields: 
     458                    if field in self.custom_fields: 
    473459                        cursor.execute(""" 
    474460                            UPDATE ticket_custom SET value=%s 
    475461                            WHERE ticket=%s AND name=%s