
What's new in version 1.3.4
---------------------------

- New ! `GVizQuickJumpEntries` offers data about interesting places 
  in the repository (a.k.a. `quick jump entries`). This includes 
  tags and branches, for instance. The data is provided by 
  VersionControlRPC.

- Bug fixed: Formerly all revisions were included in the revision 
  log if only individual revisions were requested. Now the result 
  sets include just the information for the particular changesets 
  supplied in `rev` parameter. Tested with both `hg` and `svn`.

- Bug fixed: Exception with message `Invalid list index` was raised when
  using Subversion backend when requesting the log for individual 
  revisions. This works OK now for both `hg` and `svn`.

- Bug fixed: Wrong default value for `fmt` parameter in 
  `GVizChangesetDetails`. Now it's OK.

- Bug fixed: Formerly undocumented column in `GVizTimelineFilters` 
  provider now contains appropriate description.

- WikiFormatting may be used to document the data sources. It may be 
  included in the documentation written for parameters, columns, and 
  the data source itself.  

- Bug fixed: Documentation for providers having dynamic schemas was 
  not previously rendered. This has been fixed and a new property 
  has been added in docs to highlight whether the data source returns 
  always the same columns or if they can vary depending upon run-time 
  conditions.

- Milestones may be filtered by name by providing a UNIX pattern in 
  `filter_by` parameter.

- UNIX filename patterns are compiled using REs for better performance.

- Bug fixed: When using Hg backend, the code in version 1.3.3 in 
  order to revisions iterator (VCS RPC) entered infinite loop (under 
  certain conditions apparently related to branching or version 
  numbers). This doesnt happen anymore.

- Bug fixed: Now VCS RPC retrieves all changesets when using Hg backend.
  The implementation doesn't guess anymore the revision order and
  retrieves all that information directly from the underlying VCS
  connector in use. The former algorithm was weak because it only
  considered the first parent of a given revision. Therefore many
  others (especially all those in different branches) were missing 
  from the result set.

- Individual revisions (and not just intervals like before) may be 
  selected in `GVizChangesets` (i.e. to obtain the revision log).

- Bug fixed: As a consequence of the changes introduced in version 
  1.3.3 (especially in ReportRPC and VersionControlRPC) together 
  with `bug #5586@TH.org` in XmlRpcPlugin, made impossible 
  to render the main displaying documentation about the different 
  RPC handlers. Both docstrings have been modified and everything 
  is back to normal right now.

