doc/4.0.rst
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Thu, 27 Jun 2013 18:16:06 +0200
changeset 9115 fcc732a9d9ac
parent 9113 af6efc15fc90
child 9119 cc85def2ac57
permissions -rw-r--r--
[documentation] describe repoapi and web side change. Short version explaining what object replace what and that BC existes for a few version.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9015
65b8236e1bb4 [sources] drop support for ldapuser source (closes #2936496)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     1
What's new in CubicWeb 4.0?
65b8236e1bb4 [sources] drop support for ldapuser source (closes #2936496)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     2
============================
65b8236e1bb4 [sources] drop support for ldapuser source (closes #2936496)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     3
9042
6cc13a0a9145 [dbapi] makes anonymous_connection a computed property
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9038
diff changeset
     4
Behavior Changes
6cc13a0a9145 [dbapi] makes anonymous_connection a computed property
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9038
diff changeset
     5
----------------
6cc13a0a9145 [dbapi] makes anonymous_connection a computed property
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9038
diff changeset
     6
6cc13a0a9145 [dbapi] makes anonymous_connection a computed property
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9038
diff changeset
     7
* The anonymous property of Session and Connection are now computed from the
6cc13a0a9145 [dbapi] makes anonymous_connection a computed property
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9038
diff changeset
     8
  related user login. If it match the ``anonymous-user`` in the config the
6cc13a0a9145 [dbapi] makes anonymous_connection a computed property
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9038
diff changeset
     9
  connection is anonymous. Beware that the ``anonymous-user`` config is web
6cc13a0a9145 [dbapi] makes anonymous_connection a computed property
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9038
diff changeset
    10
  specific. Therefore, no session may be anonymous in repository only setup.
6cc13a0a9145 [dbapi] makes anonymous_connection a computed property
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9038
diff changeset
    11
9113
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    12
New Repository Access API
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    13
-------------------------
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    14
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    15
Connection replace Session
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    16
~~~~~~~~~~~~~~~~~~~~~~~~~~
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    17
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    18
A new explicite Connection object replace Session as the main repository entry
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    19
point. Connection hold all the necessary methods to be used Server side
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    20
(``execute``, ``commit``, ``rollback``, ``call_service``, ``entity_from_eid``,
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    21
etc…). You obtains a new Connection object using ``session.new_cnx()``.
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    22
Connection object need have an explicite begin and end. Use them as a context
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    23
manager::
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    24
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    25
    with session.new_cnx() as cnx:
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    26
        self.execute('INSERT Elephant E, E name "Cabar"')
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    27
        self.commit()
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    28
        self.execute('INSERT Elephant E, E name "Celeste"')
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    29
        self.commit()
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    30
    # Once you get out of the "with" clause, the connection is closed.
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    31
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    32
Using the same Connection object in multiple threads will give you access to the
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    33
same Transaction. However, Connection object are not thread safe.
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    34
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    35
``repository.internal_session`` is deprecated in favor of
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    36
``repository.internal_cnx``. Note that internal connection are now safe by
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    37
default. Integrity hooks are enabled except stated otherwise.
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    38
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    39
Backward compact is preserved on Session. They can still be used to access the
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    40
database for the next few version.
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    41
9115
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    42
dbapi vs repoapi
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    43
~~~~~~~~~~~~~~~~
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    44
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    45
A new API have been introduced to replace the dbapi. It is called "repoapi".
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    46
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    47
there is three relevant function for now:
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    48
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    49
``repoapi.get_repository(config)`` takes a config object and return credential
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    50
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    51
``repoapi.connect(repo, **credential)`` return a ClientConnection associated to
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    52
the user identified by the credential. The ClientConnection is associated to its
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    53
own Session that is closed when the ClientConnection is closed. A
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    54
ClientConnection is a Connection-like object to be used client side.
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    55
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    56
``repoapi.anonymous_cnx(repo)`` return a ClientConnection associated to the
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    57
anonymous user if describe in the Config.
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    58
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    59
repoapi.ClientConnection replace dbapi.Connection and company
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    60
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    61
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    62
On the client/web side, the Request is now using a ``repoapi.ClientConnection``
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    63
instead of a ``dbapi.connection``. The ``ClientConnection`` have multiple backward
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    64
compat method to looks like a ``dbapi.Cursor`` and ``dbapi.Connection``. It will
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    65
remain that way for a few version.
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    66
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    67
Session used on the Web side are now the same than the one used Server side.
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    68
Some backward compat method have been installed on the server side Session to
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    69
ease the transition.
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    70
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    71
The authentification stack have been altered to use the ``repoapi`` instead of
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    72
the ``dbapi``. Cubes adding new element in this stack are likely to break.
fcc732a9d9ac [documentation] describe repoapi and web side change.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9113
diff changeset
    73
9113
af6efc15fc90 [repository] add an ``internal_cnx`` method to replace ``internal_session``
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
    74
9018
9deb024a96c0 [session-handler] use session directly to update last usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9016
diff changeset
    75
API changes
9deb024a96c0 [session-handler] use session directly to update last usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9016
diff changeset
    76
-----------
9deb024a96c0 [session-handler] use session directly to update last usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9016
diff changeset
    77
9deb024a96c0 [session-handler] use session directly to update last usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9016
diff changeset
    78
* ``RepositorySessionManager.postlogin`` is now called with two arguments,
9deb024a96c0 [session-handler] use session directly to update last usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9016
diff changeset
    79
  request and session. And this now happens before the session is linked to the
9deb024a96c0 [session-handler] use session directly to update last usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9016
diff changeset
    80
  request.
9deb024a96c0 [session-handler] use session directly to update last usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9016
diff changeset
    81
9032
629a8d49d6f5 [auth] pass `repo` instead of `vreg` to SessionManager and AuthenticationManager
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9018
diff changeset
    82
* ``SessionManager`` and ``AuthenticationManager`` now take a repo object at
629a8d49d6f5 [auth] pass `repo` instead of `vreg` to SessionManager and AuthenticationManager
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9018
diff changeset
    83
  initialization time instead of a vreg.
629a8d49d6f5 [auth] pass `repo` instead of `vreg` to SessionManager and AuthenticationManager
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9018
diff changeset
    84
9033
614bf73cc126 [service] drop the asynchronous execution possibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9032
diff changeset
    85
* The ``async`` argument of ``_cw.call_service`` have been dropped. All call are
614bf73cc126 [service] drop the asynchronous execution possibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9032
diff changeset
    86
  now  synchronous. The zmq notification bus looks like a good replacement for
614bf73cc126 [service] drop the asynchronous execution possibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9032
diff changeset
    87
  most async usecase.
614bf73cc126 [service] drop the asynchronous execution possibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9032
diff changeset
    88
9034
cc3442054e48 [repo] move repo stats to Service (closes #2951067)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9033
diff changeset
    89
* ``repo.stats()`` is now deprecated. The same information are available through
cc3442054e48 [repo] move repo stats to Service (closes #2951067)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9033
diff changeset
    90
  a service (``_cw.call_service('repo_stats')``)
cc3442054e48 [repo] move repo stats to Service (closes #2951067)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9033
diff changeset
    91
9035
63f3d25bab14 [repo] move repo.gc_stats to Service API (closes #2951068)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9034
diff changeset
    92
* ``repo.gc_stats()`` is now deprecated. The same information are available through
63f3d25bab14 [repo] move repo.gc_stats to Service API (closes #2951068)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9034
diff changeset
    93
  a service (``_cw.call_service('repo_gc_stats')``)
63f3d25bab14 [repo] move repo.gc_stats to Service API (closes #2951068)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9034
diff changeset
    94
9038
1b972d81eda4 [request] drop the user argument for set_session
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9035
diff changeset
    95
* ``request.set_session`` no longer takes an optional ``user`` argument.
1b972d81eda4 [request] drop the user argument for set_session
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9035
diff changeset
    96
9043
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9042
diff changeset
    97
* CubicwebTC does not have repo and cnx as class attributes anymore. They are
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9042
diff changeset
    98
  standard instance attributes. ``set_cnx`` and ``_init_repo`` class methods
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9042
diff changeset
    99
  become instance methods.
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9042
diff changeset
   100
9018
9deb024a96c0 [session-handler] use session directly to update last usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9016
diff changeset
   101
9015
65b8236e1bb4 [sources] drop support for ldapuser source (closes #2936496)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   102
Deprecated Code Drops
65b8236e1bb4 [sources] drop support for ldapuser source (closes #2936496)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   103
----------------------
65b8236e1bb4 [sources] drop support for ldapuser source (closes #2936496)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   104
65b8236e1bb4 [sources] drop support for ldapuser source (closes #2936496)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   105
* The ldapuser source has been dropped. ldapfeed is the only official source
65b8236e1bb4 [sources] drop support for ldapuser source (closes #2936496)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   106
  remaining for ldap.
9016
0368b94921ed Drop hijack user (closes #2901093)
pierre-yves
parents: 9015
diff changeset
   107
0368b94921ed Drop hijack user (closes #2901093)
pierre-yves
parents: 9015
diff changeset
   108
* session.hijack_user mechanism has been dropped.