use zope.testrunner for running all tests => additional Python3 fixes
This commit is contained in:
parent
74ce78dae9
commit
48a51c54b1
10 changed files with 75 additions and 147 deletions
|
@ -1,29 +1,9 @@
|
||||||
#
|
# loops.constraint.setup
|
||||||
# Copyright (c) 2006 Helmut Merz helmutm@cy55.de
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
|
|
||||||
"""
|
""" Automatic setup of a loops site for the constraint package.
|
||||||
Automatic setup of a loops site for the constraint package.
|
|
||||||
|
|
||||||
$Id$
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from zope.component import adapts
|
from zope.component import adapts
|
||||||
from zope.interface import implements, Interface
|
|
||||||
|
|
||||||
from loops.concept import Concept
|
from loops.concept import Concept
|
||||||
from loops.constraint.interfaces import IStaticConstraint
|
from loops.constraint.interfaces import IStaticConstraint
|
||||||
|
|
96
loops/external/README.txt
vendored
96
loops/external/README.txt
vendored
|
@ -2,8 +2,6 @@
|
||||||
loops - Linked Objects for Organization and Processing Services
|
loops - Linked Objects for Organization and Processing Services
|
||||||
===============================================================
|
===============================================================
|
||||||
|
|
||||||
($Id$)
|
|
||||||
|
|
||||||
>>> from zope import component
|
>>> from zope import component
|
||||||
>>> from zope.traversing.api import getName
|
>>> from zope.traversing.api import getName
|
||||||
|
|
||||||
|
@ -28,13 +26,15 @@ Reading object information from an external source
|
||||||
|
|
||||||
>>> from loops.external.pyfunc import PyReader
|
>>> from loops.external.pyfunc import PyReader
|
||||||
|
|
||||||
>>> input = ("concept('myquery', u'My Query', 'query', viewName='mystuff.html',"
|
>>> input = ("concept('myquery', 'My Query', 'query', viewName='mystuff.html',"
|
||||||
... " options='option1\\noption2')")
|
... " options='option1\\noption2')")
|
||||||
>>> reader = PyReader()
|
>>> reader = PyReader()
|
||||||
>>> elements = reader.read(input)
|
>>> elements = reader.read(input)
|
||||||
>>> elements
|
>>> elements
|
||||||
|
[{'name': 'myquery', ...}]
|
||||||
|
|
||||||
[{'options': 'option1\noption2', 'type': 'query', 'name': 'myquery',
|
[{'options': 'option1\noption2', 'type': 'query', 'name': 'myquery',
|
||||||
'viewName': 'mystuff.html', 'title': u'My Query'}]
|
'viewName': 'mystuff.html', 'title': 'My Query'}]
|
||||||
|
|
||||||
Creating the corresponding objects
|
Creating the corresponding objects
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
@ -50,14 +50,14 @@ Creating the corresponding objects
|
||||||
>>> adMyquery = adapted(concepts['myquery'])
|
>>> adMyquery = adapted(concepts['myquery'])
|
||||||
|
|
||||||
>>> adMyquery.viewName
|
>>> adMyquery.viewName
|
||||||
u'mystuff.html'
|
'mystuff.html'
|
||||||
>>> adMyquery.options
|
>>> adMyquery.options
|
||||||
[u'option1', u'option2']
|
['option1', 'option2']
|
||||||
|
|
||||||
Importing types
|
Importing types
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
>>> input = ("type('mytype', u'My Type',"
|
>>> input = ("type('mytype', 'My Type',"
|
||||||
... " typeInterface='loops.expert.concept.IQueryConcept')")
|
... " typeInterface='loops.expert.concept.IQueryConcept')")
|
||||||
>>> reader = PyReader()
|
>>> reader = PyReader()
|
||||||
>>> elements = reader.read(input)
|
>>> elements = reader.read(input)
|
||||||
|
@ -70,7 +70,7 @@ Importing types
|
||||||
Working with resources
|
Working with resources
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
>>> input = ("resource('doc04.txt', u'Document 4', 'textdocument')\n"
|
>>> input = ("resource('doc04.txt', 'Document 4', 'textdocument')\n"
|
||||||
... "resourceRelation('myquery', 'doc04.txt', 'standard')")
|
... "resourceRelation('myquery', 'doc04.txt', 'standard')")
|
||||||
>>> reader = PyReader()
|
>>> reader = PyReader()
|
||||||
>>> elements = reader.read(input)
|
>>> elements = reader.read(input)
|
||||||
|
@ -81,13 +81,13 @@ Working with resources
|
||||||
>>> loader.load(elements)
|
>>> loader.load(elements)
|
||||||
|
|
||||||
>>> sorted(resources)
|
>>> sorted(resources)
|
||||||
[u'd001.txt', u'd002.txt', u'd003.txt', u'doc04.txt']
|
['d001.txt', 'd002.txt', 'd003.txt', 'doc04.txt']
|
||||||
|
|
||||||
Working with nodes
|
Working with nodes
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
>>> input = ("node('home', u'Home', '', u'menu', body=u'Welcome')\n"
|
>>> input = ("node('home', 'Home', '', 'menu', body='Welcome')\n"
|
||||||
... "node('myquery', u'My Query', 'home', u'page', "
|
... "node('myquery', 'My Query', 'home', 'page', "
|
||||||
... " target='concepts/myquery')")
|
... " target='concepts/myquery')")
|
||||||
>>> reader = PyReader()
|
>>> reader = PyReader()
|
||||||
>>> elements = reader.read(input)
|
>>> elements = reader.read(input)
|
||||||
|
@ -105,12 +105,12 @@ registered.
|
||||||
|
|
||||||
>>> from loops.external import annotation
|
>>> from loops.external import annotation
|
||||||
|
|
||||||
>>> input = """concept('myquery', u'My Query', 'query', viewName='mystuff.html',
|
>>> input = """concept('myquery', 'My Query', 'query', viewName='mystuff.html',
|
||||||
... options='option1\\noption2')[
|
... options='option1\\noption2')[
|
||||||
... annotations(creators=(u'john',))]"""
|
... annotations(creators=('john',))]"""
|
||||||
>>> elements = reader.read(input)
|
>>> elements = reader.read(input)
|
||||||
>>> elements[0].subElements
|
>>> elements[0].subElements
|
||||||
[{'creators': (u'john',)}]
|
[{'creators': ('john',)}]
|
||||||
|
|
||||||
Loading the element with the sub-element stores the DC attributes.
|
Loading the element with the sub-element stores the DC attributes.
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ Loading the element with the sub-element stores the DC attributes.
|
||||||
>>> from zope.dublincore.interfaces import IZopeDublinCore
|
>>> from zope.dublincore.interfaces import IZopeDublinCore
|
||||||
>>> dc = IZopeDublinCore(concepts['myquery'])
|
>>> dc = IZopeDublinCore(concepts['myquery'])
|
||||||
>>> dc.creators
|
>>> dc.creators
|
||||||
(u'john',)
|
('john',)
|
||||||
|
|
||||||
|
|
||||||
Exporting loops Objects
|
Exporting loops Objects
|
||||||
|
@ -137,22 +137,23 @@ Writing object information to the external storage
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
>>> from loops.external.pyfunc import PyWriter
|
>>> from loops.external.pyfunc import PyWriter
|
||||||
>>> from cStringIO import StringIO
|
>>> from io import StringIO
|
||||||
|
|
||||||
>>> output = StringIO()
|
>>> output = StringIO()
|
||||||
>>> writer = PyWriter()
|
>>> writer = PyWriter()
|
||||||
>>> writer.write(elements, output)
|
>>> writer.write(elements, output)
|
||||||
>>> print output.getvalue()
|
>>> print(output.getvalue())
|
||||||
type(u'task', ...)...
|
type('task', ...)...
|
||||||
type(u'country', u'Country', viewName=u'', typeInterface=u''..., options=u''...)...
|
|
||||||
type(u'query', u'Query', viewName=u'', typeInterface='loops.expert.concept.IQueryConcept'..., options=u''...)...
|
type('country', 'Country', viewName='', typeInterface=''..., options=''...)...
|
||||||
concept(u'myquery', u'My Query', u'query', options=u'option1\noption2',
|
type('query', 'Query', viewName='', typeInterface='loops.expert.concept.IQueryConcept'..., options=''...)...
|
||||||
viewName=u'mystuff.html'...)...
|
concept('myquery', 'My Query', 'query', options='option1\noption2',
|
||||||
child(u'projects', u'customer', u'standard')...
|
viewName='mystuff.html'...)...
|
||||||
resource(u'doc04.txt', u'Document 4', u'textdocument', contentType=u'')...
|
child('projects', 'customer', 'standard')...
|
||||||
resourceRelation(u'myquery', u'doc04.txt', u'standard')
|
resource('doc04.txt', 'Document 4', 'textdocument', contentType='')...
|
||||||
node(u'home', u'Home', '', u'menu')
|
resourceRelation('myquery', 'doc04.txt', 'standard')
|
||||||
node(u'myquery', u'My Query', u'home', u'page', target=u'concepts/myquery')...
|
node('home', 'Home', '', 'menu')
|
||||||
|
node('myquery', 'My Query', 'home', 'page', target='concepts/myquery')...
|
||||||
|
|
||||||
Writing sub-elements
|
Writing sub-elements
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -160,7 +161,7 @@ Writing sub-elements
|
||||||
Let's first set up a sequence with one element containing
|
Let's first set up a sequence with one element containing
|
||||||
two sub-elements.
|
two sub-elements.
|
||||||
|
|
||||||
>>> input = """concept('myquery', u'My Query', 'query', viewName='mystuff.html')[
|
>>> input = """concept('myquery', 'My Query', 'query', viewName='mystuff.html')[
|
||||||
... annotations(creators='john'),
|
... annotations(creators='john'),
|
||||||
... annotations(modified='2007-08-12')]"""
|
... annotations(modified='2007-08-12')]"""
|
||||||
>>> elements = reader.read(input)
|
>>> elements = reader.read(input)
|
||||||
|
@ -169,8 +170,8 @@ two sub-elements.
|
||||||
|
|
||||||
Writing this sequence reproduces the import format.
|
Writing this sequence reproduces the import format.
|
||||||
|
|
||||||
>>> print output.getvalue()
|
>>> print(output.getvalue())
|
||||||
concept('myquery', u'My Query', 'query', viewName='mystuff.html')[
|
concept('myquery', 'My Query', 'query', viewName='mystuff.html')[
|
||||||
annotations(creators='john'),
|
annotations(creators='john'),
|
||||||
annotations(modified='2007-08-12')]...
|
annotations(modified='2007-08-12')]...
|
||||||
|
|
||||||
|
@ -184,12 +185,13 @@ corresponding extractor adapter.
|
||||||
>>> extractor = Extractor(loopsRoot, os.path.join(dataDirectory, 'export'))
|
>>> extractor = Extractor(loopsRoot, os.path.join(dataDirectory, 'export'))
|
||||||
>>> PyWriter().write(extractor.extract(), output)
|
>>> PyWriter().write(extractor.extract(), output)
|
||||||
|
|
||||||
>>> print output.getvalue()
|
>>> print(output.getvalue())
|
||||||
type(u'task', ...)...
|
type('task', ...)...
|
||||||
type(u'country', u'Country', viewName=u'', typeInterface=u''..., options=u''...)...
|
|
||||||
concept(u'myquery', u'My Query', u'query', options=u'option1\noption2',
|
type('country', 'Country', viewName='', typeInterface=''..., options=''...)...
|
||||||
viewName=u'mystuff.html')[
|
concept('myquery', 'My Query', 'query', options='option1\noption2',
|
||||||
annotations(creators=(u'john',))]...
|
viewName='mystuff.html')[
|
||||||
|
annotations(creators=('john',))]...
|
||||||
|
|
||||||
Extracting selected parts of the concept map
|
Extracting selected parts of the concept map
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
|
@ -202,17 +204,17 @@ Extracting selected parts of the concept map
|
||||||
|
|
||||||
>>> output = StringIO()
|
>>> output = StringIO()
|
||||||
>>> writer.write(elements, output)
|
>>> writer.write(elements, output)
|
||||||
>>> print output.getvalue()
|
>>> print(output.getvalue())
|
||||||
type(u'customer', u'Customer', viewName=u'', typeInterface=u''..., options=u''...)
|
type('customer', 'Customer', ...)
|
||||||
concept(u'cust1', u'Customer 1', u'customer')
|
concept('cust1', 'Customer 1', 'customer')
|
||||||
concept(u'cust2', u'Customer 2', u'customer')
|
concept('cust2', 'Customer 2', 'customer')
|
||||||
concept(u'cust3', u'Customer 3', u'customer')
|
concept('cust3', 'Customer 3', 'customer')
|
||||||
resource(u'd001.txt', u'Doc 001', u'textdocument', contentType=u'')
|
resource('d001.txt', 'Doc 001', 'textdocument', contentType='')
|
||||||
resource(u'd003.txt', u'Doc 003', u'textdocument', contentType=u'')
|
resource('d003.txt', 'Doc 003', 'textdocument', contentType='')
|
||||||
resource(u'd002.txt', u'Doc 002', u'textdocument', contentType=u'')
|
resource('d002.txt', 'Doc 002', 'textdocument', contentType='')
|
||||||
resourceRelation(u'cust1', u'd001.txt', u'standard')
|
resourceRelation('cust1', 'd001.txt', 'standard')
|
||||||
resourceRelation(u'cust1', u'd003.txt', u'standard')
|
resourceRelation('cust1', 'd003.txt', 'standard')
|
||||||
resourceRelation(u'cust3', u'd002.txt', u'standard')
|
resourceRelation('cust3', 'd002.txt', 'standard')
|
||||||
|
|
||||||
|
|
||||||
The Export/Import View
|
The Export/Import View
|
||||||
|
|
26
loops/external/browser.py
vendored
26
loops/external/browser.py
vendored
|
@ -1,31 +1,13 @@
|
||||||
#
|
# loops.external.browser
|
||||||
# Copyright (c) 2013 Helmut Merz helmutm@cy55.de
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
|
|
||||||
"""
|
""" view class(es) for import/export.
|
||||||
view class(es) for import/export.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from cStringIO import StringIO
|
from io import StringIO
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
from zope import component
|
from zope import component
|
||||||
from zope.interface import Interface, implements
|
from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile
|
||||||
from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
|
|
||||||
from zope.cachedescriptors.property import Lazy
|
from zope.cachedescriptors.property import Lazy
|
||||||
from zope.security.proxy import removeSecurityProxy
|
from zope.security.proxy import removeSecurityProxy
|
||||||
from zope.traversing.api import getName, getPath, traverse
|
from zope.traversing.api import getName, getPath, traverse
|
||||||
|
|
6
loops/external/element.py
vendored
6
loops/external/element.py
vendored
|
@ -179,10 +179,10 @@ class ResourceElement(Element):
|
||||||
def processExport(self, extractor):
|
def processExport(self, extractor):
|
||||||
content = self.pop('data', '')
|
content = self.pop('data', '')
|
||||||
fileFlags = 'wb'
|
fileFlags = 'wb'
|
||||||
if (self.get('contentType', '').startswith('text/')
|
if self.get('contentType', '').startswith('text/'):
|
||||||
and isinstance(content, unicode)):
|
|
||||||
content = content.encode('UTF-8')
|
|
||||||
fileFlags = 'wt'
|
fileFlags = 'wt'
|
||||||
|
elif isinstance(content, str):
|
||||||
|
content = content.encode('UTF-8')
|
||||||
directory = extractor.resourceDirectory
|
directory = extractor.resourceDirectory
|
||||||
if not os.path.exists(directory):
|
if not os.path.exists(directory):
|
||||||
os.makedirs(directory)
|
os.makedirs(directory)
|
||||||
|
|
|
@ -1,25 +1,6 @@
|
||||||
#
|
# loops.integrator.content.base
|
||||||
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
|
|
||||||
"""
|
""" Access to external objects.
|
||||||
Access to external objects.
|
|
||||||
|
|
||||||
$Id$
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os, re
|
import os, re
|
||||||
|
@ -27,7 +8,7 @@ import os, re
|
||||||
from zope import component
|
from zope import component
|
||||||
from zope.cachedescriptors.property import Lazy
|
from zope.cachedescriptors.property import Lazy
|
||||||
from zope.component import adapts
|
from zope.component import adapts
|
||||||
from zope.interface import implements
|
from zope.interface import implementer
|
||||||
|
|
||||||
from cybertools.integrator.interfaces import IContainerFactory
|
from cybertools.integrator.interfaces import IContainerFactory
|
||||||
from loops.common import AdapterBase, adapted
|
from loops.common import AdapterBase, adapted
|
||||||
|
@ -39,11 +20,11 @@ from loops.type import TypeInterfaceSourceList
|
||||||
TypeInterfaceSourceList.typeInterfaces += (IExternalAccess,)
|
TypeInterfaceSourceList.typeInterfaces += (IExternalAccess,)
|
||||||
|
|
||||||
|
|
||||||
|
@implementer(IExternalAccess)
|
||||||
class ExternalAccess(AdapterBase):
|
class ExternalAccess(AdapterBase):
|
||||||
""" A concept adapter for accessing external collection.
|
""" A concept adapter for accessing external collection.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
implements(IExternalAccess)
|
|
||||||
adapts(IConcept)
|
adapts(IConcept)
|
||||||
|
|
||||||
_contextAttributes = list(IExternalAccess) + list(IConcept)
|
_contextAttributes = list(IExternalAccess) + list(IConcept)
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
"""
|
# loops.organize.browser
|
||||||
$Id$
|
|
||||||
"""
|
|
||||||
|
|
||||||
# make sure actions get registered
|
# make sure actions get registered
|
||||||
import party
|
from loops.organize import party
|
||||||
|
|
|
@ -1,23 +1,6 @@
|
||||||
#
|
# loops.organize.job.browser
|
||||||
# Copyright (c) 2012 Helmut Merz helmutm@cy55.de
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
|
|
||||||
"""
|
""" Definition of view classes and other browser related stuff for job management.
|
||||||
Definition of view classes and other browser related stuff for job management.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
|
@ -57,7 +40,7 @@ class Executor(object):
|
||||||
name=name)
|
name=name)
|
||||||
if manager is None:
|
if manager is None:
|
||||||
msg = "Job manager '%s' not found." % name
|
msg = "Job manager '%s' not found." % name
|
||||||
self.logger.warn(msg)
|
self.logger.warning(msg)
|
||||||
output.append(msg)
|
output.append(msg)
|
||||||
else:
|
else:
|
||||||
manager = removeSecurityProxy(manager)
|
manager = removeSecurityProxy(manager)
|
||||||
|
|
|
@ -430,6 +430,8 @@ class DocumentAdapter(ResourceAdapterBase):
|
||||||
_adapterAttributes = ResourceAdapterBase._adapterAttributes + ('data',)
|
_adapterAttributes = ResourceAdapterBase._adapterAttributes + ('data',)
|
||||||
|
|
||||||
def setData(self, data):
|
def setData(self, data):
|
||||||
|
if isinstance(data, bytes):
|
||||||
|
data = data.decode('UTF-8')
|
||||||
self.context._data = data.replace('\r', '')
|
self.context._data = data.replace('\r', '')
|
||||||
self.context._size = len(data)
|
self.context._size = len(data)
|
||||||
def getData(self): return self.context._data
|
def getData(self): return self.context._data
|
||||||
|
|
|
@ -11,7 +11,7 @@ from zope.catalog.catalog import Catalog
|
||||||
from zope.catalog.interfaces import ICatalog
|
from zope.catalog.interfaces import ICatalog
|
||||||
from zope.catalog.field import FieldIndex
|
from zope.catalog.field import FieldIndex
|
||||||
from zope.catalog.text import TextIndex
|
from zope.catalog.text import TextIndex
|
||||||
from zope.container.interfaces import IObjectRemovedEvent
|
from zope.lifecycleevent.interfaces import IObjectRemovedEvent
|
||||||
from zope.dublincore.annotatableadapter import ZDCAnnotatableAdapter
|
from zope.dublincore.annotatableadapter import ZDCAnnotatableAdapter
|
||||||
from zope.dublincore.interfaces import IZopeDublinCore
|
from zope.dublincore.interfaces import IZopeDublinCore
|
||||||
from zope.principalregistry.principalregistry import principalRegistry
|
from zope.principalregistry.principalregistry import principalRegistry
|
||||||
|
|
|
@ -31,13 +31,13 @@ dependencies = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
test = ["pytest"]
|
test = ["zope.testrunner"]
|
||||||
|
|
||||||
[tool.setuptools]
|
[tool.setuptools]
|
||||||
packages = ["loops"]
|
packages = ["loops"]
|
||||||
|
|
||||||
[tool.pytest.ini_options]
|
#[tool.pytest.ini_options]
|
||||||
addopts = "-vv"
|
#addopts = "-vv"
|
||||||
python_files = "test_standard.py" # default: run only `standard` tests
|
#python_files = "test_standard.py" # default: run only `standard` tests
|
||||||
# use .pytest.ini file with `python_files = test_*.py` to run all tests
|
# use .pytest.ini file with `python_files = test_*.py` to run all tests
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue