Changeset 16171
- Timestamp:
- Dec 30, 2016, 1:24:52 AM (7 years ago)
- Location:
- wikicreateticketplugin/0.12
- Files:
-
- 2 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
wikicreateticketplugin/0.12/setup.py
r9349 r16171 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 1 4 from setuptools import setup 2 5 3 6 setup( 4 7 name='WikiCreateTicket', 5 version='0.1 ',8 version='0.1.1', 6 9 packages=['wikicreateticket'], 7 package_data={'wikicreateticket' : [] }, 10 package_data={'wikicreateticket' : []}, 11 test_suite='wikicreateticket.tests.suite', 8 12 author='Yoshiyuki Sugimoto', 9 maintainer ='Yoshiyuki Sugimoto',10 maintainer_email ='s.yosiyuki@gmail.com',13 maintainer='Yoshiyuki Sugimoto', 14 maintainer_email='s.yosiyuki@gmail.com', 11 15 license='BSD', 12 url='http ://trac-hacks.org/wiki/WikiCreateTicketPlugin',16 url='https://trac-hacks.org/wiki/WikiCreateTicketPlugin', 13 17 description='A plugin to assign new markup to create ticket.', 14 18 entry_points = {'trac.plugins': ['wikicreateticket = wikicreateticket']}, -
wikicreateticketplugin/0.12/wikicreateticket/__init__.py
r10641 r16171 1 # -*- coding: utf-8 -*- 2 1 3 import re 2 from trac.core import *4 from trac.core import Component, implements 3 5 from trac.wiki import IWikiChangeListener, WikiPage 4 6 from trac.ticket import Ticket … … 9 11 implements(IWikiChangeListener) 10 12 11 _new_ticket_tag = '#new ' 12 _new_ticket_re = re.compile(r'#new (.*)$') 13 14 def match_request(self, req): 15 return 'WIKI_MODIFY' in req.perm and 'TICKET_CREATE' in req.perm 13 _new_ticket_re = re.compile(r'(?P<id>#new)\s+(?P<summary>.+?)\s*$', 14 re.UNICODE) 15 _space_re = re.compile(r'\s', re.UNICODE) 16 16 17 17 def wiki_page_added(self, page): 18 self._ _parse_wiki_and_create_ticket(page, 1)18 self._parse_wiki_and_create_ticket(page, 1) 19 19 20 20 def wiki_page_changed(self, page, version, t, comment, author, ipnr): 21 self._ _parse_wiki_and_create_ticket(page, version)21 self._parse_wiki_and_create_ticket(page, version) 22 22 23 23 def wiki_page_deleted(self, page): … … 27 27 pass 28 28 29 def wiki_page_renamed(self, page, old_name): 29 def wiki_page_renamed(self, page, old_name): 30 30 pass 31 31 32 def _ _parse_wiki_and_create_ticket(self, page, version):32 def _parse_wiki_and_create_ticket(self, page, version): 33 33 page = WikiPage(self.env, page.name, version) 34 34 35 lines = page.text.splitlines() 36 new_lines = [] 35 lines = page.text.splitlines(True) 36 for idx, line in enumerate(lines): 37 match = self._new_ticket_re.search(line) 38 if match: 39 tktid = self.__create_new_ticket(page, match.group('summary')) 40 if tktid: 41 lines[idx] = '%s#%d%s' % (line[:match.start('id')], 42 tktid, line[match.end('id'):]) 43 else: 44 self.log.error("failed to create ticket from wiki: %s", 45 page.name) 37 46 38 for line in page.text.splitlines(): 39 matched = self._new_ticket_re.search(line) 40 if matched: 41 ticket_id = self.__create_new_ticket(page, matched.group(1), page.author) 42 if ticket_id: 43 self.env.log.debug("create ticket from wiki: %s, ticket: %s" % (page.name, ticket_id)) 44 new_line = line.replace(self._new_ticket_tag, '#%s ' % ticket_id, 1) 45 else: 46 self.env.log.error("failed to create ticket from wiki: %s" % page.name) 47 new_line = line 47 self._update_wiki(page, ''.join(lines)) 48 48 49 else: 50 new_line = line 49 def _update_wiki(self, page, text): 50 @self.env.with_transaction() 51 def fn(db): 52 cursor = db.cursor() 53 cursor.execute( 54 "UPDATE wiki SET text=%s WHERE name=%s AND version=%s", 55 (text, page.name, page.version)) 51 56 52 new_lines.append(new_line) 53 54 page.text = "\n".join(new_lines) 55 self.__update_wiki(page) 56 57 def __update_wiki(self, page): 58 db = self.env.get_db_cnx() 59 cursor = db.cursor() 60 page.save 61 cursor.execute("UPDATE wiki SET text=%s WHERE name=%s AND version=%s", 62 (page.text, page.name, page.version)) 63 db.commit() 64 65 def __create_new_ticket(self, page, title, owner): 66 matched = re.compile(r'^\[(.*)\](.*)').search(title) 67 if matched: 68 summary = matched.group(2) 69 owner = matched.group(1) 57 def __create_new_ticket(self, page, title): 58 match = re.match(r'\[(\S+)\]\s*(.*?)\s*\Z', title) 59 if match: 60 summary = match.group(2) 61 owner = match.group(1) 70 62 else: 71 63 summary = title 72 64 owner = None 73 74 65 ticket = Ticket(self.env) 75 ticket.values = { 76 'status': 'new', 77 'reporter': page.author, 78 'summary': summary, 79 'owner': owner, 80 'description': "wiki:%s" % page.name, 81 } 66 ticket['status'] = 'new' 67 ticket['reporter'] = page.author 68 ticket['summary'] = summary 69 ticket['owner'] = owner 70 if self._space_re.search(page.name): 71 description = 'wiki:"%s"' % page.name 72 else: 73 description = 'wiki:%s' % page.name 74 ticket['description'] = description 82 75 return ticket.insert()
Note: See TracChangeset
for help on using the changeset viewer.