# HG changeset patch # User Sylvain Thénault # Date 1249077672 -7200 # Node ID 4501ee760eec98f93214231c3b489fee900cbe50 # Parent 0557f25682da71103dca724946f7bc6b2bd3c967# Parent 1ea41b7c08368f8044ed5b62a79d56dce9a1f013 merge diff -r 0557f25682da -r 4501ee760eec appobject.py --- a/appobject.py Sat Aug 01 00:00:29 2009 +0200 +++ b/appobject.py Sat Aug 01 00:01:12 2009 +0200 @@ -10,7 +10,7 @@ from datetime import datetime, timedelta, time from logilab.common.decorators import classproperty -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from rql.nodes import VariableRef, SubQuery from rql.stmts import Union, Select @@ -101,7 +101,7 @@ return '%s.%s.%s' % (cls.__registry__, cls.id, propid) @classproperty - @obsolete('use __select__ and & or | operators') + @deprecated('use __select__ and & or | operators') def __selectors__(cls): selector = cls.__select__ if isinstance(selector, AndSelector): diff -r 0557f25682da -r 4501ee760eec common/migration.py --- a/common/migration.py Sat Aug 01 00:00:29 2009 +0200 +++ b/common/migration.py Sat Aug 01 00:01:12 2009 +0200 @@ -15,6 +15,7 @@ from logilab.common.decorators import cached from logilab.common.configuration import REQUIRED, read_old_config +from logilab.common.shellutils import ASK from cubicweb import ConfigurationError @@ -69,11 +70,10 @@ ability to show the script's content """ while True: - confirm = raw_input('Execute %r (Y/n/s[how]) ?' % scriptpath) - confirm = confirm.strip().lower() - if confirm in ('n', 'no'): + answer = ASK.ask('Execute %r ?' % scriptpath, ('Y','n','show'), 'Y') + if answer == 'n': return False - elif confirm in ('s', 'show'): + elif answer == 'show': stream = open(scriptpath) scriptcontent = stream.read() stream.close() @@ -188,26 +188,24 @@ if `retry` is true the r[etry] answer may return 2 """ - print question, - possibleanswers = 'Y/n' + possibleanswers = ['Y','n'] if abort: - possibleanswers += '/a[bort]' + possibleanswers.append('abort') if shell: - possibleanswers += '/s[hell]' + possibleanswers.append('shell') if retry: - possibleanswers += '/r[etry]' + possibleanswers.append('retry') try: - confirm = raw_input('(%s): ' % ( possibleanswers, )) - answer = confirm.strip().lower() + answer = ASK.ask(question, possibleanswers, 'Y') except (EOFError, KeyboardInterrupt): answer = 'abort' - if answer in ('n', 'no'): + if answer == 'n': return False - if answer in ('r', 'retry'): + if answer == 'retry': return 2 - if answer in ('a', 'abort'): + if answer == 'abort': raise SystemExit(1) - if shell and answer in ('s', 'shell'): + if shell and answer == 'shell': self.interactive_shell() return self.confirm(question) return True diff -r 0557f25682da -r 4501ee760eec common/mixins.py --- a/common/mixins.py Sat Aug 01 00:00:29 2009 +0200 +++ b/common/mixins.py Sat Aug 01 00:01:12 2009 +0200 @@ -8,7 +8,7 @@ """ __docformat__ = "restructuredtext en" -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from logilab.common.decorators import cached from cubicweb import typed_eid @@ -242,7 +242,7 @@ # specific vocabulary methods ############################################# - @obsolete('use EntityFieldsForm.subject_in_state_vocabulary') + @deprecated('use EntityFieldsForm.subject_in_state_vocabulary') def subject_in_state_vocabulary(self, rschema, limit=None): form = self.vreg.select('forms', 'edition', self.req, entity=self) return form.subject_in_state_vocabulary(rschema, limit) diff -r 0557f25682da -r 4501ee760eec cwconfig.py --- a/cwconfig.py Sat Aug 01 00:00:29 2009 +0200 +++ b/cwconfig.py Sat Aug 01 00:01:12 2009 +0200 @@ -22,7 +22,7 @@ from os.path import exists, join, expanduser, abspath, normpath, basename, isdir from logilab.common.decorators import cached -from logilab.common.deprecation import deprecated_function +from logilab.common.deprecation import deprecated from logilab.common.logging_ext import set_log_methods, init_log from logilab.common.configuration import (Configuration, Method, ConfigurationMixIn, merge_options) @@ -866,4 +866,4 @@ # alias to get a configuration instance from an instance id instance_configuration = CubicWebConfiguration.config_for -application_configuration = deprecated_function(instance_configuration, 'use instance_configuration') +application_configuration = deprecated('use instance_configuration')(instance_configuration) diff -r 0557f25682da -r 4501ee760eec cwctl.py --- a/cwctl.py Sat Aug 01 00:00:29 2009 +0200 +++ b/cwctl.py Sat Aug 01 00:01:12 2009 +0200 @@ -9,10 +9,11 @@ from os.path import exists, join, isfile, isdir from logilab.common.clcommands import register_commands, pop_arg +from logilab.common.shellutils import ASK from cubicweb import ConfigurationError, ExecutionError, BadCommandUsage, underline_title from cubicweb.cwconfig import CubicWebConfiguration as cwcfg, CONFIGURATIONS -from cubicweb.toolsutils import Command, main_run, rm, create_dir, confirm +from cubicweb.toolsutils import Command, main_run, rm, create_dir def wait_process_end(pid, maxtry=10, waittime=1): """wait for a process to actually die""" diff -r 0557f25682da -r 4501ee760eec cwvreg.py --- a/cwvreg.py Sat Aug 01 00:00:29 2009 +0200 +++ b/cwvreg.py Sat Aug 01 00:01:12 2009 +0200 @@ -9,7 +9,7 @@ _ = unicode from logilab.common.decorators import cached, clear_cache -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from rql import RQLHelper @@ -284,22 +284,22 @@ self.exception('error while trying to select %s view for %s', vid, rset) - @obsolete("use .select_object('boxes', ...)") + @deprecated("use .select_object('boxes', ...)") def select_box(self, oid, *args, **kwargs): """return the most specific view according to the result set""" return self.select_object('boxes', oid, *args, **kwargs) - @obsolete("use .select_object('components', ...)") + @deprecated("use .select_object('components', ...)") def select_component(self, cid, *args, **kwargs): """return the most specific component according to the result set""" return self.select_object('components', cid, *args, **kwargs) - @obsolete("use .select_object('actions', ...)") + @deprecated("use .select_object('actions', ...)") def select_action(self, oid, *args, **kwargs): """return the most specific view according to the result set""" return self.select_object('actions', oid, *args, **kwargs) - @obsolete("use .select('views', ...)") + @deprecated("use .select('views', ...)") def select_view(self, __vid, req, rset=None, **kwargs): """return the most specific view according to the result set""" return self.select('views', __vid, req, rset=rset, **kwargs) diff -r 0557f25682da -r 4501ee760eec devtools/apptest.py --- a/devtools/apptest.py Sat Aug 01 00:00:29 2009 +0200 +++ b/devtools/apptest.py Sat Aug 01 00:01:12 2009 +0200 @@ -15,7 +15,7 @@ from logilab.common.pytest import nocoverage from logilab.common.umessage import message_from_string -from logilab.common.deprecation import deprecated_function +from logilab.common.deprecation import deprecated from cubicweb.devtools import init_test_database, TestServerConfiguration, ApptestConfiguration from cubicweb.devtools._apptest import TestEnvironment @@ -234,7 +234,7 @@ return [(a.id, a.__class__) for a in self.vreg.possible_vobjects('actions', req, rset=rset) if a.category in categories] - paddrelactions = deprecated_function(pactions_by_cats) + paddrelactions = deprecated()(pactions_by_cats) def pactionsdict(self, req, rset, skipcategories=('addrelated', 'siteactions', 'useractions')): res = {} diff -r 0557f25682da -r 4501ee760eec devtools/devctl.py --- a/devtools/devctl.py Sat Aug 01 00:00:29 2009 +0200 +++ b/devtools/devctl.py Sat Aug 01 00:01:12 2009 +0200 @@ -17,15 +17,15 @@ from logilab.common import STD_BLACKLIST from logilab.common.modutils import get_module_files from logilab.common.textutils import get_csv +from logilab.common.shellutils import ASK from logilab.common.clcommands import register_commands from cubicweb import CW_SOFTWARE_ROOT as BASEDIR, BadCommandUsage, underline_title from cubicweb.__pkginfo__ import version as cubicwebversion -from cubicweb.toolsutils import Command, confirm, copy_skeleton +from cubicweb.toolsutils import Command, copy_skeleton from cubicweb.web.webconfig import WebConfiguration from cubicweb.server.serverconfig import ServerConfiguration - class DevCubeConfiguration(ServerConfiguration, WebConfiguration): """dummy config to get full library schema and entities""" creating = True @@ -483,7 +483,7 @@ " Please specify it using the --directory option") cubesdir = cubespath[0] if not isdir(cubesdir): - print "creating cubes directory", cubesdir + print "-> creating cubes directory", cubesdir try: mkdir(cubesdir) except OSError, err: @@ -492,19 +492,20 @@ if exists(cubedir): self.fail("%s already exists !" % (cubedir)) skeldir = join(BASEDIR, 'skeleton') + default_name = 'cubicweb-%s' % cubename.lower() if verbose: - distname = raw_input('Debian name for your cube (just type enter to use the cube name): ').strip() + distname = raw_input('Debian name for your cube ? [%s]): ' % default_name).strip() if not distname: - distname = 'cubicweb-%s' % cubename.lower() + distname = default_name elif not distname.startswith('cubicweb-'): - if confirm('do you mean cubicweb-%s ?' % distname): + if ASK.confirm('Do you mean cubicweb-%s ?' % distname): distname = 'cubicweb-' + distname else: - distname = 'cubicweb-%s' % cubename.lower() + distname = default_name longdesc = shortdesc = raw_input('Enter a short description for your cube: ') if verbose: - longdesc = raw_input('Enter a long description (or nothing if you want to reuse the short one): ') + longdesc = raw_input('Enter a long description (leave empty to reuse the short one): ') if verbose: includes = self._ask_for_dependancies() if len(includes) == 1: @@ -529,14 +530,14 @@ def _ask_for_dependancies(self): includes = [] for stdtype in ServerConfiguration.available_cubes(): - ans = raw_input("Depends on cube %s? (N/y/s(kip)/t(ype)" - % stdtype).lower().strip() - if ans == 'y': + answer = ASK.ask("Depends on cube %s? " % stdtype, + ('N','y','skip','type'), 'N') + if answer == 'y': includes.append(stdtype) - if ans == 't': + if answer == 'type': includes = get_csv(raw_input('type dependancies: ')) break - elif ans == 's': + elif answer == 'skip': break return includes diff -r 0557f25682da -r 4501ee760eec doc/book/en/annexes/cookbook.rst --- a/doc/book/en/annexes/cookbook.rst Sat Aug 01 00:00:29 2009 +0200 +++ b/doc/book/en/annexes/cookbook.rst Sat Aug 01 00:01:12 2009 +0200 @@ -12,8 +12,9 @@ [XXX distribute this script with cubicweb instead] Here is a very useful script which enables you to import LDAP users - into your *CubicWeb* instance by running the following: :: + into your *CubicWeb* instance by running the following: +.. sourcecode:: python import os import pwd @@ -69,7 +70,9 @@ The following script aims at loading data within a script assuming pyro-nsd is running and your instance is configured with ``pyro-server=yes``, otherwise - you would not be able to use dbapi. :: + you would not be able to use dbapi. + +.. sourcecode:: python from cubicweb import dbapi diff -r 0557f25682da -r 4501ee760eec doc/tools/generate_modules.py --- a/doc/tools/generate_modules.py Sat Aug 01 00:00:29 2009 +0200 +++ b/doc/tools/generate_modules.py Sat Aug 01 00:01:12 2009 +0200 @@ -8,11 +8,15 @@ import sys -EXCLUDE_DIRS = ('test', 'tests', 'examples', 'data', 'doc', '.hg', 'migration') +EXCLUDE_DIRS = ('test', 'tests', 'examples', 'data', 'doc', 'dist', + '.hg', 'migration') if __name__ == '__main__': - from logilab.common.sphinxutils import generate_modules_file - - gen = generate_modules_file(sys.argv[1:]) - gen.set_docdir("cubicweb/doc/book/en") - gen.make(['cubicweb', '/indexer', '/logilab', '/rql', '/yams'], EXCLUDE_DIRS) + from logilab.common.sphinxutils import ModuleGenerator + cw_gen = ModuleGenerator('cubicweb', '../..') + cw_gen.generate("../book/en/annexes/api_cubicweb.rst", + EXCLUDE_DIRS + ('cwdesklets', 'misc', 'skel', 'skeleton')) + for modname in ('indexer', 'logilab', 'rql', 'yams'): + cw_gen = ModuleGenerator(modname, '../../../' + modname) + cw_gen.generate("../book/en/annexes/api_%s.rst" % modname, + EXCLUDE_DIRS + ('tools',)) diff -r 0557f25682da -r 4501ee760eec entities/__init__.py --- a/entities/__init__.py Sat Aug 01 00:00:29 2009 +0200 +++ b/entities/__init__.py Sat Aug 01 00:01:12 2009 +0200 @@ -9,7 +9,7 @@ from warnings import warn -from logilab.common.deprecation import deprecated_function, obsolete +from logilab.common.deprecation import deprecated from logilab.common.decorators import cached from cubicweb import Unauthorized, typed_eid @@ -239,22 +239,22 @@ wdg = widget(cls.vreg, tschema, rschema, cls, 'object') return wdg - @obsolete('use EntityFieldsForm.subject_relation_vocabulary') + @deprecated('use EntityFieldsForm.subject_relation_vocabulary') def subject_relation_vocabulary(self, rtype, limit): form = self.vreg.select('forms', 'edition', self.req, entity=self) return form.subject_relation_vocabulary(rtype, limit) - @obsolete('use EntityFieldsForm.object_relation_vocabulary') + @deprecated('use EntityFieldsForm.object_relation_vocabulary') def object_relation_vocabulary(self, rtype, limit): form = self.vreg.select('forms', 'edition', self.req, entity=self) return form.object_relation_vocabulary(rtype, limit) - @obsolete('use AutomaticEntityForm.[e]relations_by_category') + @deprecated('use AutomaticEntityForm.[e]relations_by_category') def relations_by_category(self, categories=None, permission=None): from cubicweb.web.views.autoform import AutomaticEntityForm return AutomaticEntityForm.erelations_by_category(self, categories, permission) - @obsolete('use AutomaticEntityForm.[e]srelations_by_category') + @deprecated('use AutomaticEntityForm.[e]srelations_by_category') def srelations_by_category(self, categories=None, permission=None): from cubicweb.web.views.autoform import AutomaticEntityForm return AutomaticEntityForm.esrelations_by_category(self, categories, permission) diff -r 0557f25682da -r 4501ee760eec entity.py --- a/entity.py Sat Aug 01 00:00:29 2009 +0200 +++ b/entity.py Sat Aug 01 00:01:12 2009 +0200 @@ -12,7 +12,7 @@ from logilab.common import interface from logilab.common.compat import all from logilab.common.decorators import cached -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from logilab.mtconverter import TransformData, TransformError, xml_escape from rql.utils import rqlvar_maker @@ -719,7 +719,7 @@ # generic vocabulary methods ############################################## - @obsolete('see new form api') + @deprecated('see new form api') def vocabulary(self, rtype, role='subject', limit=None): """vocabulary functions must return a list of couples (label, eid) that will typically be used to fill the diff -r 0557f25682da -r 4501ee760eec schema.py --- a/schema.py Sat Aug 01 00:00:29 2009 +0200 +++ b/schema.py Sat Aug 01 00:01:12 2009 +0200 @@ -14,7 +14,7 @@ from warnings import warn from logilab.common.decorators import cached, clear_cache, monkeypatch -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from logilab.common.compat import any from yams import BadSchemaDefinition, buildobjs as ybo @@ -78,7 +78,7 @@ # ensure unicode # added .lower() in case no translation are available return unicode(req._(key)).lower() -__builtins__['display_name'] = obsolete('display_name should be imported from cubicweb.schema')(display_name) +__builtins__['display_name'] = deprecated('display_name should be imported from cubicweb.schema')(display_name) def ERSchema_display_name(self, req, form=''): """return a internationalized string for the entity/relation type name in diff -r 0557f25682da -r 4501ee760eec selectors.py --- a/selectors.py Sat Aug 01 00:00:29 2009 +0200 +++ b/selectors.py Sat Aug 01 00:01:12 2009 +0200 @@ -46,7 +46,7 @@ from warnings import warn from logilab.common.compat import all -from logilab.common.deprecation import deprecated_function +from logilab.common.deprecation import deprecated from logilab.common.interface import implements as implements_iface from yams import BASE_TYPES @@ -976,86 +976,86 @@ # XXX DEPRECATED ############################################################## -yes_selector = deprecated_function(yes) -norset_selector = deprecated_function(none_rset) -rset_selector = deprecated_function(any_rset) -anyrset_selector = deprecated_function(nonempty_rset) -emptyrset_selector = deprecated_function(empty_rset) -onelinerset_selector = deprecated_function(one_line_rset) -twolinerset_selector = deprecated_function(two_lines_rset) -twocolrset_selector = deprecated_function(two_cols_rset) -largerset_selector = deprecated_function(paginated_rset) -sortedrset_selector = deprecated_function(sorted_rset) -oneetyperset_selector = deprecated_function(one_etype_rset) -multitype_selector = deprecated_function(two_etypes_rset) -anonymous_selector = deprecated_function(anonymous_user) -not_anonymous_selector = deprecated_function(authenticated_user) -primaryview_selector = deprecated_function(primary_view) -contextprop_selector = deprecated_function(match_context_prop) +yes_selector = deprecated()(yes) +norset_selector = deprecated()(none_rset) +rset_selector = deprecated()(any_rset) +anyrset_selector = deprecated()(nonempty_rset) +emptyrset_selector = deprecated()(empty_rset) +onelinerset_selector = deprecated()(one_line_rset) +twolinerset_selector = deprecated()(two_lines_rset) +twocolrset_selector = deprecated()(two_cols_rset) +largerset_selector = deprecated()(paginated_rset) +sortedrset_selector = deprecated()(sorted_rset) +oneetyperset_selector = deprecated()(one_etype_rset) +multitype_selector = deprecated()(two_etypes_rset) +anonymous_selector = deprecated()(anonymous_user) +not_anonymous_selector = deprecated()(authenticated_user) +primaryview_selector = deprecated()(primary_view) +contextprop_selector = deprecated()(match_context_prop) +@deprecated('use non_final_entity instead of %s') def nfentity_selector(cls, req, rset=None, row=None, col=0, **kwargs): return non_final_entity()(cls, req, rset, row, col) -nfentity_selector = deprecated_function(nfentity_selector) +@deprecated('use implements instead of %s') def implement_interface(cls, req, rset=None, row=None, col=0, **kwargs): return implements(*cls.accepts_interfaces)(cls, req, rset, row, col) -_interface_selector = deprecated_function(implement_interface) -interface_selector = deprecated_function(implement_interface) -implement_interface = deprecated_function(implement_interface, 'use implements') +_interface_selector = deprecated()(implement_interface) +interface_selector = deprecated()(implement_interface) +@deprecated('use specified_etype_implements instead of %s') def accept_etype(cls, req, *args, **kwargs): """check etype presence in request form *and* accepts conformance""" return specified_etype_implements(*cls.accepts)(cls, req, *args) -etype_form_selector = deprecated_function(accept_etype) -accept_etype = deprecated_function(accept_etype, 'use specified_etype_implements') +etype_form_selector = accept_etype +@deprecated('use match_search_state instead of %s') def searchstate_selector(cls, req, rset=None, row=None, col=0, **kwargs): return match_search_state(cls.search_states)(cls, req, rset, row, col) -searchstate_selector = deprecated_function(searchstate_selector) +@deprecated('use match_user_groups instead of %s') def match_user_group(cls, req, rset=None, row=None, col=0, **kwargs): return match_user_groups(*cls.require_groups)(cls, req, rset, row, col, **kwargs) -in_group_selector = deprecated_function(match_user_group) -match_user_group = deprecated_function(match_user_group) +in_group_selector = match_user_group +@deprecated('use relation_possible instead of %s') def has_relation(cls, req, rset=None, row=None, col=0, **kwargs): return relation_possible(cls.rtype, role(cls), cls.etype, getattr(cls, 'require_permission', 'read'))(cls, req, rset, row, col, **kwargs) -has_relation = deprecated_function(has_relation) +@deprecated('use relation_possible instead of %s') def one_has_relation(cls, req, rset=None, row=None, col=0, **kwargs): return relation_possible(cls.rtype, role(cls), cls.etype, getattr(cls, 'require_permission', 'read', once_is_enough=True))(cls, req, rset, row, col, **kwargs) -one_has_relation = deprecated_function(one_has_relation, 'use relation_possible selector') +@deprecated('use implements instead of %s') def accept_rset(cls, req, rset=None, row=None, col=0, **kwargs): """simply delegate to cls.accept_rset method""" return implements(*cls.accepts)(cls, req, rset, row=row, col=col) -accept_rset_selector = deprecated_function(accept_rset) -accept_rset = deprecated_function(accept_rset, 'use implements selector') +accept_rset_selector = accept_rset accept = chainall(non_final_entity(), accept_rset, name='accept') -accept_selector = deprecated_function(accept) -accept = deprecated_function(accept, 'use implements selector') +accept = deprecated('use implements selector')(accept) +accept_selector = deprecated()(accept) -accept_one = deprecated_function(chainall(one_line_rset, accept, +accept_one = deprecated()(chainall(one_line_rset, accept, name='accept_one')) -accept_one_selector = deprecated_function(accept_one) +accept_one_selector = deprecated()(accept_one) def _rql_condition(cls, req, rset=None, row=None, col=0, **kwargs): if cls.condition: return rql_condition(cls.condition)(cls, req, rset, row, col) return 1 -_rqlcondition_selector = deprecated_function(_rql_condition) +_rqlcondition_selector = deprecated()(_rql_condition) -rqlcondition_selector = deprecated_function(chainall(non_final_entity(), one_line_rset, _rql_condition, +rqlcondition_selector = deprecated()(chainall(non_final_entity(), one_line_rset, _rql_condition, name='rql_condition')) +@deprecated('use but_etype instead of %s') def but_etype_selector(cls, req, rset=None, row=None, col=0, **kwargs): return but_etype(cls.etype)(cls, req, rset, row, col) -but_etype_selector = deprecated_function(but_etype_selector) @lltrace def etype_rtype_selector(cls, req, rset=None, row=None, col=0, **kwargs): @@ -1070,24 +1070,25 @@ if not (rschema.has_perm(req, perm) or rschema.has_local_role(perm)): return 0 return 1 -etype_rtype_selector = deprecated_function(etype_rtype_selector) +etype_rtype_selector = deprecated()(etype_rtype_selector) -#req_form_params_selector = deprecated_function(match_form_params) # form_params -#kwargs_selector = deprecated_function(match_kwargs) # expected_kwargs +#req_form_params_selector = deprecated()(match_form_params) # form_params +#kwargs_selector = deprecated()(match_kwargs) # expected_kwargs # compound selectors ########################################################## searchstate_accept = chainall(nonempty_rset(), accept, name='searchstate_accept') -searchstate_accept_selector = deprecated_function(searchstate_accept) +searchstate_accept_selector = deprecated()(searchstate_accept) searchstate_accept_one = chainall(one_line_rset, accept, _rql_condition, name='searchstate_accept_one') -searchstate_accept_one_selector = deprecated_function(searchstate_accept_one) +searchstate_accept_one_selector = deprecated()(searchstate_accept_one) -searchstate_accept = deprecated_function(searchstate_accept) -searchstate_accept_one = deprecated_function(searchstate_accept_one) +searchstate_accept = deprecated()(searchstate_accept) +searchstate_accept_one = deprecated()(searchstate_accept_one) +# end of deprecation section ################################################## def unbind_method(selector): def new_selector(registered): diff -r 0557f25682da -r 4501ee760eec server/migractions.py --- a/server/migractions.py Sat Aug 01 00:00:29 2009 +0200 +++ b/server/migractions.py Sat Aug 01 00:01:12 2009 +0200 @@ -22,7 +22,7 @@ from os.path import join, exists from datetime import datetime -from logilab.common.deprecation import deprecated_function, obsolete +from logilab.common.deprecation import deprecated from logilab.common.decorators import cached, clear_cache from logilab.common.adbh import get_adv_func_helper @@ -199,9 +199,9 @@ 'fsschema': self.fs_schema, 'session' : self.session, 'repo' : self.repo, - 'synchronize_schema': deprecated_function(self.cmd_sync_schema_props_perms), - 'synchronize_eschema': deprecated_function(self.cmd_sync_schema_props_perms), - 'synchronize_rschema': deprecated_function(self.cmd_sync_schema_props_perms), + 'synchronize_schema': deprecated()(self.cmd_sync_schema_props_perms), + 'synchronize_eschema': deprecated()(self.cmd_sync_schema_props_perms), + 'synchronize_rschema': deprecated()(self.cmd_sync_schema_props_perms), }) return context @@ -838,7 +838,7 @@ if commit: self.commit() - @obsolete('use sync_schema_props_perms(ertype, syncprops=False)') + @deprecated('use sync_schema_props_perms(ertype, syncprops=False)') def cmd_synchronize_permissions(self, ertype, commit=True): self.cmd_sync_schema_props_perms(ertype, syncprops=False, commit=commit) diff -r 0557f25682da -r 4501ee760eec server/serverctl.py --- a/server/serverctl.py Sat Aug 01 00:00:29 2009 +0200 +++ b/server/serverctl.py Sat Aug 01 00:01:12 2009 +0200 @@ -12,9 +12,10 @@ from logilab.common.configuration import Configuration from logilab.common.clcommands import register_commands, cmd_run, pop_arg +from logilab.common.shellutils import ASK from cubicweb import AuthenticationError, ExecutionError, ConfigurationError, underline_title -from cubicweb.toolsutils import Command, CommandHandler, confirm +from cubicweb.toolsutils import Command, CommandHandler from cubicweb.server import SOURCE_TYPES from cubicweb.server.utils import ask_source_config from cubicweb.server.serverconfig import USER_OPTIONS, ServerConfiguration @@ -139,7 +140,7 @@ if cube in SOURCE_TYPES: sourcescfg[cube] = ask_source_config(cube, inputlevel) print - while confirm('Enter another source ?', default_is_yes=False): + while ASK.confirm('Enter another source ?', default_is_yes=False): available = sorted(stype for stype in SOURCE_TYPES if not stype in cubes) while True: @@ -169,7 +170,7 @@ config.write_bootstrap_cubes_file(cubes) def postcreate(self): - if confirm('Do you want to run db-create to create the system database ?'): + if ASK.confirm('Run db-create to create the system database ?'): verbosity = (self.config.mode == 'installed') and 'y' or 'n' cmd_run('db-create', self.config.appid, '--verbose=%s' % verbosity) else: @@ -187,7 +188,7 @@ source = self.config.sources()['system'] dbname = source['db-name'] helper = get_adv_func_helper(source['db-driver']) - if confirm('Delete database %s ?' % dbname): + if ASK.confirm('Delete database %s ?' % dbname): user = source['db-user'] or None cnx = _db_sys_cnx(source, 'DROP DATABASE', user=user) cursor = cnx.cursor() @@ -196,7 +197,7 @@ print '-> database %s dropped.' % dbname # XXX should check we are not connected as user if user and helper.users_support and \ - confirm('Delete user %s ?' % user, default_is_yes=False): + ASK.confirm('Delete user %s ?' % user, default_is_yes=False): cursor.execute('DROP USER %s' % user) print '-> user %s dropped.' % user cnx.commit() @@ -277,12 +278,12 @@ if helper.users_support: user = source['db-user'] if not helper.user_exists(cursor, user) and \ - confirm('Create db user %s ?' % user, default_is_yes=False): + ASK.confirm('Create db user %s ?' % user, default_is_yes=False): helper.create_user(source['db-user'], source['db-password']) print '-> user %s created.' % user dbname = source['db-name'] if dbname in helper.list_databases(cursor): - if confirm('Database %s already exists -- do you want to drop it ?' % dbname): + if ASK.confirm('Database %s already exists -- do you want to drop it ?' % dbname): cursor.execute('DROP DATABASE %s' % dbname) else: return @@ -310,7 +311,7 @@ cnx.commit() print '-> database for instance %s created and necessary extensions installed.' % appid print - if confirm('Do you want to run db-init to initialize the system database ?'): + if ASK.confirm('Run db-init to initialize the system database ?'): cmd_run('db-init', config.appid) else: print ('-> nevermind, you can do it later with ' @@ -491,7 +492,7 @@ raise ExecutionError('Error while retrieving the dump') rmcmd = 'ssh -t %s "rm -f /tmp/%s.dump"' % (host, appid) print rmcmd - if os.system(rmcmd) and not confirm( + if os.system(rmcmd) and not ASK.confirm( 'An error occured while deleting remote dump. Continue anyway?'): raise ExecutionError('Error while deleting remote dump') diff -r 0557f25682da -r 4501ee760eec server/session.py --- a/server/session.py Sat Aug 01 00:00:29 2009 +0200 +++ b/server/session.py Sat Aug 01 00:01:12 2009 +0200 @@ -11,7 +11,7 @@ import threading from time import time -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from rql.nodes import VariableRef, Function, ETYPE_PYOBJ_MAP, etype_from_pyobj from yams import BASE_TYPES @@ -484,7 +484,7 @@ description.append(tuple(row_descr)) return description - @obsolete('use direct access to session.transaction_data') + @deprecated('use direct access to session.transaction_data') def query_data(self, key, default=None, setdefault=False, pop=False): if setdefault: assert not pop @@ -494,7 +494,7 @@ else: return self.transaction_data.get(key, default) - @obsolete('use entity_from_eid(eid, etype=None)') + @deprecated('use entity_from_eid(eid, etype=None)') def entity(self, eid): """return a result set for the given eid""" return self.eid_rset(eid).get_entity(0, 0) diff -r 0557f25682da -r 4501ee760eec server/sqlutils.py --- a/server/sqlutils.py Sat Aug 01 00:00:29 2009 +0200 +++ b/server/sqlutils.py Sat Aug 01 00:01:12 2009 +0200 @@ -200,20 +200,21 @@ cmd = self.dbhelper.backup_command(self.dbname, self.dbhost, self.dbuser, backupfile, keepownership=False) - while True: - print cmd - if os.system(cmd): - print '-> error while backuping the base' - answer = confirm('Continue anyway?', - shell=False, abort=False, retry=True) - if not answer: - raise SystemExit(1) - if answer == 1: # 1: continue, 2: retry - break + backupdir = os.path.dirname(backupfile) + if not os.path.exists(backupdir): + if confirm('%s does not exist. Create it?' % backupdir, + abort=False, shell=False): + os.mkdir(backupdir) else: - print '-> backup file', backupfile - restrict_perms_to_user(backupfile, self.info) - break + print '-> failed to backup instance' + return + if os.system(cmd): + print '-> error trying to backup with command', cmd + if not confirm('Continue anyway?', default_is_yes=False): + raise SystemExit(1) + else: + print '-> backup file', backupfile + restrict_perms_to_user(backupfile, self.info) def restore_from_file(self, backupfile, confirm, drop=True): for cmd in self.dbhelper.restore_commands(self.dbname, self.dbhost, @@ -224,9 +225,8 @@ while True: print cmd if os.system(cmd): - print 'error while restoring the base' - print 'OOOOOPS', confirm - answer = confirm('continue anyway?', + print '-> error while restoring the base' + answer = confirm('Continue anyway?', shell=False, abort=False, retry=True) if not answer: raise SystemExit(1) @@ -234,7 +234,7 @@ break else: break - print 'database restored' + print '-> database restored.' def merge_args(self, args, query_args): if args is not None: diff -r 0557f25682da -r 4501ee760eec test/data/schema.py --- a/test/data/schema.py Sat Aug 01 00:00:29 2009 +0200 +++ b/test/data/schema.py Sat Aug 01 00:01:12 2009 +0200 @@ -5,6 +5,9 @@ :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses """ + +from yams.buildobjs import EntityType, String, SubjectRelation, RelationDefinition + class Personne(EntityType): nom = String(required=True) prenom = String() diff -r 0557f25682da -r 4501ee760eec toolsutils.py --- a/toolsutils.py Sat Aug 01 00:00:29 2009 +0200 +++ b/toolsutils.py Sat Aug 01 00:01:12 2009 +0200 @@ -16,7 +16,7 @@ from logilab.common.clcommands import Command as BaseCommand, \ main_run as base_main_run from logilab.common.compat import any -from logilab.common.shellutils import confirm +from logilab.common.shellutils import ASK from cubicweb import warning from cubicweb import ConfigurationError, ExecutionError @@ -72,7 +72,7 @@ if askconfirm: print print diffs - action = raw_input('replace (N/y/q) ? ').lower() + action = ASK.ask('Replace ?', ('N','y','q'), 'N') else: action = 'y' if action == 'y': @@ -117,7 +117,7 @@ if fname.endswith('.tmpl'): tfpath = tfpath[:-5] if not askconfirm or not exists(tfpath) or \ - confirm('%s exists, overwrite?' % tfpath): + ASK.confirm('%s exists, overwrite?' % tfpath): fill_templated_file(fpath, tfpath, context) print '[generate] %s <-- %s' % (tfpath, fpath) elif exists(tfpath): diff -r 0557f25682da -r 4501ee760eec view.py --- a/view.py Sat Aug 01 00:00:29 2009 +0200 +++ b/view.py Sat Aug 01 00:01:12 2009 +0200 @@ -11,7 +11,7 @@ from cStringIO import StringIO -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from logilab.mtconverter import xml_escape from cubicweb import NotAnEntity @@ -150,7 +150,7 @@ if stream is not None: return self._stream.getvalue() - dispatch = obsolete('.dispatch is deprecated, use .render')(render) + dispatch = deprecated('.dispatch is deprecated, use .render')(render) # should default .call() method add a
around each # rset item @@ -229,7 +229,7 @@ self.view(__vid, rset, __fallback_vid, w=self.w, **kwargs) # XXX Template bw compat - template = obsolete('.template is deprecated, use .view')(wview) + template = deprecated('.template is deprecated, use .view')(wview) def whead(self, data): self.req.html_headers.write(data) diff -r 0557f25682da -r 4501ee760eec web/__init__.py --- a/web/__init__.py Sat Aug 01 00:00:29 2009 +0200 +++ b/web/__init__.py Sat Aug 01 00:01:12 2009 +0200 @@ -14,7 +14,7 @@ from datetime import datetime, date, timedelta from simplejson import dumps -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from cubicweb.common.uilib import urlquote from cubicweb.web._exceptions import * @@ -65,7 +65,7 @@ return json_dumps(function(*args, **kwargs)) return newfunc -@obsolete('use req.build_ajax_replace_url() instead') +@deprecated('use req.build_ajax_replace_url() instead') def ajax_replace_url(nodeid, rql, vid=None, swap=False, **extraparams): """builds a replacePageChunk-like url >>> ajax_replace_url('foo', 'Person P') diff -r 0557f25682da -r 4501ee760eec web/application.py --- a/web/application.py Sat Aug 01 00:00:29 2009 +0200 +++ b/web/application.py Sat Aug 01 00:01:12 2009 +0200 @@ -10,7 +10,7 @@ import sys from time import clock, time -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from rql import BadRQLQuery @@ -272,7 +272,7 @@ finally: self._logfile_lock.release() - @obsolete("use vreg.select('controllers', ...)") + @deprecated("use vreg.select('controllers', ...)") def select_controller(self, oid, req): try: return self.vreg.select('controllers', oid, req=req, appli=self) diff -r 0557f25682da -r 4501ee760eec web/request.py --- a/web/request.py Sat Aug 01 00:00:29 2009 +0200 +++ b/web/request.py Sat Aug 01 00:01:12 2009 +0200 @@ -18,7 +18,7 @@ from rql.utils import rqlvar_maker from logilab.common.decorators import cached -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from logilab.mtconverter import xml_escape @@ -630,7 +630,7 @@ auth, ex.__class__.__name__, ex) return None, None - @obsolete("use parse_accept_header('Accept-Language')") + @deprecated("use parse_accept_header('Accept-Language')") def header_accept_language(self): """returns an ordered list of preferred languages""" return [value.split('-')[0] for value in diff -r 0557f25682da -r 4501ee760eec web/views/navigation.py --- a/web/views/navigation.py Sat Aug 01 00:00:29 2009 +0200 +++ b/web/views/navigation.py Sat Aug 01 00:01:12 2009 +0200 @@ -11,7 +11,7 @@ from rql.nodes import VariableRef, Constant from logilab.mtconverter import xml_escape -from logilab.common.deprecation import obsolete +from logilab.common.deprecation import deprecated from cubicweb.interfaces import IPrevNext from cubicweb.selectors import (paginated_rset, sorted_rset, @@ -168,7 +168,7 @@ # monkey patch base View class to add a .pagination(req, rset, w, forcedisplay) # method to be called on view's result set and printing pages index in the view from cubicweb.view import View -View.pagination = obsolete('.pagination is deprecated, use paginate')(limit_rset_using_paged_nav) +View.pagination = deprecated('.pagination is deprecated, use paginate')(limit_rset_using_paged_nav) def paginate(view, show_all_option=True, w=None, page_size=None): limit_rset_using_paged_nav(view, view.req, view.rset, w or view.w, diff -r 0557f25682da -r 4501ee760eec web/webctl.py --- a/web/webctl.py Sat Aug 01 00:00:29 2009 +0200 +++ b/web/webctl.py Sat Aug 01 00:01:12 2009 +0200 @@ -9,8 +9,8 @@ __docformat__ = "restructuredtext en" from cubicweb import underline_title -from cubicweb.toolsutils import CommandHandler, confirm - +from cubicweb.toolsutils import CommandHandler +from logilab.common.shellutils import ASK class WebCreateHandler(CommandHandler): cmdname = 'create' @@ -22,7 +22,7 @@ if config.repo_method == 'pyro': print '\n'+underline_title('Repository server configuration') config.input_config('pyro-client', inputlevel) - if confirm('Allow anonymous access ?', False): + if ASK.confirm('Allow anonymous access ?', False): config.global_set_option('anonymous-user', 'anon') config.global_set_option('anonymous-password', 'anon')