.. _bug #5586@TH.org: TypeError: 'NoneType' object is not callable 
       #5586@trac-hacks.org
       (http://trac-hacks.org/ticket/5586)

What's new in version 1.3.3
---------------------------

- New ! Since version 1.3.3 macro aliases are supported so that 
  embedding iGoogle gadgets in wiki pages be even easier. Aliases are 
  names of macros configured using `gadgets.aliases` option which 
  are shortcuts to use iGoogleGadget with a fixed name. For example, 
  if the aforementioned option is set to 
  `MotionChart=http://www.google.com/ig/modules/motionchart.xml`
  then the following snippets are equivalent (so users wont need to
  remember gadget URLs anymore but names they are familiar with ;). 

    [[iGoogleGadget(url=http://www.google.com/ig/modules/motionchart.xml, 
    _table_query_url=http://spreadsheets.google.com/tq?range=B3%3AG17&key=1234, 
    _table_query_refresh_interval=5)]]

    [[iGoogleGadget(url=gadget:google:modules:motionchart, 
    _table_query_url=[gviz:google:sheet:1234:B3-G17], 
    _table_query_refresh_interval=5)]]

    [[MotionChart(_table_query_url=[gviz:google:sheet:1234:B3-G17], 
    _table_query_refresh_interval=5)]]

- Aliases for Google's visualization gadgets are offered by default.

- TracLinks expressions are supported in config options used to 
  define iGoogleGadget macro aliases.

- New ! GVizTicketList now lists the tickets created in a Trac 
  environment together with their attributes. Custom fields, if 
  available, are also included in separate columns. That's why the 
  columns in the data tables returned as well as their order can 
  change from time to time, depending on the plugins enabled in the 
  particular environment and other factors.

- New ! ReportRPC now provides an interface to Trac's report module
  via XML-RPC protocol. So far report execution is only supported for 
  reports defined by using SQL and TracQuery syntax. This means that 
  saved custom queries specified using URLs are not supported yet, 
  but will be (hopefully) in a near future. In the mean time a 
  `NotImplementedError` exception is raised.

- New ! GVizAvailableReports now lists available reports and their 
  data, including report ID, title, description and the query string 
  used to select the tickets to be included in each report.

- Important ! Architectural change. From now on Request objects 
  can be supplied in to IGVizDataProvider.get_data_schema method. 
  This change allows to implement more dynamic data providers 
  since schemas can vary depending upon the run-time values provided 
  for some parameters.

- New ! GVizReportProvider now offers the data included in custom Trac 
  Reports defined by Trac users. This is a very dynamic data 
  provider, and also the first example where schema can change 
  depending upon the report specification.

- New ! VersionControlRPC now provides an interface to Trac's Version 
  Control API via XML-RPC protocol. Therefore information about files 
  in the project's repository and also about changesets is available 
  using standard protocols. It is posible to list files and folders 
  (`ls`) recursively with depth limit and filters written like 
  UNIX filename patterns. File attributes (e.g. size, content type, 
  ...), data about revisions (e.g. message, author, ...) in a given 
  (time) interval, file and folder history, and full description of 
  changes performed at a given revision, are some of the features 
  supported so far. Looking forward for further useful data to 
  be published ! This feature was "tested" using Mercurial SCM (`hg`) 
  and Subversion (`svn`), but the code *SHOULD* work as long as 
  connectors fully compatible with Trac's Version Control API be used. 
  However the different approaches taken by different VCS may lead to 
  wrong behaviors. So if you find any bug, please let me know.

- New ! GVizSourceFiles now offers information about individual 
  files and those located in a folder. This data source supports filters 
  (i.e. UNIX filename patterns), and recursive lookup with optional 
  depth value. It is also possible to get the data for an specific 
  revision. The results are mostly file attributes (e.g. size, 
  extension, content type ...), but the actual values depend upon 
  the capabilities supported by the specific repository connector in 
  use.

- New ! GVizSourceFileHistory now makes available the modifications 
  performed on  a group of files during a given time interval. 
  Boundary values may be either datetime values or revision 
  identifiers (supported by the specific repository connector). 
  Clients'll get back detailed information about the changes performed 
  on the given files in the different revisions together with the 
  file's attributes at that specific time.
  This data source supports filters (i.e. UNIX filename 
  patterns) as well as recursive lookup with optional depth value. 
  Multiple datetime formats are supported as usual.

- New ! GVizChangesetDetails now provides a detailed report 
  containing all the individual changes comitted at 
  once onto the repository and recorded in separate changesets. It 
  is possible to specify multiple changeset identifiers (supported by 
  the specific repository connector) (and | or) time intervals.
  Boundary values may be either datetime values or changeset
  identifiers.

- New ! GVizChangesets now provides meta-data describing the 
  different changesets committed to the repository related to a 
  Trac environment (i.e. revision ID, messages, author, and date). It 
  is possible to limit the results by specifying a time interval.
  Boundary values may be either datetime values or changeset
  identifiers.

- All the data providers interacting with the repository have been 
  "tested" using the connector for Mercurial SCM (i.e. `hg`). In this 
  case there are a few open issues that seem to be related with the 
  lack of support in TracMercurial for `copy` events (but it's not a 
  definitive conclusion). The current implementation *SHOULD* work 
  with other connectors compatible with Trac's Version Control API, 
  but THERE IS NO WARRANTY OF ANY KIND if you use another VCS. 
  However if your connector is not causing any trouble then you the 
  use of the aforementionned data sources *SHOULD NOT* cause any 
  damage to both your environment and your repository. Further tests 
  will be performed in the future but there's no clear schedule. 
  You could be the first one to test them. Suggestions, patches and 
  further feedback is welcome in order to overcome the actual 
  limitations. 

- Added api.IHashLibrary interface so that plugins and extensions can 
  contribute with other secure hash, message digest and checksum 
  algorithms in order to compute `sig` field in GViz API responses.

- All the code needed to support secure hash algorithms provided by 
  `hashlib` module can be found from now on in class `stdhash.HashLib`.
  It supports the following methods : `sha1`, `sha224`, `sha256`, 
  `sha384`, `sha512`, and `md5`. Additional algorithms may also be 
  available depending upon the OpenSSL library that Python uses on 
  your platform.

- All the code needed to support checksum algorithms provided by 
  `zlib` module can be found from now on in class `stdhash.ZLibChecksum`.
  It supports the following methods : `adler32`, `crc32`

- Minor adjustments to adapt support for `sig` parameter to the 
  recent introduction of `IHashLibrary` interface.

- Bug fixed: Formerly `sig` value was included in GViz API response 
  only if both, the hash method was setup and the `sig` parameter was 
  set in the request. From now on only the first condition has to 
  be met in order to send the hash value back to the client.

- Bug fixed: Minor bug while displaying instances of `datetime` 
  using plain text encoders.

- Support in `DataTable.SingleValueToJS` for automatic 
  conversion of instances of `xmlrpclib.DateTime` and `int` values 
  (POSTFIX timestamp) into instances of `datetime`. This allows to 
  supply such values in columns having types `date`, `datetime`, and 
  `timeofday` (not possible with gviz_api 1.0).

- Support in `DataTable.SingleValueToJS` for automatic 
  conversion of unicode strings using utf-8 encoding. This allows to 
  supply such strings in columns having `string` type (not possible 
  with gviz_api 1.0).

- Module `rpc` has been added to group all RPC handlers offered 
  by `TracGViz` package.

- Documentation added to highlight the use of 
  timeline.ticket_show_details option in trac.ini in order to 
  retrieve all events related to ticket changes (e.g. attachments).

- Bug fixed: TimelineRPC doesnt fail when filter definitions
  provided by instances of ITimelineEventProvider interface contain 
  a third (i.e. `checked`) element. It also handles unicode 
  characters appropriately.

- MoinMoin encoder now returns `text/x.moin.wiki` MIME type.

- Few optimizations and refactorings (e.g. unnecessary imports have 
  been removed) ... bah!

What's new in version 1.3.2
---------------------------

- TracGVizSystem now implements IPermissionRequestor interface. This 
  means that Trac admins can use `GVIZ_VIEW` permission to control 
  which users may access GViz data sources or not. On accessing such 
  data, if the aforementioned permission is not granted to the user 
  performing the request then a GViz API error response is returned 
  to the caller with `reason` set to `user_not_authenticated` in case 
  of anonymous access, or `access_denied` otherwise.

- Now absolute URLs are returned while expanding TracLinks 
  expressions found used inside iGoogleGadget macro. Formerly this 
  prevented the iGoogle container to find data inside the project 
  environment in case TracLinks expressions were used.

- Add support for `sheet` option in GoogleDocsConnector in order 
  to have links to data inside an specific sheet provided its name. 
  Hence, links like the following are supported from now on: 
  https://spreadsheets.google.com/tq?key=ABCD&sheet=Sheet1,
  https://spreadsheets.google.com/tq?key=ABCD&sheet=Sheet+2. 
  Sheet names may have alphanumeric characters as well as whitespaces.
  Syntax -> 
  `gviz:google:sheet:<spreadsheet_id>[:[<sheet_name>][:<top_cell>-<bottom_cell>]][?[headers=<number>]]`

- Formerly values in columns having types `date`, `datetime` or 
  `timeofday` were shown in non-JSON responses (e.g. HTML) 
  in a way similar to `new Date(2009, 12, 2)`. Now they are rendered 
  using the following formats `%Y-%m-%d`, `%Y-%m-%d %H:%M:%S`, 
  `%H:%M:%S` respectively.

- New ! The following (non-standard) formats are supported using 
  special format identifiers for `out` option in `tqx` parameter:
  MoinMoin wiki tables (class extfmt.GVizMoinEncoder `out:moin`).

- Every wiki GViz provider now supports name expansion using Unix 
  shell-style wildcards. This means that if such patterns are 
  specified for `name` parameter either once or multiple times, then
  all those wiki pages for which a match is found will be included in 
  the result set 
  (e.g. `/gviz/wiki/index?tqx=out:html&all&name=Wiki*&name=TracN*`
  will return information about all the versions of the wiki pages 
  starting with either `Wiki` or `TracN` prefixes, such as 
  `WikiNewPage`, `WikiHtml`, `WikiProcessors`, 
  `WikiRestructuredText`, `WikiStart`, `TracNavigation`, 
  `WikiRestructuredTextLinks`, `TracNotification`, `WikiMacros`, 
  `WikiFormatting`, `WikiPageNames`, `WikiDeletePage`).

What's new in version 1.3.1
---------------------------

- Assertions concerning permissions are supported, but not directly.
  They are delegated to the underlying layers on top of which the data 
  sources have been implemented (e.g. XML-RPC handlers).

- GadgetLinksDispatcher has been renamed. Now it is known as 
  LinksTreeDispatcher. It supports multiple root namespaces 
  (i.e. so far `gadgets`, and `gviz`) as well as the former hierarchy 
  of links. 

- IGadgetTracLinksResolver now is known as ITracLinksItem interface. 
  From now on its `get_link_resolvers` method *has to* return the 
  name of the root namespace (e.g. `gviz`).

- New ! TracLinks expressions for Google Apps Reporting Visualization 
  API have been implemented. It may be necessary to be logged in to 
  the Google Apps control panel in order to access the data. 
  Syntax -> 
  `gviz:google:apps:<report_key>@<report_date>:<domain>[?tq=<query>]`

- New ! It is possible to make reference to Google Spreadsheets using 
  TracLinks expressions starting with `gviz:google:sheet:` prefix. 
  They also support `range` attribute -to select only specific cells- 
  and `headers` option -in order to specify how many rows are header 
  rows-. Syntax -> 
  `gviz:google:sheet:<sheet_id>[:<top_cell>-<bottom_cell>][?headers=<number>]`

- New ! It is possible to make reference to Google's standard 
  visualizations using TracLinks expressions starting with 
  `gadget:google:modules:` prefix. Syntax -> 
  `gadget:google:modules:<chart_name>`

- TracLinks expansion for custom arguments in iGoogleGadget macro is 
  not a dream anymore. You can enclose TracLinks expressions in 
  brackets and assign such values to custom arguments. In such cases 
  the macro will perform the expansion looking for the target URL. 
  Hence the first expression shown below can be written now as shown 
  in the second example. Both of them will embed in the wiki page a 
  motion chart displaying the data found in cells B3-G17 inside 
  Google Spreadsheet number 1234.

    [[iGoogleGadget(url=http://www.google.com/ig/modules/motionchart.xml, 
    _table_query_url=http://spreadsheets.google.com/tq?range=B3%3AG17&key=1234, 
    _table_query_refresh_interval=5)]]

    [[iGoogleGadget(url=gadget:google:modules:motionchart, 
    _table_query_url=[gviz:google:sheet:1234:B3-G17], 
    _table_query_refresh_interval=5)]]

- All links to third-party sites resulting from expanding a 
  TracLinks expression are rendered in wiki pages with the well-know 
  icon `[]->`.

- Instances of GVizXMLRPCAdapter now can implement the method 
  `xmlrpc_namespace`. It is similar to the former `gviz_namespace` 
  method, but returns the XML-RPC namespace. This way multiple data 
  sources can be implemented using the services provided by a single 
  XML-RPC component.

- New ! GVizSearchFiltersProvider now allows to list all search 
  filters installed in a Trac environment.

- New ! It is possible to document the parameters accepted by a data 
  source using `gviz_param` decorator.

- GVizProviderList macro now displays the parameters accepted by 
  data providers.

- Now it is much easier to handle unicode, date & time and values 
  returned by the different data sources. From now on there is no 
  need to convert instances of xmlrpclib.DateTime in to instances of 
  datetime.date*

- New ! GVizSearchProvider now gives access to search results 
  returned by Trac built-in search engine. You can specify a query 
  string and control the search filters (e.g. `wiki`, `ticket`, 
  `milestone`, `pydoc`) in use.

- New ! You can get the names of the actions that can be performed on 
  a given ticket using `ticket/actions` data source.

- New ! You can get all the meta-data describing ticket fields by 
  accessing `ticket/fields` data source.

- New ! GVizTicketChangeLog provides a detailed changelog in order 
  to know the modifications made to different tickets. The data 
  source is available at `ticket/log`.

- New ! GVizTicketAttachments provides detailed information about the 
  files attached to different tickets. The data source is available 
  at `ticket/attachments`.

- New ! GVizTimelineFilters provides detailed information about the 
  different filters offered by those sources contributing to the 
  timeline. The data source is available at `timeline/filters`.

- New ! GVizTimelineEvents provides detailed information about the 
  timed events reported by those sources contributing to the 
  timeline. It supports time slicing, and filtering. The data source 
  is available at `timeline/log`.

- GVizMilestoneProvider has been enhanced. Formerly it just offered 
  the milestone name, due and completed time, plus its description. 
  Now it also contains some statistics on groups of tickets like 
  those displayed in the roadmap views. This includes the amount of 
  work that's been done, the units used to measure the indicators, 
  percent of the whole work that's been already done, the number of 
  active and closed tickets, and the percent they represent with 
  respect to the total number of tickets.

- New ! GVizWikiPages provides detailed information about the wiki 
  pages found in the Trac environment. It supports multiple features, 
  being timed filters, page selection and multiple versions, just a 
  few of them. The data source is available at `wiki/index`.

- New ! GVizWikiAttachments provides detailed information about the 
  files attached to wiki pages found in the Trac environment. 
  The data source is available at `wiki/attachments`.

- The right MIME type (i.e. `application/json`) is sent back to the 
  client in the HTTP response when JSON is requested. This 
  is consistent with RFC xxx.

What's new in version 1.2.3
-----------------------------

- Minor changes ... bah!

What's new in version 1.2.2
-----------------------------

- The meaning of the different columns in the table returned by GViz 
  data sources as well as the default labels can be documented using 
  `gviz_col`. This function is compliant with annotations as defined 
  by PEP 3107.

- Data sources' documentation can be included in wiki pages using 
  `GVizDataSource` macro.

- Docstrings have changed a little.

- Bug fixed: Until now, if no protocol handler was enabled then 
  the project environment became broken, because of a ValueError 
  exception being raised. This is annoying and therefore has been 
  fixed. Now if a URL having `gviz` prefix is accessed and 
  there's no protocol handler available, a ``Not Found`` (404) HTTP 
  response is returned to the caller with message 
  ``Unable to find any protocol handler``.

What's new in version 1.2.1
-----------------------------

- The `gviz_api` module (version 1.0.0) is redistributed in this 
  package. This has been made to fall back to this implementation 
  if no other has been previously installed.

- From this version on, the work is licensed under the Apache License. 
  See COPYRIGHT and NOTICE for details.

- Babel is no longer a dependency.

- Full TracLinks expansion in `iGoogleGadget` macro parameters.

- iGoogle gadgets logo included as image resource. Borders template 
  updated.

- Bug fixed: Until now, if an underlying RPC handler was disabled 
  then environment initialization failed since an annoying ValueError 
  exception was raised. That won't happen anymore. Now, once a method 
  is requested on the corresponding GViz data source provider, a GViz 
  error response is returned to the caller containing an explanatory 
  message.

What's new in version 1.2.0
---------------------------

- Added support to display iGoogle gadgets using WikiFormatting 
  extensions (i.e. iGoogleGadget macro).

- Added support to upload and host custom image-based gadget borders 
  inside the project environment.

- Bug fixed : All requests handled by IGVizDataProvider implementors 
  not having `tq` and `tqx` parameters 
  (e.g. http://myserver.com/project_name/gviz/ticket/status) now 
  output the correct data. Previously on accessing these URLs the
  HTTP response body contained an HTML error page.

What's new in version 1.1.0
---------------------------

- Support has been added to implement Google Visualization API data 
  sources by reusing existing Trac XML RPC components.

- Some (but not all) data sources for Trac ticket system are provided.
  They are based on the following Trac XML-RPC providers (listed 
  hereafter by namespace): ticket.milestone, ticket.severity, 
  ticket.type, ticket.resolution, ticket.priority, ticket.component,
  ticket.version, ticket.status.

What's new in version 1.0.0
---------------------------

- An architecture is available so as to provide a project's data in
  the format specified in Google Visualization API protocol 
  specification (version 0.5) api.TracGVizSystem.

- Multiple protocol handlers (e.g. for different versions, and 
  protocol evolution) are allowed by implementing the interface
  api.IGVizProtocolHandler. There is native support for version 0.5 of
  Google Visualization API protocol through GViz_0_5.

- It is possible to register new data sources by implementing the 
  interface api.IGVizDataProvider

- A pluggable architecture is at hand to retrieve table contents
  in multiple formats by merely implementing api.IGVizTableEncoder
  interface. The following formats are supported : JSON 
  (class stdfmt.GVizJsonEncoder), HTML (class stdfmt.GVizHtmlEncoder),
  CSV (class stdfmt.GVizCSVEncoder).

- The exception conditions mentioned in Google Visualization API
  protocol specification (version 0.5) have been identified.
