Ticket #6436: cache-get_ticket_fields-r6843.diff
| File cache-get_ticket_fields-r6843.diff, 4.9 KB (added by cboos, 4 years ago) |
|---|
-
trac/ticket/api.py
16 16 17 17 import re 18 18 from datetime import datetime 19 try: 20 import threading 21 except ImportError: 22 import dummy_threading as threading 19 23 20 24 from genshi.builder import tag 21 25 … … 152 156 def __init__(self): 153 157 self.log.debug('action controllers for ticket workflow: %r' % 154 158 [c.__class__.__name__ for c in self.action_controllers]) 159 self._fields_lock = threading.RLock() 155 160 156 161 # Public API 157 162 … … 180 185 181 186 def get_ticket_fields(self): 182 187 """Returns the list of fields available for tickets.""" 188 # This is now cached - as it makes quite a number of things faster, 189 # e.g. #6436 190 if self._fields is None: 191 self._fields_lock.acquire() 192 try: 193 self._fields = self._get_ticket_fields() 194 finally: 195 self._fields_lock.release() 196 return [f.copy() for f in self._fields] 197 198 def reset_ticket_fields(self): 199 self._fields_lock.acquire() 200 try: 201 self._fields = None 202 self.config.touch() # brute force approach for now 203 finally: 204 self._fields_lock.release() 205 206 _fields = None 207 def _get_ticket_fields(self): 183 208 from trac.ticket import model 184 209 185 210 db = self.env.get_db_cnx() … … 251 276 return fields 252 277 253 278 def get_custom_fields(self): 279 if self._custom_fields is None: 280 self._fields_lock.acquire() 281 try: 282 self._custom_fields = self._get_custom_fields() 283 finally: 284 self._fields_lock.release() 285 return [f.copy() for f in self._custom_fields] 286 287 _custom_fields = None 288 def _get_custom_fields(self): 254 289 fields = [] 255 290 config = self.config['ticket-custom'] 256 291 for name in [option for option, value in config.options() -
trac/ticket/model.py
393 393 db.commit() 394 394 self.value = self._old_value = None 395 395 self.name = self._old_name = None 396 TicketSystem(self.env).reset_ticket_fields() 396 397 397 398 def insert(self, db=None): 398 399 assert not self.exists, 'Cannot insert existing %s' % self.type … … 418 419 db.commit() 419 420 self._old_name = self.name 420 421 self._old_value = self.value 422 TicketSystem(self.env).reset_ticket_fields() 421 423 422 424 def update(self, db=None): 423 425 assert self.exists, 'Cannot update non-existent %s' % self.type … … 444 446 db.commit() 445 447 self._old_name = self.name 446 448 self._old_value = self.value 449 TicketSystem(self.env).reset_ticket_fields() 447 450 448 451 def select(cls, env, db=None): 449 452 if not db: … … 530 533 531 534 if handle_ta: 532 535 db.commit() 536 TicketSystem(self.env).reset_ticket_fields() 533 537 534 538 def insert(self, db=None): 535 539 assert not self.exists, 'Cannot insert existing component' … … 549 553 550 554 if handle_ta: 551 555 db.commit() 556 TicketSystem(self.env).reset_ticket_fields() 552 557 553 558 def update(self, db=None): 554 559 assert self.exists, 'Cannot update non-existent component' … … 574 579 575 580 if handle_ta: 576 581 db.commit() 582 TicketSystem(self.env).reset_ticket_fields() 577 583 578 584 def select(cls, env, db=None): 579 585 if not db: … … 654 660 655 661 if handle_ta: 656 662 db.commit() 663 TicketSystem(self.env).reset_ticket_fields() 657 664 658 665 def insert(self, db=None): 659 666 assert self.name, 'Cannot create milestone with no name' … … 673 680 674 681 if handle_ta: 675 682 db.commit() 683 TicketSystem(self.env).reset_ticket_fields() 676 684 677 685 def update(self, db=None): 678 686 assert self.name, 'Cannot update milestone with no name' … … 698 706 699 707 if handle_ta: 700 708 db.commit() 709 TicketSystem(self.env).reset_ticket_fields() 701 710 702 711 def select(cls, env, include_completed=True, db=None): 703 712 if not db: … … 760 769 761 770 if handle_ta: 762 771 db.commit() 772 TicketSystem(self.env).reset_ticket_fields() 763 773 764 774 def insert(self, db=None): 765 775 assert not self.exists, 'Cannot insert existing version' … … 779 789 780 790 if handle_ta: 781 791 db.commit() 792 TicketSystem(self.env).reset_ticket_fields() 782 793 783 794 def update(self, db=None): 784 795 assert self.exists, 'Cannot update non-existent version' … … 804 815 805 816 if handle_ta: 806 817 db.commit() 818 TicketSystem(self.env).reset_ticket_fields() 807 819 808 820 def select(cls, env, db=None): 809 821 if not db:
