def __init__(self, sourcepackagename=None, from_sourcepackagename=None,
- distroseries=None, productseries=None):
+ distroseries=None, productseries=None, iscurrent=None):
"""Create a new `POTemplateSubset` object.
The set of POTemplate depends on the arguments you pass to this constructor. The sourcepackagename, from_sourcepackagename, distroseries and productseries are just filters for that set.
+ In addition, iscurrent sets the filter for the iscurrent flag.
""" self.sourcepackagename = sourcepackagename self.distroseries = distroseries self.productseries = productseries
+ self.iscurrent = iscurrent self.clausetables = [] self.orderby = ['id']
+ # Add the filter for the iscurrent flag if requested.
+ if iscurrent is not None:
+ self.query += " AND POTemplate.iscurrent=%s" % (
+ sqlvalues(iscurrent))
+
# Finally, we sort the query by its path in all cases. self.orderby.append('POTemplate.path')
@@ -270,7 +271,7 @@
# it in a different source package as a second try. To do it, we
# need to get a subset of all packages in current distro series. potemplate_subset = potemplateset.getSubset(
- distroseries=self.distroseries)
+ distroseries=self.distroseries, iscurrent=True) potemplate = potemplate_subset.getPOTemplateByTranslationDomain( translation_domain)
=== modified file 'lib/canonical/launchpad/doc/potemplate.txt'
--- lib/canonical/launchpad/doc/potemplate.txt 2008-09-09 08:30:39 +0000
+++ lib/canonical/launchpad/doc/potemplate.txt 2009-01-09 14:45:58 +0000
@@ -112,13 +112,54 @@
This method gives us the IPOTemplate that belongs to this subset and its
translation domain is the given one.
- >>> productseries = ProductSeries.get(5)
+ >>> productseries = ProductSeries.get(8)
>>> potemplatesubset = potemplate_set.getSubset(
... productseries=productseries)
- >>> potemplate = potemplatesubset.getPOTemplateByTranslationDomain(
- ... 'NetApplet')
- >>> print potemplate.title
- Template "netapplet" in NetApplet trunk
+
+=== Filtering for iscurrent ===
+
+IPOTemplate specifies an "iscurrent" flag that indicates if this template
+should be available for translations or not.
+
+ >>> from zope.security.proxy import removeSecurityProxy
+ >>> disabled_template = potemplatesubset.new(
+ ... 'disabled-template', 'alsa-utils', 'po/disabled.pot', user)
+ >>> removeSecurityProxy(disabled_template).iscurrent = False
+
+The subset can be configured to filter templates on the iscurrent flag. This
+filter is effective for all get* methods but it will only be demonstrated
+here. The filter is applied during creation by specifying the filter value
+as an extra parameter. The default value is "None" which disables the filter
+and both current and disabled templates are returned.
+
+For getPOTemplateByTranslationDomain, this case is an error because only one
+template per translation domain is allowed.
+
+ >>> potemplate = potemplatesubset.getPOTemplateByTranslationDomain(
+ ... 'alsa-utils')
+ WARNING:canonical.launchpad.database.potemplate:Found...
+ multiple templates with translation domain 'alsa-utils'...
+ There should be only one.
+ >>> potemplate is None
+ True
+
+Setting the filter to "True" will only return current (enabled) templates.
+
+ >>> potemplatesubset = potemplate_set.getSubset(
+ ... productseries=productseries, iscurrent=True)
+ >>> potemplate = potemplatesubset.getPOTemplateByTranslationDomain(
+ ... 'alsa-utils')
+ >>> print potemplate.title
+ Template "alsa-utils" in alsa-utils trunk
+
+Setting the filter to "False" will only return disabled templates.
+
+ >>> potemplatesubset = potemplate_set.getSubset(
+ ... productseries=productseries, iscurrent=False)
+ >>> potemplate = potemplatesubset.getPOTemplateByTranslationDomain(
+ ... 'alsa-utils')
+ >>> print potemplate.title
+ Template "disabled-template" in alsa-utils trunk
== getClosestPOTemplate ==
=== modified file 'lib/canonical/launchpad/interfaces/potemplate.py'
--- lib/canonical/launchpad/interfaces/potemplate.py 2008-10-07 06:46:36 +0000
+++ lib/canonical/launchpad/interfaces/potemplate.py 2009-01-09 14:54:45 +0000
@@ -471,6 +471,13 @@
'The `IProductSeries` associated with this subset.'), schema=IProductSeries)
+ iscurrent = Bool(
+ title=_("Filter for iscurrent flag."),
+ description=_(
+ "The filter for the iscurrent flag that this subset should "
+ "apply. The filter is disabled if it is None"),
+ required=False)
+
title = TextLine( title=_('The translation file title.'), required=True, readonly=True)
@@ -541,12 +548,12 @@
"""Return an iterator over all POTemplate sorted by modification."""
def getSubset(distroseries=None, sourcepackagename=None,
- productseries=None):
+ productseries=None, iscurrent=None):
"""Return a POTemplateSubset object depending on the given arguments.
"""
def getSubsetFromImporterSourcePackageName(
- distroseries, sourcepackagename):
+ distroseries, sourcepackagename, iscurrent=None):
"""Return a POTemplateSubset based on the origin sourcepackagename.
"""
=== modified file 'lib/canonical/ launchpad/ database/ potemplate. py' launchpad/ database/ potemplate. py 2008-10-10 09:17:54 +0000 launchpad/ database/ potemplate. py 2009-01-09 14:51:27 +0000 (IPOTemplateSub set)
--- lib/canonical/
+++ lib/canonical/
@@ -734,16 +734,18 @@
implements
def __init__(self, sourcepackagena me=None, from_sourcepack agename= None, None):
- distroseries=None, productseries=
+ distroseries=None, productseries=None, iscurrent=None):
"""Create a new `POTemplateSubset` object.
The set of POTemplate depends on the arguments you pass to this
constructor. The sourcepackagename, from_sourcepack agename,
distroseries and productseries are just filters for that set.
self. sourcepackagena me = sourcepackagename
self. distroseries = distroseries
self. productseries = productseries
self. clausetables = []
self. orderby = ['id']
+ In addition, iscurrent sets the filter for the iscurrent flag.
"""
+ self.iscurrent = iscurrent
@@ -773,6 +775,11 @@
self. orderby. append( 'DistroSeries. name')
self. clausetables. append( 'DistroSeries' )
+ # Add the filter for the iscurrent flag if requested. iscurrent= %s" % ( iscurrent) )
self. orderby. append( 'POTemplate. path')
+ if iscurrent is not None:
+ self.query += " AND POTemplate.
+ sqlvalues(
+
# Finally, we sort the query by its path in all cases.
@@ -932,15 +939,16 @@ select( orderBy= ['-date_ last_updated' ])
return POTemplate.
def getSubset(self, distroseries=None, sourcepackagena me=None, None): `."""
distroser ies=distroserie s,
sourcepac kagename= sourcepackagena me, productseries) productseries, iscurrent)
- productseries=
+ productseries=None, iscurrent=None):
"""See `IPOTemplateSet
return POTemplateSubset(
- productseries=
+ productseries=
+ iscurrent=
def getSubsetFromIm porterSourcePac kageName( self, distroseries, `."""
- sourcepackagename):
+ sourcepackagename, iscurrent=None):
"""See `IPOTemplateSet
if distroseries is None or sourcepackagename is None:
raise AssertionError(
@@ -948,7 +956,8 @@
return POTemplateSubset(
distroser ies=distroserie s, me=sourcepackag ename) me=sourcepackag ename, iscurrent)
- sourcepackagena
+ sourcepackagena
+ iscurrent=
def getPOTemplateBy PathAndOrigin( self, path, productseries=None,
distroseries= None, sourcepackagena me=None) :
=== modified file 'lib/canonical/ launchpad/ database/ translationimpo rtqueue. py' launchpad/ database/ translationimpo rtqueue. py 2009-01-03 19:32:48 +0000 launchpad/ database/ translationimpo rtqueue. py 2009-01-09 14:55:51 +0000
potemplate_ subset = potemplateset. getSubset(
distroser ies=self. distroseries,
sourcepac kagename= self.sourcepack agename, self.productser ies) self.productser ies, subset. getPOTemplateBy TranslationDoma in(
translati on_domain)
--- lib/canonical/
+++ lib/canonical/
@@ -259,7 +259,8 @@
- productseries=
+ productseries=
+ iscurrent=True)
potemplate = potemplate_
@@ -270,7 +271,7 @@
potemplat e_subset = potemplateset. getSubset( self.distroseri es) self.distroseri es, iscurrent=True)
potemplat e = potemplate_ subset. getPOTemplateBy TranslationDoma in(
translation_ domain)
# it in a different source package as a second try. To do it, we
# need to get a subset of all packages in current distro series.
- distroseries=
+ distroseries=
=== modified file 'lib/canonical/ launchpad/ doc/potemplate. txt' launchpad/ doc/potemplate. txt 2008-09-09 08:30:39 +0000 launchpad/ doc/potemplate. txt 2009-01-09 14:45:58 +0000
--- lib/canonical/
+++ lib/canonical/
@@ -112,13 +112,54 @@
This method gives us the IPOTemplate that belongs to this subset and its
translation domain is the given one.
- >>> productseries = ProductSeries. get(5) get(8) set.getSubset( productseries) t.getPOTemplate ByTranslationDo main( t.new( template' , 'alsa-utils', 'po/disabled.pot', user) roxy(disabled_ template) .iscurrent = False TranslationDoma in, this case is an error because only one t.getPOTemplate ByTranslationDo main( canonical. launchpad. database. potemplate: Found.. . set.getSubset( productseries, iscurrent=True) t.getPOTemplate ByTranslationDo main( set.getSubset( productseries, iscurrent=False) t.getPOTemplate ByTranslationDo main(
+ >>> productseries = ProductSeries.
>>> potemplatesubset = potemplate_
... productseries=
- >>> potemplate = potemplatesubse
- ... 'NetApplet')
- >>> print potemplate.title
- Template "netapplet" in NetApplet trunk
+
+=== Filtering for iscurrent ===
+
+IPOTemplate specifies an "iscurrent" flag that indicates if this template
+should be available for translations or not.
+
+ >>> from zope.security.proxy import removeSecurityProxy
+ >>> disabled_template = potemplatesubse
+ ... 'disabled-
+ >>> removeSecurityP
+
+The subset can be configured to filter templates on the iscurrent flag. This
+filter is effective for all get* methods but it will only be demonstrated
+here. The filter is applied during creation by specifying the filter value
+as an extra parameter. The default value is "None" which disables the filter
+and both current and disabled templates are returned.
+
+For getPOTemplateBy
+template per translation domain is allowed.
+
+ >>> potemplate = potemplatesubse
+ ... 'alsa-utils')
+ WARNING:
+ multiple templates with translation domain 'alsa-utils'...
+ There should be only one.
+ >>> potemplate is None
+ True
+
+Setting the filter to "True" will only return current (enabled) templates.
+
+ >>> potemplatesubset = potemplate_
+ ... productseries=
+ >>> potemplate = potemplatesubse
+ ... 'alsa-utils')
+ >>> print potemplate.title
+ Template "alsa-utils" in alsa-utils trunk
+
+Setting the filter to "False" will only return disabled templates.
+
+ >>> potemplatesubset = potemplate_
+ ... productseries=
+ >>> potemplate = potemplatesubse
+ ... 'alsa-utils')
+ >>> print potemplate.title
+ Template "disabled-template" in alsa-utils trunk
== getClosestPOTem plate ==
=== modified file 'lib/canonical/ launchpad/ interfaces/ potemplate. py' launchpad/ interfaces/ potemplate. py 2008-10-07 06:46:36 +0000 launchpad/ interfaces/ potemplate. py 2009-01-09 14:54:45 +0000
schema= IProductSeries)
--- lib/canonical/
+++ lib/canonical/
@@ -471,6 +471,13 @@
'The `IProductSeries` associated with this subset.'),
+ iscurrent = Bool(
title= _('The translation file title.'), required=True, readonly=True)
+ title=_("Filter for iscurrent flag."),
+ description=_(
+ "The filter for the iscurrent flag that this subset should "
+ "apply. The filter is disabled if it is None"),
+ required=False)
+
title = TextLine(
@@ -541,12 +548,12 @@
"""Return an iterator over all POTemplate sorted by modification."""
def getSubset( distroseries= None, sourcepackagena me=None, None):
- productseries=
+ productseries=None, iscurrent=None):
"""Return a POTemplateSubset object depending on the given arguments.
"""
def getSubsetFromIm porterSourcePac kageName(
- distroseries, sourcepackagename):
+ distroseries, sourcepackagename, iscurrent=None):
"""Return a POTemplateSubset based on the origin sourcepackagename.
"""