SyncCode.py 4.59 KB
Newer Older
Jean-Paul Smets's avatar
Jean-Paul Smets committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
##############################################################################
#
# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
#          Sebastien Robin <seb@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# 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.
#
##############################################################################

29
from Products.ERP5Type.Accessor.TypeDefinition import list_types
Jean-Paul Smets's avatar
Jean-Paul Smets committed
30 31 32 33 34 35 36 37 38
from Globals import Persistent

class SyncCode(Persistent):
  """
    Class giving the Synchronization's Constants
  """

  # SyncML Alert Codes
  TWO_WAY = 200
Sebastien Robin's avatar
Sebastien Robin committed
39
  SLOW_SYNC = 201 # This means we get the data from the publication
Jean-Paul Smets's avatar
Jean-Paul Smets committed
40
  WAITING_DATA = 214
41
  ONE_WAY_FROM_SERVER = 204
Jean-Paul Smets's avatar
Jean-Paul Smets committed
42 43 44

  # SyncML Status Codes
  SUCCESS = 200
45 46
  ITEM_ADDED = 201

Jean-Paul Smets's avatar
Jean-Paul Smets committed
47 48 49 50 51 52
  CHUNK_OK = 214
  CONFLICT = 409 # A conflict is detected
  CONFLICT_MERGE = 207 # We have merged the two versions, sending
                       # whatever is needed to change(replace)
  CONFLICT_CLIENT_WIN = 208 # The client is the "winner", we keep
                            # the version of the client
Sebastien Robin's avatar
Sebastien Robin committed
53 54 55
  UNAUTHORIZED = 401
  AUTH_REQUIRED = 407
  AUTH_ACCEPTED = 212
Jean-Paul Smets's avatar
Jean-Paul Smets committed
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

  # Difference between publication and subscription
  PUB = 1
  SUB = 0

  NULL_ANCHOR = '00000000T000000Z'

  # ERP5 Sync Codes
  SYNCHRONIZED = 1
  SENT = 2
  NOT_SENT = 3
  PARTIAL = 4
  NOT_SYNCHRONIZED = 5
  PUB_CONFLICT_MERGE = 6
  PUB_CONFLICT_CLIENT_WIN = 8

72 73
  MAX_LINES = 5000
  MAX_OBJECTS = 100
Jean-Paul Smets's avatar
Jean-Paul Smets committed
74

Sebastien Robin's avatar
Sebastien Robin committed
75
  action_tag = 'workflow_action'
76 77
  #NOT_EDITABLE_PROPERTY = ('id','object','uid','xupdate:element',action_tag,
  #                         'xupdate:attribute','local_role')
78 79 80 81
  XUPDATE_INSERT =        ('xupdate:insert-after','xupdate:insert-before')
  XUPDATE_ADD =           ('xupdate:append',)
  XUPDATE_DEL =           ('xupdate:remove',)
  XUPDATE_UPDATE =        ('xupdate:update',)
82
  XUPDATE_EL =        ('xupdate:element',)
83 84 85 86 87
  XUPDATE_INSERT_OR_ADD = tuple(XUPDATE_INSERT) + tuple(XUPDATE_ADD)
  XUPDATE_TAG = tuple(XUPDATE_INSERT) + tuple(XUPDATE_ADD) + \
                tuple(XUPDATE_UPDATE) + tuple(XUPDATE_DEL)
  text_type_list = ('text','string')
  list_type_list = list_types
88
  force_conflict_list = ('layout_and_schema','ModificationDate')
89
  binary_type_list = ('image','file','document','pickle')
90 91
  date_type_list = ('date',)
  dict_type_list = ('dict',)
Sebastien Robin's avatar
Sebastien Robin committed
92
  int_type_list = ('int',)
93
  pickle_type_list = ('object',)
94
  xml_object_tag = 'object'
Sebastien Robin's avatar
Sebastien Robin committed
95 96
  #history_tag = 'workflow_history'
  history_tag = 'workflow_action'
97
  local_role_tag = 'local_role'
98 99
  local_permission_tag = 'local_permission'
  local_permission_list = (local_permission_tag,'/'+local_permission_tag)
100 101 102
  local_group_tag = 'local_group'
  local_role_list = (local_role_tag,'/'+local_role_tag,
                     local_group_tag,'/'+local_group_tag)
Sebastien Robin's avatar
Sebastien Robin committed
103
  ADDABLE_PROPERTY = local_role_list + (history_tag,) + local_permission_list
104 105
  NOT_EDITABLE_PROPERTY = ('id','object','uid','xupdate:attribute') \
                          + XUPDATE_EL + ADDABLE_PROPERTY
106
  sub_object_exp = "/object\[@id='.*'\]/"
107
  object_exp = "/object\[@id='.*'\]"
108
  sub_sub_object_exp = "/object\[@id='.*'\]/object\[@id='.*'\]/"
Sebastien Robin's avatar
Sebastien Robin committed
109
  history_exp = "/%s\[@id='.*'\]" % history_tag
Sebastien Robin's avatar
Sebastien Robin committed
110 111 112 113
  local_role_exp = "/%s\[@id='.*'\]" % local_role_tag
  local_group_exp = "/%s\[@id='.*'\]" % local_group_tag
  bad_local_role_exp = "/%s\[@id='.*'\]/" % local_role_tag
  bad_local_group_exp = "/%s\[@id='.*'\]/" % local_group_tag
Sebastien Robin's avatar
Sebastien Robin committed
114
  bad_history_exp = "/%s\[@id='.*'\]/" % history_tag
Sebastien Robin's avatar
Sebastien Robin committed
115 116
  local_role_and_group_list = (local_group_exp,local_role_exp)
  bad_local_role_and_group_list = (bad_local_group_exp,bad_local_role_exp)
117 118 119 120 121 122 123


  #media types :

  MEDIA_TYPE = {}
  MEDIA_TYPE['TEXT_XML'] = 'text/xml'
  MEDIA_TYPE['TEXT_VCARD'] = 'text/vcard'