Welcome    Usage    Browse    Find CID    Search     Log in

cM API Documentation

module.py

Go to the documentation of this file.
00001 #
00002 # Collective Mind
00003 #
00004 # See cM LICENSE.txt for licensing details.
00005 # See cM Copyright.txt for copyright details.
00006 #
00007 # Developer(s): (C) Grigori Fursin, started on 2011.09
00008 #
00009 
00010 # Should always be here
00011 ini={}
00012 cm_kernel=None
00013 
00014 # Local settings
00015 import json
00016 import os
00017 
00018 # ============================================================================
00019 def init(i):
00020     return {'cm_return':0}
00021 
00022 # ============================================================================
00023 def all(i):
00024     """
00025     Test all
00026 
00027     Input:  {
00028             }
00029 
00030     Output: {
00031               cm_return  - return code >0 if error
00032             }
00033     """
00034 
00035     errors=[]
00036 
00037     cm_kernel.print_for_con('Testing all cM functionality (alpha)')
00038 
00039 
00040     # *************************************************************
00041     func='cM UID generation'
00042     cm_kernel.print_for_con('')
00043     cm_kernel.print_for_con('Checking "'+func+'" ...')
00044 
00045     r=cm_kernel.gen_uid({})
00046     if r['cm_return']>0: 
00047        errors.append({'func':func,'cm_error':r['cm_error']})
00048        cm_kernel.print_for_con('  Error ('+r['cm_error']+')')
00049 
00050     uid=r['cm_uid']
00051     if len(uid)!=16:
00052        err='UID len is not 16'
00053        errors.append({'func':func,'cm_error':err})
00054        cm_kernel.print_for_con('  Error ('+err+')')
00055 
00056     if not cm_kernel.is_uid(uid):
00057        err='Generated UID is not cM UID'
00058        errors.append({'func':func,'cm_error':err})
00059        cm_kernel.print_for_con('  Error ('+err+')')
00060 
00061     cm_kernel.print_for_con('  Ok')
00062 
00063     # *************************************************************
00064     func='tmp data creation'
00065     cm_kernel.print_for_con('')
00066     cm_kernel.print_for_con('Checking "'+func+'" ...')
00067 
00068     r=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-tmp'],
00069                         'cm_action':'add',
00070                         'cm_array':{}})
00071     if r['cm_return']>0: 
00072        errors.append({'func':func,'cm_error':r['cm_error']})
00073        cm_kernel.print_for_con('  Error ('+r['cm_error']+')')
00074 
00075     uid=r['cm_uid']
00076 
00077     cm_kernel.print_for_con('  Ok (UID='+uid+')')
00078 
00079     # *************************************************************
00080     func='tmp data deletion'
00081     cm_kernel.print_for_con('')
00082     cm_kernel.print_for_con('Checking "'+func+'" ...')
00083 
00084     r=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-tmp'],
00085                         'cm_action':'delete',
00086                         'cm_data_uoa':uid})
00087     if r['cm_return']>0: 
00088        errors.append({'func':func,'cm_error':r['cm_error']})
00089        cm_kernel.print_for_con('  Error ('+r['cm_error']+')')
00090 
00091     cm_kernel.print_for_con('  Ok')
00092 
00093     cm_kernel.print_for_con('')
00094     cm_kernel.print_for_con('We should add much more tests - any help is appreciated!')
00095 
00096 
00097     return {'cm_return':0, 'cm_errors':errors}
00098 
00099 # ============================================================================
00100 def any(i):
00101     """
00102     Test some funcionality before moving to a proper test
00103 
00104     Input:  {
00105             }
00106 
00107     Output: {
00108               cm_return  - return code >0 if error
00109             }
00110     """
00111 
00112 
00113 
00114 
00115 
00116 
00117 
00118 
00119     return {'cm_return':0}
00120 
00121 # ============================================================================
00122 def functionality(i):
00123     """
00124     Test some funcionality before moving to a proper test
00125 
00126     Input:  {
00127               name
00128             }
00129 
00130     Output: {
00131               cm_return  - return code >0 if error
00132             }
00133     """
00134 
00135     if 'name' not in i: return {'cm_return':1, 'cm_error':'"name" is not set for "test functionality"'}
00136 
00137     name=i['name']
00138 
00139     if name=='array_merging_in_cmd':
00140        cm_kernel.print_for_con('')
00141        cm_kernel.print_for_con("Input "+json.dumps(i, indent=2))
00142 
00143     elif name=='convert_index_to_data':
00144        r=cm_kernel.load_json_file({'cm_filename':i['cm_filename']})
00145        if r['cm_return']>0: return r
00146 
00147        r=cm_kernel.restore_flattened_array({'cm_array':r['cm_array']})
00148        if r['cm_return']>0: return r
00149 
00150        r=cm_kernel.save_array_to_file_as_json({'cm_filename':i['cm_filename_out'], 'cm_array':r['cm_array']})
00151        if r['cm_return']>0: return r
00152        
00153     return {'cm_return':0}
00154 
00155 # ============================================================================
00156 def find_data_without_access_control(i):
00157     """
00158     Test some funcionality before moving to a proper test
00159 
00160     Input:  {
00161               (prune_repo_uoa)   - prune search by a given repository
00162               (prune_module_uoa) - prune search by a given module
00163               (prune_data_uoa)   - prune search by a given data
00164             }
00165 
00166     Output: {
00167               cm_return  - return code >0 if error
00168             }
00169     """
00170 
00171     problems=[]
00172 
00173     count=0
00174 
00175     # Search through repositories *********************************
00176     if i.get('prune_repo_uoa','')!='':
00177        # Load repo
00178        r1=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-repo'],
00179                             'cm_action':'load',
00180                             'cm_data_uoa':i['prune_repo_uoa']})
00181        if r1['cm_return']>0: return r1
00182        rlist=[{'cm_uoa':r1['cm_uoa'], 'cm_uid':r1['cm_uid']}]
00183     else:
00184        r1=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-repo'],
00185                             'cm_action':'list'})
00186        if r1['cm_return']>0: return r1
00187        rlist=r1['cm_mixed']
00188 
00189     for repo1 in rlist:
00190         repo_uoa=repo1['cm_uoa']
00191         repo_uid=repo1['cm_uid']
00192 
00193         # Load repo to exclude remote
00194         r2=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-repo'],
00195                              'cm_action':'load',
00196                              'cm_data_uoa':repo_uoa})
00197         if r2['cm_return']>0: return r2
00198         repo_cfg=r2['cm_data_obj']['cfg']
00199         if repo_cfg.get('path_type','')!='remote_url':
00200            # Get list of modules in a given repository *********************************
00201            if i.get('prune_module_uoa','')!='':
00202               # Load module
00203               r2=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-module'],
00204                                    'cm_action':'load',
00205                                    'cm_data_uoa':i['prune_module_uoa']})
00206               if r2['cm_return']>0: return r2
00207               mlist=[{'cm_uoa':r2['cm_uoa'], 'cm_uid':r2['cm_uid']}]
00208            else:
00209               r2=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-core'],
00210                                    'cm_action':'list',
00211                                    'cm_repo_uoa':repo_uoa,
00212                                    'cm_only_available_modules':'yes'})
00213               if r2['cm_return']>0: return r2
00214               mlist=r2['cm_mixed']
00215 
00216            for module1 in mlist:
00217                # Check print
00218                module_uoa=module1['cm_uoa']
00219                module_uid=module1['cm_uid']
00220 
00221                # Get list of data in a given repository *********************************
00222                if i.get('prune_data_uoa','')!='':
00223                   # Load data
00224                   r3=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-core'],
00225                                        'cm_module_uoa':module_uoa,
00226                                        'cm_action':'load',
00227                                        'cm_data_uoa':i['prune_data_uoa'],
00228                                        'cm_repo_uoa':repo_uoa})
00229                   if r3['cm_return']==0:
00230                      dlist=[{'cm_uoa':r3['cm_uoa'], 'cm_uid':r3['cm_uid']}]
00231                   else:
00232                      dlist=[]
00233                else:
00234                   r3=cm_kernel.access({'cm_run_module_uoa':module_uoa,
00235                                        'cm_action':'list',
00236                                        'cm_repo_uoa':repo_uoa})
00237                   if r3['cm_return']>0: return r3
00238                   dlist=r3['cm_mixed']
00239 
00240                for data1 in dlist:
00241                    # Check print
00242                    data_uoa=data1['cm_uoa']
00243                    data_uid=data1['cm_uid']
00244 
00245                    count+=1
00246                    cm_kernel.print_for_con('('+str(count)+') Checking CID='+repo_uoa+':'+module_uoa+':'+data_uoa+' ...')
00247 
00248                    # Load data
00249                    r=cm_kernel.access({'cm_run_module_uoa':module_uoa,
00250                                        'cm_action':'load',
00251                                        'cm_data_uoa':data_uoa,
00252                                        'cm_repo_uoa':repo_uoa})
00253                    if r['cm_return']>0: return r
00254                    d=r['cm_data_obj']['cfg']
00255 
00256                    p=r['cm_path']
00257 
00258                    p0=os.path.join(p, cm_kernel.ini['dcfg']['dcm'])
00259                    p1=os.path.join(p0, cm_kernel.ini['dcfg']['fconfig'])
00260 
00261                    changed=False
00262 
00263                    if len(d.get('cm_access_control',{}))==0:
00264                       d['cm_access_control']={'comments_groups':'registered', 'read_groups':'registered', 'write_groups':'owner'}
00265                    else:
00266                       dx=d['cm_access_control']
00267                       if 'allow_comments_and_ranking' in dx:
00268                          dy=dx.get('allow_comments_and_ranking','')
00269                          del(dx['allow_comments_and_ranking'])
00270 
00271                          if dy=='yes':
00272                             dx['comments_groups']='registered'
00273                          else:
00274                             dx['comments_groups']='admin'
00275                       else:
00276                          dx['comments_groups']='admin'
00277 
00278                       d['cm_access_control']=dx
00279 
00280                    # We write directly to have a clean update
00281                    r4=cm_kernel.save_array_to_file_as_json({'cm_filename':p1, 'cm_array':d})
00282                    if r4['cm_return']>0: return r4
00283 
00284     return {'cm_return':0}

Generated on Wed May 28 02:49:02 2014 for Collective Mind Framework by DoxyGen 1.6.1
Concept, design and coordination: Grigori Fursin (C) 1993-2013