Changeset 1225
- Timestamp:
- 09/01/06 07:57:59 (2 years ago)
- Files:
-
- screenshotsplugin/0.10/tracscreenshots/api.py (modified) (1 diff)
- screenshotsplugin/0.10/tracscreenshots/core.py (modified) (6 diffs)
- screenshotsplugin/0.10/tracscreenshots/db/db1.py (modified) (1 diff)
- screenshotsplugin/0.10/tracscreenshots/db/db2.py (modified) (3 diffs)
- screenshotsplugin/0.10/tracscreenshots/init.py (modified) (1 diff)
- screenshotsplugin/0.10/tracscreenshots/wiki.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
screenshotsplugin/0.10/tracscreenshots/api.py
r1179 r1225 51 51 " screenshot_component c, screenshot_version v WHERE c.component" \ 52 52 " = %s AND v.version = %s AND s.id = c.screenshot AND s.id =" \ 53 " v.screenshot ;"53 " v.screenshot ORDER BY s.id" 54 54 self.log.debug(sql % (component, version)) 55 55 cursor.execute(sql, (component, version)) screenshotsplugin/0.10/tracscreenshots/core.py
r1220 r1225 1 1 from tracscreenshots.api import * 2 2 from trac.core import * 3 from trac.web.chrome import INavigationContributor, ITemplateProvider, add_stylesheet 3 from trac.web.chrome import INavigationContributor, ITemplateProvider, \ 4 add_stylesheet 4 5 from trac.web.main import IRequestHandler 5 6 from trac.perm import IPermissionRequestor 7 from trac.config import Option 6 8 from trac.util import Markup, format_datetime, TracError 9 from trac.util.html import html 7 10 import re, os, os.path, time, mimetypes 8 11 … … 24 27 IPermissionRequestor) 25 28 29 title = Option('screenshots', 'title', 'Screenshots', 30 'Main navigation bar button title.') 31 path = Option('screenshots', 'path', '/var/lib/trac/screenshots', 32 'Path where to store uploaded screenshots.') 33 ext = Option('screenshots', 'ext', 'jpg png', 34 'List of screenshot file extensions that can be uploaded. Must be' 35 ' supported by ImageMagick.') 36 component = Option('screenshots', 'component', '', 37 'Name of default component.') 38 version = Option('screenshots', 'version', '', 39 'Name of default version.') 40 show_name = Option('screenshots', 'show_name', True, 41 'Option to disable display of screenshot name and author.') 42 26 43 # IPermissionRequestor methods. 27 44 def get_permission_actions(self): … … 43 60 def get_navigation_items(self, req): 44 61 if req.perm.has_permission('SCREENSHOTS_VIEW'): 45 yield 'mainnav', 'screenshots', Markup('<a href="%s">%s</a>' % \ 46 (self.env.href.screenshots(), self.env.config.get('screenshots', 47 'title', 'Screenshots'))) 62 yield 'mainnav', 'screenshots', html.a(self.title, 63 href = req.href.screenshots()) 48 64 49 65 # IRequestHandler methods. … … 65 81 cursor = db.cursor() 66 82 67 # Get config variables.68 self.title = self.env.config.get('screenshots', 'title', 'Screenshots')69 self.path = self.env.config.get('screenshots', 'path',70 '/var/lib/trac/screenshots')71 self.component = self.env.config.get('screenshots', 'component')72 self.version = self.env.config.get('screenshots', 'version')73 self.show_name = self.env.config.get('screenshots', 'show_name',74 'true') in ('true', 'True', '1')75 83 self.log.debug('path: %s' % (self.path,)) 76 84 … … 117 125 req.hdf['screenshots.versions'] = versions 118 126 req.hdf['screenshots.version'] = version 119 req.hdf['screenshots.href'] = self.env.href.screenshots()127 req.hdf['screenshots.href'] = req.href.screenshots() 120 128 req.hdf['screenshots.title'] = self.title 121 129 req.hdf['screenshots.show_name'] = self.show_name … … 197 205 reg = re.compile(r'^(.*)[.](.*)$') 198 206 result = reg.match(filename) 199 if not result.group(2) in ('png', 'jpg'): 207 if result: 208 if not result.group(2).lower() in self.ext.split(' '): 209 raise TracError('Unsupported uploaded file type.') 210 else: 200 211 raise TracError('Unsupported uploaded file type.') 201 212 screenshotsplugin/0.10/tracscreenshots/db/db1.py
r1052 r1225 1 # Commont SQL statements 2 sql = ["""CREATE TABLE screenshot ( 3 id integer PRIMARY KEY, 4 name text, 5 description text, 6 time integer, 7 author text, 8 large_file text, 9 medium_file text, 10 small_file text, 11 component text, 12 version text 13 );""", 14 """INSERT INTO system (name, value) VALUES ('screenshots_version', '1')"""] 1 from trac.db import Table, Column, Index, DatabaseManager 15 2 16 # PostgreSQL statements 17 postgre_sql = ["""CREATE TABLE screenshot ( 18 id serial PRIMARY KEY,19 name text,20 description text,21 time integer,22 author text,23 large_file text,24 medium_file text,25 small_file text,26 component text,27 version text28 );""", 29 """INSERT INTO system (name, value) VALUES ('screenshots_version', '1')"""]3 tables = [ 4 Table('screenshot', key = 'id')[ 5 Column('id', type = 'integer', auto_increment = True), 6 Column('name'), 7 Column('description'), 8 Column('time', type = 'integer'), 9 Column('author'), 10 Column('large_file'), 11 Column('medium_file'), 12 Column('small_file'), 13 Column('component'), 14 Column('version') 15 ] 16 ] 30 17 31 18 def do_upgrade(env, cursor): 32 if env.config.get('trac', 'database').startswith('postgres'): 33 for statement in postgre_sql: 19 db_connector, _ = DatabaseManager(env)._get_connector() 20 21 # Create tables 22 for table in tables: 23 for statement in db_connector.to_sql(table): 34 24 cursor.execute(statement) 35 else: 36 for statement in sql: 37 cursor.execute(statement) 25 26 # Set database schema version. 27 cursor.execute("INSERT INTO system (name, value) VALUES" 28 " ('screenshots_version', '1')") screenshotsplugin/0.10/tracscreenshots/db/db2.py
r1179 r1225 1 # Commont SQL statements 2 pre_sql = ["""ALTER TABLE screenshot RENAME TO tmp_screenshot""", 3 """CREATE TABLE screenshot ( 4 id integer PRIMARY KEY, 5 name text, 6 description text, 7 time integer, 8 author text, 9 tags text, 10 large_file text, 11 medium_file text, 12 small_file text 13 )""", 14 """CREATE TABLE screenshot_component ( 15 id integer PRIMARY KEY, 16 screenshot integer, 17 component text 18 )""", 19 """CREATE TABLE screenshot_version ( 20 id integer PRIMARY KEY, 21 screenshot integer, 22 version text 23 )"""] 1 from trac.db import Table, Column, Index, DatabaseManager 24 2 25 post_sql = ["""DROP TABLE tmp_screenshot""", 26 """UPDATE system SET value = '2' WHERE name = 'screenshots_version'"""] 27 28 # PostgreSQL statements 29 pre_postgre_sql = ["""ALTER TABLE screenshot RENAME TO tmp_screenshot""",30 """CREATE TABLE screenshot ( 31 id serial PRIMARY KEY,32 name text,33 description text,34 time integer,35 author text,36 tags, text,37 large_file text,38 medium_file text,39 small_file text40 )""",41 """CREATE TABLE screenshot_component ( 42 id serial PRIMARY KEY,43 screenshot integer,44 component text45 )""", 46 """CREATE TABLE screenshot_version ( 47 id serial PRIMARY KEY,48 screenshot integer,49 version text50 )"""]3 tables = [ 4 Table('screenshot', key = 'id') 5 [ 6 Column('id', type = 'integer', auto_increment = True), 7 Column('name'), 8 Column('description'), 9 Column('time', type = 'integer'), 10 Column('author'), 11 Column('tags'), 12 Column('large_file'), 13 Column('medium_file'), 14 Column('small_file'), 15 ], 16 Table('screenshot_component', key = 'id') 17 [ 18 Column('id', type = 'integer', auto_increment = True), 19 Column('screenshot', type = 'integer'), 20 Column('component') 21 ], 22 Table('screenshot_version', key = 'id') 23 [ 24 Column('id', type = 'integer', auto_increment = True), 25 Column('screenshot', type = 'integer'), 26 Column('version') 27 ] 28 ] 51 29 52 30 def do_upgrade(env, cursor): 53 # Prepare old and new tables. 54 if env.config.get('trac', 'database').startswith('postgres'): 55 for statement in pre_postgre_sql: 56 cursor.execute(statement) 57 else: 58 for statement in pre_sql: 31 db_connector, _ = DatabaseManager(env)._get_connector() 32 33 # Backup old screenshot table. 34 cursor.execute("CREATE TEMPORARY TABLE screenshot_old AS SELECT * FROM screenshot") 35 cursor.execute("DROP TABLE screenshot") 36 37 # Create new tables 38 for table in tables: 39 for statement in db_connector.to_sql(table): 59 40 cursor.execute(statement) 60 41 … … 63 44 'medium_file', 'small_file', 'component', 'version') 64 45 sql = "SELECT id, name, description, time, author, large_file," \ 65 " medium_file, small_file, component, version FROM tmp_screenshot"46 " medium_file, small_file, component, version FROM screenshot_old" 66 47 cursor.execute(sql) 67 48 screenshots = [] … … 86 67 cursor.execute(sql, (screenshot['id'], screenshot['version'])) 87 68 88 # Finish upgrade. 89 for statement in post_sql: 90 cursor.execute(statement) 69 # Delete temporary table and set database schema version. 70 cursor.execute("DROP TABLE screenshot_old") 71 cursor.execute("UPDATE system SET value = '2' WHERE name =" 72 " 'screenshots_version'") screenshotsplugin/0.10/tracscreenshots/init.py
r1179 r1225 29 29 db_version = self._get_db_version(cursor) 30 30 31 31 32 # Perform incremental upgrades 32 33 for I in range(db_version + 1, last_db_version + 1): 33 34 script_name = 'db%i' % (I) 34 try: 35 module = __import__('tracscreenshots.db.%s' % (script_name), 36 globals(), locals(), ['do_upgrade']) 37 module.do_upgrade(self.env, cursor) 38 except: 39 raise TracError('Error upgrading database to version %i' % I) 35 module = __import__('tracscreenshots.db.%s' % (script_name), 36 globals(), locals(), ['do_upgrade']) 37 module.do_upgrade(self.env, cursor) 40 38 41 39 def _get_db_version(self, cursor): screenshotsplugin/0.10/tracscreenshots/wiki.py
r1179 r1225 2 2 from trac.core import * 3 3 from trac.wiki import IWikiSyntaxProvider 4 from trac.util.html import html 4 5 5 6 class ScreenshotsWiki(Component): … … 36 37 version = self._get_version_by_name(versions, 37 38 screenshot['versions'][0]) 38 return '<a href="%s?component=%s;version=%s;id=%s" title="%s">' \39 '%s</a>' % (self.env.href.screenshots(),component['id'],40 version['id'], screenshot['id'] , screenshot['name'], label)39 return html.a(label, href = formatter.href.screenshots() 40 + '?component=%s;version=%s;id=%s' % (component['id'], 41 version['id'], screenshot['id']), title = screenshot['name']) 41 42 else: 42 return '<a href="%s" class="missing">%s?</a>' % (43 self.env.href.screenshots(), label)43 return html.a(label, href = formatter.href.screenshots(), 44 title = params, class_ = 'missing') 44 45 45 46 def _get_component_by_name(self, components, name):
