Changeset 79:483deadeaec2
- Timestamp:
- 11/13/08 07:30:47 (22 months ago)
- Author:
- Nicolas ?vrard <nicoe@…>
- Branch:
- default
- Message:
-
Splitted mimetypes and ids in ReportDict?
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r72
|
r79
|
|
| 22 | 22 | |
| 23 | 23 | import os, sys |
| 24 | | import warnings |
| 25 | 24 | |
| 26 | 25 | import pkg_resources |
| … |
… |
|
| 79 | 78 | def add_factory(cls, abbr_mimetype, template_factory, id_function=None): |
| 80 | 79 | """adds a template factory to the already known factories""" |
| 81 | | if abbr_mimetype in cls.factories: |
| 82 | | warnings.warn('You are overriding an already defined link.') |
| 83 | 80 | cls.factories[abbr_mimetype] = template_factory |
| 84 | 81 | if id_function is not None: |
| … |
… |
|
| 116 | 113 | |
| 117 | 114 | |
| 118 | | class ReportDict(dict): |
| | 115 | class ReportDict: |
| 119 | 116 | |
| 120 | 117 | def __init__(self, *args, **kwargs): |
| 121 | | self.mimetypes = set() |
| 122 | | super(ReportDict, self).__init__(*args, **kwargs) |
| | 118 | self.mimetypes = {} |
| | 119 | self.ids = {} |
| 123 | 120 | |
| 124 | 121 | |
| … |
… |
|
| 131 | 128 | |
| 132 | 129 | def __init__(self, datafactory=DefaultFactory): |
| 133 | | self.reports = {} |
| | 130 | self.classes = {} |
| 134 | 131 | self.default_factory = datafactory |
| 135 | 132 | self.loader = MIMETemplateLoader(auto_reload=True) |
| … |
… |
|
| 148 | 145 | if data_factory is None: |
| 149 | 146 | data_factory = self.default_factory |
| 150 | | reports = self.reports.setdefault(klass, ReportDict()) |
| | 147 | reports = self.classes.setdefault(klass, ReportDict()) |
| 151 | 148 | report = Report(_absolute(template_path), mimetype, data_factory(), |
| 152 | 149 | self.loader) |
| 153 | | reports[report_name] = report, mimetype |
| 154 | | reports.setdefault(mimetype, []).append((report, report_name)) |
| 155 | | if hasattr(reports, 'mimetypes'): |
| 156 | | reports.mimetypes.add(mimetype) |
| 157 | | else: |
| 158 | | reports.mimetypes = set([mimetype]) |
| | 150 | reports.ids[report_name] = report, mimetype |
| | 151 | reports.mimetypes.setdefault(mimetype, []).append((report, report_name)) |
| 159 | 152 | |
| | 153 | def by_mime(self, klass, mimetype): |
| | 154 | """gets a list of report related to a class by specifying the mimetype |
| | 155 | """ |
| | 156 | return self.classes[klass].mimetypes[mimetype] |
| | 157 | |
| | 158 | def by_id(self, klass, id): |
| | 159 | """get a report related to a class by its id |
| | 160 | """ |
| | 161 | return self.classes[klass].ids[id] |