💾 Archived View for gmi.noulin.net › gitRepositories › easydoneit-cli › file › edi.py.gmi captured on 2024-08-18 at 17:57:05. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-01-29)
-=-=-=-=-=-=-
edi.py (150556B)
1 #! /usr/bin/env python 2 # -*- coding: latin-1 -*- 3 ## @package edi 4 # Documentation for edi module. All Easydoneit CLI commands are defined in this module. 5 # 6 # Copyright (C) 2014 Spartatek AB 7 # 8 # contact@spartatek.se 9 # http://spartatek.se 10 # 11 # EASYDONEIT CLI is free software: you can redistribute it and/or modify 12 # it under the terms of the GNU Genereric Public License as published by 13 # the Free Software Foundation, either version 3 of the License, or 14 # (at your option) any later version. 15 # 16 # EASYDONIT CLI is distributed in the hope that it will be usesul, 17 # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 # GNU Genereral Public License for more details. 20 # 21 # You should have received a copy of the GNU General Public License 22 # along with this program. If not, see 23 # GNU licences http://www.gnu.org/licenses 24 25 import sys 26 import re 27 import shutil 28 import os 29 import ConfigParser 30 # 0 disable, 1 enable print 31 #:print_command_map=0 32 #:profiler=0 33 34 #:profiler 35 #:end 36 37 from edi_core import * 38 # Import to access data_location in edi_core 39 import edi_core 40 41 ## functions to print results from list_tree/list_group 42 # @ingroup EDI_CLI 43 def empty_line(tid,s): 44 return '' 45 46 ## functions to print results from list_tree/list_group 47 # @ingroup EDI_CLI 48 def print_list(task_array): 49 Functions = {'head group': generate_group_string_with_tid,'element': generate_task_string_with_tid} 50 for t in task_array: 51 print Functions.get(t['head'],empty_line)(t['tid'], '%3d - %s %s'%(t['position'],t['group'],t['title'])) 52 53 #-------------------------------------------- 54 # COMMAND LINE INTERFACE 55 56 ## Default Function. 57 # @ingroup EDI_CLI 58 def Nothing(): 59 print 'Command not available' 60 61 ## add command name to COMMANDS, help to HELP_STRING and corresponding python functions to FUNCTIONS below 62 COMMANDS = ['help','version','cr','lsid','add','cat','mkdir','show','rm','vi','order','set','reset','search','mv','cp','ln','path','tree','ls','stfi','data','html','select','default','cpb','mvb','fc','bc','createDatabase','topbot','in','re','st','zip','autolink','cv','user','email','stats','many','demo','list','merge','media','at'] 63 64 ## ls help for both edi lsid and edi ls 65 LS_HELP ='''edi lsid [-R|-G|-s|-L|-La|-Lx|-t] [group|task] [position] 66 list tasks in a group. Outside tree folder, without parameter list all tasks and groups, 67 with parameter list group or task title (selected with task id or group id and position), 68 with -R list group recursively, with position print task title. 69 In tree folder, without parameter list group, 70 with -G and when cwd is in tree, list group path with ids and titles (group1/group2...), 71 with task id parameter print tree path and title, 72 -s for sorted list by status, 73 -L list tasks in any group from groups in edi list (or), 74 -La list tasks in all groups in edi list (and), 75 -Lx list tasks in all groups in edi list exclusively (strictly and) 76 -t sort by date from oldest to newest task''' 77 78 ## help command displays these strings 79 HELP_STRINGS = ['''edi help [command] 80 print cli commands and data location, command parameter is optional''', 81 'print current version', 82 '''edi cr [group] 83 create task and open text editor, calls without parameters create task in root group, 84 when in tree and without parameter, create task in current group, 85 when group parameter is provided create task in group''', 86 LS_HELP, 87 '''edi add [-F|-t] [group] text_filename|text 88 add task from file. Without parameter add task in root group, 89 when in tree and without parameter, add task in current group, 90 add_task option (-F) text_filename adds task with filename in fist line of description in root group, 91 add_task option (-F) group text_filename adds task with filename in first line of description in group, 92 add_task group text_filename adds task in group 93 edi add -t [group] 'text' creates a task with description text''', 94 '''edi cat group|task|position [position] 95 print description. With position parameter print description for task at given position, 96 when in tree and without group parameter, print description at given position in current group''', 97 '''edi mkdir task|position 98 convert task to group 99 when in tree, convert task at given position''', 100 '''edi show task|position 101 print group title for task''', 102 '''edi rm task|group|position [task] 103 delete task or group 104 with group and task parameters, delete task and keep linked tasks 105 edi rm root deletes all tasks in default database''', 106 '''edi vi task|group|position [position] 107 edit description, 108 in tree, edit task or group at given position in current group''', 109 '''edi order [group] at_position to_position 110 change order in group. Without group parameter change order in root group, 111 in tree change order in current group''', 112 '''edi set task|group|position int_status 113 set status to int parameter, 114 int_status values are: 115 %s'''%'\n'.join([' %d: %s'%(i,j.strip()) for i,j in enumerate(TASK_STATUS)]), 116 '''edi reset group 117 set tasks in group to active. Without parameter set tasks in root group''', 118 '''edi search string 119 search string in tasks folder, 120 in tree, searches in current group''', 121 '''edi mv group task|group group 122 edi mv position group 123 move task or group, 124 move task or group from group parameter 1 to group parameter 3''', 125 '''edi cp [-E] task|group|position group|path 126 copy task to a group, 127 option -E copy description to path, first line in description is filename''', 128 '''edi ln task|position group 129 add a reference in group''', 130 '''edi path task|group|position 131 print task filesystem path''', 132 '''edi tree 133 print tree path''', 134 LS_HELP.replace('edi lsid ','edi ls ').replace('list tasks in a group','ls groups and tasks with positions only'), 135 '''edi stfi status_filter state 136 enable/disable (set) status filter, 137 without parameters, print current filters, 138 139 status_filter values are: 140 %s 141 142 state values are: 143 %s'''%('\n'.join([' %s'%i.strip() for i in TASK_STATUS]), '\n'.join([' %s'%i for i in STATUS_FILTER_STATES])), 144 '''edi data [-d] [database_name] [path] 145 set path for database and create database when it doesnt exist, 146 without option, print current data path 147 Option -d delete a database''', 148 '''edi html [-R|-G|-s|-L|-La|-Lx|-t] group|task [position] 149 generate html for tasks, same options as ls''', 150 '''edi select [database_name_1,database_name2...] 151 set selected databases 152 without option, print selected databases''', 153 '''edi default [database_name] 154 set default database for new tasks 155 without option, print default database''', 156 '''edi cpb task|group|position database group 157 copy task or group to database/group''', 158 '''edi mvb group task|group database group 159 edi mvb position database group 160 move task or group to database/group''', 161 '''edi fc task|group|position [color] 162 set/get forground color from task or group 163 color is 4 decimal numbers seperated with commas 164 0,0,0,255''', 165 '''edi bc task|group|position [color] 166 set/get background color from task or group 167 color is 4 decimal numbers seperated with commas 168 0,0,0,255''', 169 '''edi createDatabase database_name path 170 create database folders and set path 171 this command creates the path when it doesnt exist''', 172 '''edi topbot [top|bottom] 173 select add new tasks in bottom of group or on top of group 174 Default is bottom 175 without parameter, print status''', 176 '''edi in [-A] group|position 177 print group tasks in md format 178 when in tree, print group at given position 179 option -A create an agenda after title for slideshows''', 180 '''edi re [-A] group|position 181 print group tasks in reStructuredText format 182 when in tree, print group at given position 183 option -A create an agenda after title for slideshows''', 184 '''edi st 185 shows trees for selected databases, print all trees: group tids and titles''', 186 '''edi zip database_name [path] 187 creates an archive of the database in database_name.tar.bz2 in path or current folder''', 188 '''edi autolink [group1,group2...] 189 set configuration for linking new tasks to autolink groups 190 without option, print autolink group list''', 191 '''edi cv group|pos 192 convert empty group to task''', 193 '''edi user [First name Last name] 194 set user name 195 without parameter, display username''', 196 '''edi email [user email] 197 set user email 198 without parameter, display user email''', 199 '''edi stats [group] 200 show statistics 201 without parameter, show statistics in selected databases or current group in tree''', 202 '''edi many [-1|-g] [group] text_file 203 add many tasks from a file, tasks are seperated with '---' lines 204 with -1, add one task per line from a file, 205 with -g, create a group per line from file, one space for deeper levels''', 206 '''edi demo 207 display commands to show how to use Easydoneit CLI''', 208 '''edi list group1,group2... 209 set a list of groups for edi ls -L,-La and -Lx options 210 the groups have to be in the same database 211 without parameter, list groups''', 212 '''edi merge [path|database_name] database_name_2 213 copy tasks from database_name to database_name_2 with no changes 214 WARNING - the source database is merged correctly several times when the tree remains the same since the first merge.''', 215 '''edi media [task|pos] [image file|sound file] 216 copy media file to task. Only one media file per task is allowed, for more attachments use edi at 217 without parameter, show media type''', 218 '''edi at [task|pos] [filename|*] 219 copy file to task as attachments. 220 without parameter, show attachment files'''] 221 222 HELP = zip(COMMANDS,HELP_STRINGS) 223 HELP_DICT = dict(HELP) 224 225 ## print cli commands and data location 226 # 227 # print format:<br> 228 # command<br> 229 # TAB help string 230 # @ingroup EDI_CLI 231 def help(): 232 print 'Easydoneit help' 233 print 'http://spartatek.se/easydoneit_cli' 234 print 235 #:define edi_version 236 f = open('%s/VERSION'%os.path.abspath(os.path.dirname(sys.argv[0]))) 237 v = f.readline() 238 f.close() 239 print 'Version %s'%v 240 #:end 241 print 'Selected data_location' 242 print edi_core.data_location 243 print 244 if len(sys.argv) < 3: 245 # print complete help 246 for c,h in HELP: 247 print c 248 print ' %s\n'%h 249 250 # print help for specified command 251 if len(sys.argv) == 3: 252 if not sys.argv[2] in HELP_DICT.keys(): 253 sys.exit('%s is invalid command.'%sys.argv[2]) 254 print sys.argv[2] 255 print ' %s\n'%HELP_DICT[sys.argv[2]] 256 257 258 ## print current version 259 # @ingroup EDI_CLI 260 def version(): 261 #:edi_version 262 f = open('%s/VERSION'%os.path.abspath(os.path.dirname(sys.argv[0]))) 263 v = f.readline() 264 f.close() 265 print 'Version %s'%v 266 267 ## create task and open text editor, calls without parameters create task in root group, when group parameter is provided create task in group 268 # @ingroup EDI_CLI 269 def create_task_cli(): 270 # Select group and database 271 272 #:define figure_out_if_in_tree 273 status = '' 274 cwd = os.path.realpath(os.getcwd()) 275 #loop_on_selected_databases 276 z = zip(edi_core.selected, edi_core.selected_path) 277 for d,path in z: 278 edi_core.data_location = os.path.expanduser(path) 279 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 280 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 281 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 282 283 # check path from left 284 real_tree_path = os.path.realpath(edi_core.data_location_tree) 285 if real_tree_path == cwd[:len(real_tree_path)]: 286 status = 'in tree' 287 p_l = edi_core.data_location_tree.split('/')[-2:] 288 break 289 #:end 290 291 # Initialize group in case len(sys.argv) != 2 292 group = '' 293 if len(sys.argv) == 2: 294 # no parameter - just command 295 # select current group when in tree 296 if status == 'in tree': 297 #get_current_group_in_tree 298 if cwd.split('/')[-1] == 'tree': 299 group = 'root' 300 else: 301 group = cwd.split('/')[-1] 302 #end 303 else: 304 # default group 305 group = 'root' 306 307 if (len(sys.argv) == 2) and (group == 'root') and (not status): 308 # set default database when group is root and cwd not in tree 309 #:define set_default_database 310 z = dict(zip(edi_core.selected, edi_core.selected_path)) 311 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 312 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 313 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 314 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 315 if not os.path.exists(edi_core.data_location): 316 sys.exit('%s is unreachable.'%edi_core.data_location) 317 #:end 318 if len(sys.argv) >= 3: 319 group = sys.argv[2] 320 321 if (group != 'root') and ((not status) or (len(sys.argv) == 3)): 322 # find group in selected databases and setup data_location when not in tree or group is parameter 323 #:define find_group_in_selected_databases_and_setup_data_location 324 for path in edi_core.selected_path: 325 edi_core.data_location = os.path.expanduser(path) 326 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 327 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 328 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 329 330 if not os.path.exists(edi_core.data_location): 331 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 332 groups = os.listdir(edi_core.data_location_groups) 333 if group in groups: 334 break 335 #:end 336 # Verify parameter 337 if not is_this_task_a_group(group): 338 sys.exit('%s is not a group.'%group) 339 print create_task(group) 340 341 ## list tasks in a group. Outside tree folder, without parameter list all tasks and groups, with parameter list group or task title, with -R list group recursively, with position print task title. In tree folder, without parameter list group, with -G list group path with ids and titles, with task id parameter print tree path and title 342 # @ingroup EDI_CLI 343 def ls_generic(): 344 # Figure out if the command is run in the tree 345 #:figure_out_if_in_tree 346 status = '' 347 cwd = os.path.realpath(os.getcwd()) 348 #loop_on_selected_databases 349 z = zip(edi_core.selected, edi_core.selected_path) 350 for d,path in z: 351 edi_core.data_location = os.path.expanduser(path) 352 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 353 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 354 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 355 356 # check path from left 357 real_tree_path = os.path.realpath(edi_core.data_location_tree) 358 if real_tree_path == cwd[:len(real_tree_path)]: 359 status = 'in tree' 360 p_l = edi_core.data_location_tree.split('/')[-2:] 361 break 362 363 # Decide what to execute 364 if len(sys.argv) == 2: 365 if status: 366 exe = 'ls in tree' 367 else: 368 exe = 'ls root' 369 else: 370 if (sys.argv[2] == '-R') or (sys.argv[2] == '-G') or (sys.argv[2] == '-s') or (sys.argv[2] == '-t'): 371 if len(sys.argv) == 4: 372 # there is a task id parameter, use that instead of tree location 373 tid = sys.argv[3] 374 status = '' 375 else: 376 tid = 'root' 377 else: 378 tid = sys.argv[2] 379 380 if status: 381 # in tree, set tid to cwd 382 tid = cwd.split('/')[-1] 383 384 #:define find_task_in_selected_databases_and_setup_data_location 385 if tid == 'root': 386 #set_default_database 387 z = dict(zip(edi_core.selected, edi_core.selected_path)) 388 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 389 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 390 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 391 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 392 if not os.path.exists(edi_core.data_location): 393 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 394 elif tid != 'tree': 395 for path in edi_core.selected_path: 396 edi_core.data_location = os.path.expanduser(path) 397 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 398 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 399 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 400 401 if not os.path.exists(edi_core.data_location): 402 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 403 tasks = os.listdir(edi_core.data_location_tasks) 404 if tid in tasks: 405 break 406 #:end 407 if is_this_task_a_group(sys.argv[2]): 408 if len(sys.argv) == 3: 409 exe = 'ls group' 410 else: 411 exe = 'ls at position' 412 elif sys.argv[2] == '-R': 413 if (is_this_task_a_group(tid)) or (tid == 'tree'): 414 exe = 'ls tree' 415 # tid is tree when cwd is at root, change to root for ls -R. 416 if tid == 'tree': 417 tid = 'root' 418 else: 419 exe = 'ls task' 420 # replace -R option with tid and run regular ls task 421 sys.argv[2] = tid 422 elif sys.argv[2] == '-s': 423 exe = 'ls sort' 424 # tid is tree when cwd is at root, change to root for ls -s. 425 if tid == 'tree': 426 tid = 'root' 427 elif sys.argv[2] == '-t': 428 exe = 'ls sort by date' 429 # tid is tree when cwd is at root, change to root for ls -t. 430 if tid == 'tree': 431 tid = 'root' 432 elif sys.argv[2] == '-L': 433 exe = 'ls any selected groups' 434 elif sys.argv[2] == '-La': 435 exe = 'ls all in selected groups' 436 elif sys.argv[2] == '-Lx': 437 exe = 'ls all in selected groups exclusively' 438 elif sys.argv[2] == '-G' and status: 439 exe = 'ls groups in tree path' 440 else: 441 exe = 'ls task' 442 if sys.argv[2] == '-G': 443 if len(sys.argv) < 4: 444 exe = 'ls root' 445 else: 446 # replace -G option with tid and run regular ls task 447 sys.argv[2] = sys.argv[3] 448 449 if exe == 'ls in tree': 450 if cwd.split('/')[-1] == 'tree': 451 exe = 'ls group root' 452 else: 453 print_list(list_group(cwd.split('/')[-1])) 454 if exe == 'ls root': 455 # print root in all selected databases 456 #:define loop_on_selected_databases 457 z = zip(edi_core.selected, edi_core.selected_path) 458 for d,path in z: 459 print '%s - %s' % (d,path) 460 edi_core.data_location = os.path.expanduser(path) 461 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 462 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 463 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 464 if not os.path.exists(edi_core.data_location): 465 sys.exit('%s is unreachable.'%edi_core.data_location) 466 #:end 467 print_list(list_tree('root')) 468 if exe == 'ls group root': 469 print_list(list_group('root')) 470 if exe == 'ls group': 471 group = sys.argv[2] 472 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 473 #:find_group_in_selected_databases_and_setup_data_location 474 for path in edi_core.selected_path: 475 edi_core.data_location = os.path.expanduser(path) 476 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 477 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 478 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 479 480 if not os.path.exists(edi_core.data_location): 481 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 482 groups = os.listdir(edi_core.data_location_groups) 483 if group in groups: 484 break 485 if group == 'root': 486 z = zip(edi_core.selected, edi_core.selected_path) 487 for d,path in z: 488 print '%s - %s' % (d,path) 489 edi_core.data_location = os.path.expanduser(path) 490 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 491 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 492 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 493 494 if not os.path.exists(edi_core.data_location): 495 sys.exit('%s is unreachable.'%edi_core.data_location) 496 print_list(list_group(group)) 497 else: 498 print_list(list_group(group)) 499 if exe == 'ls at position': 500 # Find task at given postion 501 group = sys.argv[2] 502 try: 503 position = int(sys.argv[3]) 504 except: 505 sys.exit('%s is invalid position'%sys.argv[3]) 506 #:define find_task_at_position 507 if position < 0: 508 sys.exit('Position %d is invalid.'%position) 509 group_tasks = os.listdir(generate_group_path(group)) 510 order_id = baseconvert(position) 511 tid = '' 512 for t in group_tasks: 513 # find exact match 514 if order_id == t[:ORDER_ID_LENGTH]: 515 tid = t[ORDER_ID_LENGTH:] 516 if not tid: 517 sys.exit('Position %d does not exist.'%position) 518 #:end 519 # End - Find task at given postion 520 print generate_task_string_with_tid(tid,get_task_title(tid)) 521 if exe == 'ls tree': 522 print_list(list_tree(tid)) 523 if exe == 'ls groups in tree path': 524 # p is data_location folder/tree 525 p = '/'.join(p_l) 526 # if empty then command is run in tree root 527 if cwd.split(p)[-1]: 528 # print path of tids: tid/tid... 529 print cwd.split(p)[-1][1:] 530 group_titles_in_path = [] 531 for g in cwd.split(p)[-1][1:].split('/'): 532 group_titles_in_path.append(get_task_title(g)) 533 # print title/title... 534 print '/'.join(group_titles_in_path) 535 if exe == 'ls task': 536 if status: 537 # print group path titles and task 538 # in tree folder 539 p = '/'.join(p_l) 540 # if empty then command is run in tree root 541 if cwd.split(p)[-1]: 542 print cwd.split(p)[-1][1:] 543 group_titles_in_path = [] 544 for g in cwd.split(p)[-1][1:].split('/'): 545 group_titles_in_path.append(get_task_title(g)) 546 # print title/title... 547 print '/'.join(group_titles_in_path) 548 # Verify that task sys.argv[2] is in database 549 tasks = os.listdir(edi_core.data_location_tasks) 550 if not sys.argv[2] in tasks: 551 sys.exit('%s not found.'%sys.argv[2]) 552 print generate_task_string_with_tid(sys.argv[2],get_task_title(sys.argv[2])) 553 else: 554 #find_task_in_selected_databases_and_setup_data_location 555 tid_in_database = '' 556 for path in edi_core.selected_path: 557 edi_core.data_location = os.path.expanduser(path) 558 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 559 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 560 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 561 562 tasks = os.listdir(edi_core.data_location_tasks) 563 if sys.argv[2] in tasks: 564 tid_in_database = 'yes' 565 break 566 if not tid_in_database: 567 sys.exit('%s not found.'%sys.argv[2]) 568 print generate_task_string_with_tid(sys.argv[2],get_task_title(sys.argv[2])) 569 570 if exe == 'ls sort': 571 if not is_this_task_a_group(tid): 572 sys.exit('%s is not a group.'%tid) 573 task_attributes = list_group(tid) 574 sorted_tasks = sort_task_attributes(task_attributes) 575 print_list(sorted_tasks) 576 577 if exe == 'ls sort by date': 578 if not is_this_task_a_group(tid): 579 sys.exit('%s is not a group.'%tid) 580 task_attributes = list_group(tid) 581 sorted_tasks = sort_task_attributes_by_date(task_attributes) 582 print_list(sorted_tasks) 583 584 if exe == 'ls any selected groups': 585 if not edi_core.list_of_groups: 586 sys.exit('List empty') 587 588 tid = edi_core.list_of_groups[0] 589 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 590 #:find_task_in_selected_databases_and_setup_data_location 591 if tid == 'root': 592 #set_default_database 593 z = dict(zip(edi_core.selected, edi_core.selected_path)) 594 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 595 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 596 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 597 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 598 if not os.path.exists(edi_core.data_location): 599 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 600 elif tid != 'tree': 601 for path in edi_core.selected_path: 602 edi_core.data_location = os.path.expanduser(path) 603 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 604 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 605 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 606 607 if not os.path.exists(edi_core.data_location): 608 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 609 tasks = os.listdir(edi_core.data_location_tasks) 610 if tid in tasks: 611 break 612 613 # check that all groups are available in the database 614 status = 'search groups' 615 for g in edi_core.list_of_groups: 616 if not is_this_task_a_group(g): 617 status = 'group not found, edi cannot list all groups' 618 if status == 'group not found, edi cannot list all groups': 619 sys.exit(status) 620 621 # list tasks in all groups 622 task_attributes = list_group(tid) 623 empty_line = task_attributes[-1] 624 # remove empty lines between groups 625 del task_attributes[-1] 626 627 # add other groups to the list 628 for tid in edi_core.list_of_groups[1:]: 629 # remove head group, keep head group only for first group in the group list 630 # remove empty lines between groups 631 task_attributes += list_group(tid)[1:-1] 632 633 # remove duplicated tasks 634 tasks = [] 635 tasks.append(task_attributes[0]) 636 # array used to prevent duplicated tasks 637 tids = [] 638 for t in task_attributes[1:]: 639 if not t['tid'] in tids: 640 tasks.append(t) 641 tids.append(t['tid']) 642 643 tasks.append(empty_line) 644 print_list(tasks) 645 646 647 if exe == 'ls all in selected groups': 648 if not edi_core.list_of_groups: 649 sys.exit('List empty') 650 651 tid = edi_core.list_of_groups[0] 652 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 653 #:find_task_in_selected_databases_and_setup_data_location 654 if tid == 'root': 655 #set_default_database 656 z = dict(zip(edi_core.selected, edi_core.selected_path)) 657 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 658 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 659 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 660 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 661 if not os.path.exists(edi_core.data_location): 662 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 663 elif tid != 'tree': 664 for path in edi_core.selected_path: 665 edi_core.data_location = os.path.expanduser(path) 666 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 667 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 668 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 669 670 if not os.path.exists(edi_core.data_location): 671 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 672 tasks = os.listdir(edi_core.data_location_tasks) 673 if tid in tasks: 674 break 675 676 if len(edi_core.list_of_groups) == 1: 677 if not is_this_task_a_group(tid): 678 sys.exit('%s not found, edi cannot list all groups' % tid) 679 # only one group, regular ls 680 print_list(list_group(tid)) 681 sys.exit(0) 682 683 # check that all groups are available in the database 684 status = 'search groups' 685 for g in edi_core.list_of_groups: 686 if not is_this_task_a_group(g): 687 status = 'group not found, edi cannot list all groups' 688 if status == 'group not found, edi cannot list all groups': 689 sys.exit(status) 690 691 # list tasks in all groups 692 task_attributes = list_group(tid) 693 empty_line = task_attributes[-1] 694 # remove empty lines between groups 695 del task_attributes[-1] 696 697 # add other groups to the list 698 for tid in edi_core.list_of_groups[1:]: 699 # remove head group, keep head group only for first group in the group list 700 # remove empty lines between groups 701 task_attributes += list_group(tid)[1:-1] 702 703 # keep tasks only in all listed groups 704 tasks = [] 705 tasks.append(task_attributes[0]) 706 # array used to prevent duplicated tasks 707 tids = [] 708 for t in task_attributes[1:]: 709 if is_linked(t['tid']): 710 groups = os.listdir('%s/groups/' % generate_task_path(t['tid'])) 711 # check that the task in all listed group 712 status = 'all in groups' 713 for g in edi_core.list_of_groups: 714 if not g in groups: 715 status = 'missing group' 716 if (status == 'all in groups') and (not t['tid'] in tids): 717 tasks.append(t) 718 tids.append(t['tid']) 719 720 721 tasks.append(empty_line) 722 print_list(tasks) 723 724 if exe == 'ls all in selected groups exclusively': 725 if not edi_core.list_of_groups: 726 sys.exit('List empty') 727 728 tid = edi_core.list_of_groups[0] 729 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 730 #:find_task_in_selected_databases_and_setup_data_location 731 if tid == 'root': 732 #set_default_database 733 z = dict(zip(edi_core.selected, edi_core.selected_path)) 734 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 735 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 736 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 737 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 738 if not os.path.exists(edi_core.data_location): 739 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 740 elif tid != 'tree': 741 for path in edi_core.selected_path: 742 edi_core.data_location = os.path.expanduser(path) 743 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 744 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 745 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 746 747 if not os.path.exists(edi_core.data_location): 748 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 749 tasks = os.listdir(edi_core.data_location_tasks) 750 if tid in tasks: 751 break 752 753 # check that all groups are available in the database 754 status = 'search groups' 755 for g in edi_core.list_of_groups: 756 if not is_this_task_a_group(g): 757 status = 'group not found, edi cannot list all groups' 758 if status == 'group not found, edi cannot list all groups': 759 sys.exit(status) 760 761 # list tasks in all groups 762 task_attributes = list_group(tid) 763 empty_line = task_attributes[-1] 764 # remove empty lines between groups 765 del task_attributes[-1] 766 767 # add other groups to the list 768 for tid in edi_core.list_of_groups[1:]: 769 # remove head group, keep head group only for first group in the group list 770 # remove empty lines between groups 771 task_attributes += list_group(tid)[1:-1] 772 773 # keep tasks only in all listed groups 774 tasks = [] 775 tasks.append(task_attributes[0]) 776 # array used to prevent duplicated tasks 777 tids = [] 778 for t in task_attributes[1:]: 779 if is_linked(t['tid']): 780 groups = os.listdir('%s/groups/' % generate_task_path(t['tid'])) 781 # check that the task in all listed group exclusively 782 status = 'all groups in list_of_groups' 783 for g in groups: 784 if not g in edi_core.list_of_groups: 785 status = 'a group is not in the list' 786 if (status == 'all groups in list_of_groups') and (len(groups) == len(edi_core.list_of_groups)) and (not t['tid'] in tids): 787 tasks.append(t) 788 tids.append(t['tid']) 789 790 791 tasks.append(empty_line) 792 print_list(tasks) 793 794 795 ## list with tids 796 # @ingroup EDI_CLI 797 def lsid(): 798 # list tids and positions 799 edi_core.list_option = 'tids' 800 801 ls_generic() 802 803 # ls groups and tasks with positions 804 # @ingroup EDI_CLI 805 def ls(): 806 # list positions only 807 edi_core.list_option = 'positions' 808 809 ls_generic() 810 811 ## add task from file. Without parameter add task in root group. add_task option (-F) text_filename add task with filename in fist line of description in root group. add_task option (-F) group text_filename add task with filename in first line of description in group. add_task group text_filename add task in group 812 # @ingroup EDI_CLI 813 def add_task_cli(): 814 if len(sys.argv) < 3: 815 # not enough parameters, call create_task 816 create_task_cli() 817 return 818 819 #:figure_out_if_in_tree 820 status = '' 821 cwd = os.path.realpath(os.getcwd()) 822 #loop_on_selected_databases 823 z = zip(edi_core.selected, edi_core.selected_path) 824 for d,path in z: 825 edi_core.data_location = os.path.expanduser(path) 826 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 827 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 828 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 829 830 # check path from left 831 real_tree_path = os.path.realpath(edi_core.data_location_tree) 832 if real_tree_path == cwd[:len(real_tree_path)]: 833 status = 'in tree' 834 p_l = edi_core.data_location_tree.split('/')[-2:] 835 break 836 837 options = '' 838 group_parameter_status = 'group is a command line parameter' 839 if len(sys.argv) < 4: 840 # Parameters are: command filename 841 # select current group when in tree 842 if status == 'in tree': 843 #get_current_group_in_tree 844 if cwd.split('/')[-1] == 'tree': 845 group = 'root' 846 else: 847 group = cwd.split('/')[-1] 848 #end 849 else: 850 # default group 851 group = 'root' 852 group_parameter_status = 'edi selected group' 853 854 text_file = sys.argv[2] 855 else: 856 if ((sys.argv[2] == '-F') or (sys.argv[2] == '-t')) and len(sys.argv) == 4: 857 options = sys.argv[2] 858 text_file = sys.argv[3] 859 # select current group when in tree 860 if status == 'in tree': 861 #get_current_group_in_tree 862 if cwd.split('/')[-1] == 'tree': 863 group = 'root' 864 else: 865 group = cwd.split('/')[-1] 866 #end 867 else: 868 # default group 869 group = 'root' 870 group_parameter_status = 'edi selected group' 871 if ((sys.argv[2] == '-F') or (sys.argv[2] == '-t')) and len(sys.argv) == 5: 872 options = sys.argv[2] 873 group = sys.argv[3] 874 text_file = sys.argv[4] 875 if ((sys.argv[2] != '-F') and (sys.argv[2] != '-t')): 876 group = sys.argv[2] 877 text_file = sys.argv[3] 878 if not options: 879 exe = 'add' 880 else: 881 if options == '-F': 882 # option -F stores text_file filename in first line of description 883 exe = 'add task and filename' 884 elif options == '-t': 885 # option -F stores text_file filename in first line of description 886 exe = 'add text from command line' 887 888 if (group == 'root') and (not status): 889 # set default database when group is root and cwd not in tree 890 #:set_default_database 891 z = dict(zip(edi_core.selected, edi_core.selected_path)) 892 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 893 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 894 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 895 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 896 if not os.path.exists(edi_core.data_location): 897 sys.exit('%s is unreachable.'%edi_core.data_location) 898 if (group != 'root') and ((not status) or (group_parameter_status == 'group is a command line parameter')): 899 #:find_group_in_selected_databases_and_setup_data_location 900 for path in edi_core.selected_path: 901 edi_core.data_location = os.path.expanduser(path) 902 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 903 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 904 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 905 906 if not os.path.exists(edi_core.data_location): 907 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 908 groups = os.listdir(edi_core.data_location_groups) 909 if group in groups: 910 break 911 912 if not is_this_task_a_group(group): 913 sys.exit('%s is not a group.'%group) 914 915 if exe == 'add': 916 if not os.path.exists(text_file): 917 sys.exit('%s not accessible.'%text_file) 918 print add_task(group,text_file) 919 if exe == 'add task and filename': 920 if not os.path.exists(text_file): 921 sys.exit('%s not accessible.'%text_file) 922 print add_task_and_filename(group,text_file) 923 if exe == 'add text from command line': 924 print add_text(group,text_file) 925 926 ## print description. With position parameter print description for task at given position 927 # @ingroup EDI_CLI 928 def cat(): 929 if len(sys.argv) < 3: 930 sys.exit('Too little parameters.') 931 tid = sys.argv[2] 932 933 # Figure out if the command is run in the tree 934 #:figure_out_if_in_tree 935 status = '' 936 cwd = os.path.realpath(os.getcwd()) 937 #loop_on_selected_databases 938 z = zip(edi_core.selected, edi_core.selected_path) 939 for d,path in z: 940 edi_core.data_location = os.path.expanduser(path) 941 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 942 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 943 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 944 945 # check path from left 946 real_tree_path = os.path.realpath(edi_core.data_location_tree) 947 if real_tree_path == cwd[:len(real_tree_path)]: 948 status = 'in tree' 949 p_l = edi_core.data_location_tree.split('/')[-2:] 950 break 951 952 #:define find_task_sysargv2_in_selected_databases 953 # the goal for this code is to reset status when a tid is an existing task 954 # when parameter is taskid, it doesnt matter if cwd is in tree 955 # find task in selected databases 956 for path in edi_core.selected_path: 957 data_location = os.path.expanduser(path) 958 data_location_tasks = '%s/tasks'%data_location 959 960 if not os.path.exists(data_location): 961 sys.exit('%s is unreachable.'%path) 962 tasks = os.listdir(data_location_tasks) 963 if sys.argv[2] in tasks: 964 # found task, setup database below 965 status = '' 966 break 967 #:end 968 969 if status == 'in tree': 970 #:define get_current_group_in_tree 971 if cwd.split('/')[-1] == 'tree': 972 group = 'root' 973 else: 974 group = cwd.split('/')[-1] 975 #:end 976 977 if (len(sys.argv) == 3) and (not status): 978 # group parameter and not in tree 979 tid = sys.argv[2] 980 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 981 #:find_task_in_selected_databases_and_setup_data_location 982 if tid == 'root': 983 #set_default_database 984 z = dict(zip(edi_core.selected, edi_core.selected_path)) 985 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 986 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 987 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 988 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 989 if not os.path.exists(edi_core.data_location): 990 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 991 elif tid != 'tree': 992 for path in edi_core.selected_path: 993 edi_core.data_location = os.path.expanduser(path) 994 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 995 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 996 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 997 998 if not os.path.exists(edi_core.data_location): 999 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1000 tasks = os.listdir(edi_core.data_location_tasks) 1001 if tid in tasks: 1002 break 1003 1004 if (len(sys.argv) == 3) and (status == 'in tree'): 1005 # Find task at given postion 1006 #:define get_position_from_argv2 1007 try: 1008 position = int(sys.argv[2]) 1009 except: 1010 sys.exit('%s is invalid position'%sys.argv[2]) 1011 #:end 1012 #:find_task_at_position 1013 if position < 0: 1014 sys.exit('Position %d is invalid.'%position) 1015 group_tasks = os.listdir(generate_group_path(group)) 1016 order_id = baseconvert(position) 1017 tid = '' 1018 for t in group_tasks: 1019 # find exact match 1020 if order_id == t[:ORDER_ID_LENGTH]: 1021 tid = t[ORDER_ID_LENGTH:] 1022 if not tid: 1023 sys.exit('Position %d does not exist.'%position) 1024 1025 if len(sys.argv) == 4: 1026 group = sys.argv[2] 1027 try: 1028 position = int(sys.argv[3]) 1029 except: 1030 sys.exit('%s is invalid position'%sys.argv[3]) 1031 # find_task_in_selected_databases_and_setup_data_location needs tid, here tid = group 1032 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 1033 #:find_task_in_selected_databases_and_setup_data_location 1034 if tid == 'root': 1035 #set_default_database 1036 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1037 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1038 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1039 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1040 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1041 if not os.path.exists(edi_core.data_location): 1042 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1043 elif tid != 'tree': 1044 for path in edi_core.selected_path: 1045 edi_core.data_location = os.path.expanduser(path) 1046 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1047 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1048 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1049 1050 if not os.path.exists(edi_core.data_location): 1051 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1052 tasks = os.listdir(edi_core.data_location_tasks) 1053 if tid in tasks: 1054 break 1055 if not is_this_task_a_group(group): 1056 sys.exit('%s is not a group.'%group) 1057 #:find_task_at_position 1058 if position < 0: 1059 sys.exit('Position %d is invalid.'%position) 1060 group_tasks = os.listdir(generate_group_path(group)) 1061 order_id = baseconvert(position) 1062 tid = '' 1063 for t in group_tasks: 1064 # find exact match 1065 if order_id == t[:ORDER_ID_LENGTH]: 1066 tid = t[ORDER_ID_LENGTH:] 1067 if not tid: 1068 sys.exit('Position %d does not exist.'%position) 1069 1070 # Verify that task tid is in database 1071 tasks = os.listdir(edi_core.data_location_tasks) 1072 if not tid in tasks: 1073 sys.exit('%s not found.'%tid) 1074 print ''.join(display_task(tid)) 1075 1076 ## convert task to group 1077 # @ingroup EDI_CLI 1078 def mkdir(): 1079 if len(sys.argv) < 3: 1080 sys.exit('Too little parameters.') 1081 # Figure out if the command is run in the tree 1082 #:figure_out_if_in_tree 1083 status = '' 1084 cwd = os.path.realpath(os.getcwd()) 1085 #loop_on_selected_databases 1086 z = zip(edi_core.selected, edi_core.selected_path) 1087 for d,path in z: 1088 edi_core.data_location = os.path.expanduser(path) 1089 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1090 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1091 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1092 1093 # check path from left 1094 real_tree_path = os.path.realpath(edi_core.data_location_tree) 1095 if real_tree_path == cwd[:len(real_tree_path)]: 1096 status = 'in tree' 1097 p_l = edi_core.data_location_tree.split('/')[-2:] 1098 break 1099 1100 #:find_task_sysargv2_in_selected_databases 1101 # the goal for this code is to reset status when a tid is an existing task 1102 # when parameter is taskid, it doesnt matter if cwd is in tree 1103 # find task in selected databases 1104 for path in edi_core.selected_path: 1105 data_location = os.path.expanduser(path) 1106 data_location_tasks = '%s/tasks'%data_location 1107 1108 if not os.path.exists(data_location): 1109 sys.exit('%s is unreachable.'%path) 1110 tasks = os.listdir(data_location_tasks) 1111 if sys.argv[2] in tasks: 1112 # found task, setup database below 1113 status = '' 1114 break 1115 1116 if status == 'in tree': 1117 #:get_current_group_in_tree 1118 if cwd.split('/')[-1] == 'tree': 1119 group = 'root' 1120 else: 1121 group = cwd.split('/')[-1] 1122 #:get_position_from_argv2 1123 try: 1124 position = int(sys.argv[2]) 1125 except: 1126 sys.exit('%s is invalid position'%sys.argv[2]) 1127 #:find_task_at_position 1128 if position < 0: 1129 sys.exit('Position %d is invalid.'%position) 1130 group_tasks = os.listdir(generate_group_path(group)) 1131 order_id = baseconvert(position) 1132 tid = '' 1133 for t in group_tasks: 1134 # find exact match 1135 if order_id == t[:ORDER_ID_LENGTH]: 1136 tid = t[ORDER_ID_LENGTH:] 1137 if not tid: 1138 sys.exit('Position %d does not exist.'%position) 1139 sys.argv[2] = tid 1140 1141 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 1142 #:define tab1_find_task_in_selected_databases_and_setup_data_location 1143 if sys.argv[2] == 'root': 1144 #set_default_database 1145 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1146 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1147 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1148 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1149 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1150 if not os.path.exists(edi_core.data_location): 1151 sys.exit('%s is unreachable.'%edi_core.data_location) 1152 else: 1153 for path in edi_core.selected_path: 1154 edi_core.data_location = os.path.expanduser(path) 1155 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1156 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1157 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1158 1159 if not os.path.exists(edi_core.data_location): 1160 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1161 tasks = os.listdir(edi_core.data_location_tasks) 1162 if sys.argv[2] in tasks: 1163 break 1164 #:end 1165 1166 # Verify that task tid is in database 1167 tasks = os.listdir(edi_core.data_location_tasks) 1168 if not sys.argv[2] in tasks: 1169 sys.exit('%s not found.'%sys.argv[2]) 1170 # Verify that task is not already a group 1171 if is_this_task_a_group(sys.argv[2]): 1172 sys.exit('%s is already a group.'%sys.argv[2]) 1173 print '\n'.join(create_group(sys.argv[2])) 1174 1175 ## print group title for task 1176 # @ingroup EDI_CLI 1177 def show_group_for_task_cli(): 1178 if len(sys.argv) < 3: 1179 sys.exit('Too little parameters.') 1180 # Figure out if the command is run in the tree 1181 #:figure_out_if_in_tree 1182 status = '' 1183 cwd = os.path.realpath(os.getcwd()) 1184 #loop_on_selected_databases 1185 z = zip(edi_core.selected, edi_core.selected_path) 1186 for d,path in z: 1187 edi_core.data_location = os.path.expanduser(path) 1188 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1189 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1190 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1191 1192 # check path from left 1193 real_tree_path = os.path.realpath(edi_core.data_location_tree) 1194 if real_tree_path == cwd[:len(real_tree_path)]: 1195 status = 'in tree' 1196 p_l = edi_core.data_location_tree.split('/')[-2:] 1197 break 1198 1199 #:find_task_sysargv2_in_selected_databases 1200 # the goal for this code is to reset status when a tid is an existing task 1201 # when parameter is taskid, it doesnt matter if cwd is in tree 1202 # find task in selected databases 1203 for path in edi_core.selected_path: 1204 data_location = os.path.expanduser(path) 1205 data_location_tasks = '%s/tasks'%data_location 1206 1207 if not os.path.exists(data_location): 1208 sys.exit('%s is unreachable.'%path) 1209 tasks = os.listdir(data_location_tasks) 1210 if sys.argv[2] in tasks: 1211 # found task, setup database below 1212 status = '' 1213 break 1214 1215 if status == 'in tree': 1216 #:get_current_group_in_tree 1217 if cwd.split('/')[-1] == 'tree': 1218 group = 'root' 1219 else: 1220 group = cwd.split('/')[-1] 1221 #:get_position_from_argv2 1222 try: 1223 position = int(sys.argv[2]) 1224 except: 1225 sys.exit('%s is invalid position'%sys.argv[2]) 1226 #:find_task_at_position 1227 if position < 0: 1228 sys.exit('Position %d is invalid.'%position) 1229 group_tasks = os.listdir(generate_group_path(group)) 1230 order_id = baseconvert(position) 1231 tid = '' 1232 for t in group_tasks: 1233 # find exact match 1234 if order_id == t[:ORDER_ID_LENGTH]: 1235 tid = t[ORDER_ID_LENGTH:] 1236 if not tid: 1237 sys.exit('Position %d does not exist.'%position) 1238 sys.argv[2] = tid 1239 1240 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 1241 #:tab1_find_task_in_selected_databases_and_setup_data_location 1242 if sys.argv[2] == 'root': 1243 #set_default_database 1244 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1245 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1246 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1247 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1248 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1249 if not os.path.exists(edi_core.data_location): 1250 sys.exit('%s is unreachable.'%edi_core.data_location) 1251 else: 1252 for path in edi_core.selected_path: 1253 edi_core.data_location = os.path.expanduser(path) 1254 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1255 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1256 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1257 1258 if not os.path.exists(edi_core.data_location): 1259 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1260 tasks = os.listdir(edi_core.data_location_tasks) 1261 if sys.argv[2] in tasks: 1262 break 1263 1264 # Verify that task tid is in database 1265 tasks = os.listdir(edi_core.data_location_tasks) 1266 if not sys.argv[2] in tasks: 1267 sys.exit('%s not found.'%sys.argv[2]) 1268 print '\n'.join(show_group_for_task(sys.argv[2])) 1269 1270 ## delete task or group, or delete task in specified group, keep linked tasks 1271 # @ingroup EDI_CLI 1272 def rm(): 1273 if len(sys.argv) < 3: 1274 sys.exit('Too little parameters.') 1275 # Figure out if the command is run in the tree 1276 #:figure_out_if_in_tree 1277 status = '' 1278 cwd = os.path.realpath(os.getcwd()) 1279 #loop_on_selected_databases 1280 z = zip(edi_core.selected, edi_core.selected_path) 1281 for d,path in z: 1282 edi_core.data_location = os.path.expanduser(path) 1283 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1284 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1285 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1286 1287 # check path from left 1288 real_tree_path = os.path.realpath(edi_core.data_location_tree) 1289 if real_tree_path == cwd[:len(real_tree_path)]: 1290 status = 'in tree' 1291 p_l = edi_core.data_location_tree.split('/')[-2:] 1292 break 1293 1294 #:find_task_sysargv2_in_selected_databases 1295 # the goal for this code is to reset status when a tid is an existing task 1296 # when parameter is taskid, it doesnt matter if cwd is in tree 1297 # find task in selected databases 1298 for path in edi_core.selected_path: 1299 data_location = os.path.expanduser(path) 1300 data_location_tasks = '%s/tasks'%data_location 1301 1302 if not os.path.exists(data_location): 1303 sys.exit('%s is unreachable.'%path) 1304 tasks = os.listdir(data_location_tasks) 1305 if sys.argv[2] in tasks: 1306 # found task, setup database below 1307 status = '' 1308 break 1309 1310 if status == 'in tree': 1311 #:get_current_group_in_tree 1312 if cwd.split('/')[-1] == 'tree': 1313 group = 'root' 1314 else: 1315 group = cwd.split('/')[-1] 1316 #:get_position_from_argv2 1317 try: 1318 position = int(sys.argv[2]) 1319 except: 1320 sys.exit('%s is invalid position'%sys.argv[2]) 1321 #:find_task_at_position 1322 if position < 0: 1323 sys.exit('Position %d is invalid.'%position) 1324 group_tasks = os.listdir(generate_group_path(group)) 1325 order_id = baseconvert(position) 1326 tid = '' 1327 for t in group_tasks: 1328 # find exact match 1329 if order_id == t[:ORDER_ID_LENGTH]: 1330 tid = t[ORDER_ID_LENGTH:] 1331 if not tid: 1332 sys.exit('Position %d does not exist.'%position) 1333 sys.argv[2] = tid 1334 1335 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 1336 #:tab1_find_task_in_selected_databases_and_setup_data_location 1337 if sys.argv[2] == 'root': 1338 #set_default_database 1339 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1340 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1341 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1342 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1343 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1344 if not os.path.exists(edi_core.data_location): 1345 sys.exit('%s is unreachable.'%edi_core.data_location) 1346 else: 1347 for path in edi_core.selected_path: 1348 edi_core.data_location = os.path.expanduser(path) 1349 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1350 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1351 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1352 1353 if not os.path.exists(edi_core.data_location): 1354 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1355 tasks = os.listdir(edi_core.data_location_tasks) 1356 if sys.argv[2] in tasks: 1357 break 1358 if len(sys.argv) == 3: 1359 if is_this_task_a_group(sys.argv[2]): 1360 delete_group(sys.argv[2]) 1361 else: 1362 # Verify that task tid is in database 1363 tasks = os.listdir(edi_core.data_location_tasks) 1364 if not sys.argv[2] in tasks: 1365 sys.exit('%s not found.'%sys.argv[2]) 1366 delete_task(sys.argv[2]) 1367 if len(sys.argv) == 4: 1368 # Verify that task tid is not root 1369 if sys.argv[3] == 'root': 1370 sys.exit('root is invalid task') 1371 # Verify that task tid is in database 1372 tasks = os.listdir(edi_core.data_location_tasks) 1373 if not sys.argv[2] in tasks: 1374 sys.exit('%s not found.'%sys.argv[2]) 1375 # Verify group exists 1376 if not is_this_task_a_group(sys.argv[2]): 1377 sys.exit('%s is not a group.'%sys.argv[2]) 1378 if not sys.argv[3] in tasks: 1379 sys.exit('%s not found.'%sys.argv[3]) 1380 # delete task in specified group 1381 delete_linked_task(sys.argv[2], sys.argv[3]) 1382 1383 ## edit description 1384 # @ingroup EDI_CLI 1385 def vi(): 1386 if len(sys.argv) < 3: 1387 sys.exit('Too little parameters.') 1388 tid = sys.argv[2] 1389 1390 # Figure out if the command is run in the tree 1391 #:figure_out_if_in_tree 1392 status = '' 1393 cwd = os.path.realpath(os.getcwd()) 1394 #loop_on_selected_databases 1395 z = zip(edi_core.selected, edi_core.selected_path) 1396 for d,path in z: 1397 edi_core.data_location = os.path.expanduser(path) 1398 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1399 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1400 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1401 1402 # check path from left 1403 real_tree_path = os.path.realpath(edi_core.data_location_tree) 1404 if real_tree_path == cwd[:len(real_tree_path)]: 1405 status = 'in tree' 1406 p_l = edi_core.data_location_tree.split('/')[-2:] 1407 break 1408 1409 #:find_task_sysargv2_in_selected_databases 1410 # the goal for this code is to reset status when a tid is an existing task 1411 # when parameter is taskid, it doesnt matter if cwd is in tree 1412 # find task in selected databases 1413 for path in edi_core.selected_path: 1414 data_location = os.path.expanduser(path) 1415 data_location_tasks = '%s/tasks'%data_location 1416 1417 if not os.path.exists(data_location): 1418 sys.exit('%s is unreachable.'%path) 1419 tasks = os.listdir(data_location_tasks) 1420 if sys.argv[2] in tasks: 1421 # found task, setup database below 1422 status = '' 1423 break 1424 1425 if status == 'in tree': 1426 #:get_current_group_in_tree 1427 if cwd.split('/')[-1] == 'tree': 1428 group = 'root' 1429 else: 1430 group = cwd.split('/')[-1] 1431 1432 if (len(sys.argv) == 3) and (not status): 1433 # group parameter and not in tree 1434 tid = sys.argv[2] 1435 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 1436 #:find_task_in_selected_databases_and_setup_data_location 1437 if tid == 'root': 1438 #set_default_database 1439 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1440 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1441 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1442 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1443 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1444 if not os.path.exists(edi_core.data_location): 1445 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1446 elif tid != 'tree': 1447 for path in edi_core.selected_path: 1448 edi_core.data_location = os.path.expanduser(path) 1449 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1450 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1451 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1452 1453 if not os.path.exists(edi_core.data_location): 1454 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1455 tasks = os.listdir(edi_core.data_location_tasks) 1456 if tid in tasks: 1457 break 1458 if (len(sys.argv) == 3) and (status == 'in tree'): 1459 # Find task at given postion 1460 #:get_position_from_argv2 1461 try: 1462 position = int(sys.argv[2]) 1463 except: 1464 sys.exit('%s is invalid position'%sys.argv[2]) 1465 #:find_task_at_position 1466 if position < 0: 1467 sys.exit('Position %d is invalid.'%position) 1468 group_tasks = os.listdir(generate_group_path(group)) 1469 order_id = baseconvert(position) 1470 tid = '' 1471 for t in group_tasks: 1472 # find exact match 1473 if order_id == t[:ORDER_ID_LENGTH]: 1474 tid = t[ORDER_ID_LENGTH:] 1475 if not tid: 1476 sys.exit('Position %d does not exist.'%position) 1477 if len(sys.argv) == 4: 1478 group = sys.argv[2] 1479 try: 1480 position = int(sys.argv[3]) 1481 except: 1482 sys.exit('%s is invalid position'%sys.argv[3]) 1483 # find_task_in_selected_databases_and_setup_data_location needs tid, here tid = group 1484 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 1485 #:find_task_in_selected_databases_and_setup_data_location 1486 if tid == 'root': 1487 #set_default_database 1488 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1489 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1490 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1491 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1492 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1493 if not os.path.exists(edi_core.data_location): 1494 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1495 elif tid != 'tree': 1496 for path in edi_core.selected_path: 1497 edi_core.data_location = os.path.expanduser(path) 1498 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1499 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1500 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1501 1502 if not os.path.exists(edi_core.data_location): 1503 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1504 tasks = os.listdir(edi_core.data_location_tasks) 1505 if tid in tasks: 1506 break 1507 # Verify group exists 1508 if not is_this_task_a_group(sys.argv[2]): 1509 sys.exit('%s is not a group.'%sys.argv[2]) 1510 #:find_task_at_position 1511 if position < 0: 1512 sys.exit('Position %d is invalid.'%position) 1513 group_tasks = os.listdir(generate_group_path(group)) 1514 order_id = baseconvert(position) 1515 tid = '' 1516 for t in group_tasks: 1517 # find exact match 1518 if order_id == t[:ORDER_ID_LENGTH]: 1519 tid = t[ORDER_ID_LENGTH:] 1520 if not tid: 1521 sys.exit('Position %d does not exist.'%position) 1522 1523 # Verify that task tid is in database 1524 tasks = os.listdir(edi_core.data_location_tasks) 1525 if not tid in tasks: 1526 sys.exit('%s not found.'%tid) 1527 edit_task(tid) 1528 1529 ## change order in group. Without group parameter change order in root group, in tree change order in current group 1530 # @ingroup EDI_CLI 1531 def change_order(): 1532 if len(sys.argv) < 4: 1533 sys.exit('Too little parameters.') 1534 # Figure out if the command is run in the tree 1535 #:figure_out_if_in_tree 1536 status = '' 1537 cwd = os.path.realpath(os.getcwd()) 1538 #loop_on_selected_databases 1539 z = zip(edi_core.selected, edi_core.selected_path) 1540 for d,path in z: 1541 edi_core.data_location = os.path.expanduser(path) 1542 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1543 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1544 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1545 1546 # check path from left 1547 real_tree_path = os.path.realpath(edi_core.data_location_tree) 1548 if real_tree_path == cwd[:len(real_tree_path)]: 1549 status = 'in tree' 1550 p_l = edi_core.data_location_tree.split('/')[-2:] 1551 break 1552 1553 if status == 'in tree': 1554 #:get_current_group_in_tree 1555 if cwd.split('/')[-1] == 'tree': 1556 group = 'root' 1557 else: 1558 group = cwd.split('/')[-1] 1559 else: 1560 group = 'root' 1561 1562 1563 if len(sys.argv) < 5: 1564 if not status: 1565 sys.exit('Missing group parameter.') 1566 at = sys.argv[2] 1567 to = sys.argv[3] 1568 else: 1569 group = sys.argv[2] 1570 at = sys.argv[3] 1571 to = sys.argv[4] 1572 1573 if group == 'root': 1574 #set_default_database 1575 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1576 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1577 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1578 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1579 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1580 if not os.path.exists(edi_core.data_location): 1581 sys.exit('%s is unreachable.'%edi_core.data_location) 1582 else: 1583 #find_group_in_selected_databases_and_setup_data_location 1584 for path in edi_core.selected_path: 1585 edi_core.data_location = os.path.expanduser(path) 1586 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1587 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1588 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1589 1590 if not os.path.exists(edi_core.data_location): 1591 sys.exit('%s is unreachable.'%edi_core.data_location) 1592 groups = os.listdir(edi_core.data_location_groups) 1593 if group in groups: 1594 break 1595 1596 # Verify group exists 1597 if not is_this_task_a_group(group): 1598 sys.exit('%s is not a group.'%group) 1599 # Verify at and to are numbers 1600 try: 1601 test = int(at) 1602 except: 1603 sys.exit('%s is invalid position'%at) 1604 try: 1605 test = int(to) 1606 except: 1607 sys.exit('%s is invalid position'%to) 1608 1609 if int(at) < 0: 1610 sys.exit('Position %s is invalid.'%at) 1611 if int(to) < 0: 1612 sys.exit('Position %s is invalid.'%to) 1613 print '\n'.join(change_task_order(group,int(at),int(to))) 1614 1615 ## set status to int parameter 1616 # @ingroup EDI_CLI 1617 def set(): 1618 if len(sys.argv) < 4: 1619 sys.exit('Too little parameters.') 1620 # Figure out if the command is run in the tree 1621 #:figure_out_if_in_tree 1622 status = '' 1623 cwd = os.path.realpath(os.getcwd()) 1624 #loop_on_selected_databases 1625 z = zip(edi_core.selected, edi_core.selected_path) 1626 for d,path in z: 1627 edi_core.data_location = os.path.expanduser(path) 1628 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1629 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1630 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1631 1632 # check path from left 1633 real_tree_path = os.path.realpath(edi_core.data_location_tree) 1634 if real_tree_path == cwd[:len(real_tree_path)]: 1635 status = 'in tree' 1636 p_l = edi_core.data_location_tree.split('/')[-2:] 1637 break 1638 1639 #:find_task_sysargv2_in_selected_databases 1640 # the goal for this code is to reset status when a tid is an existing task 1641 # when parameter is taskid, it doesnt matter if cwd is in tree 1642 # find task in selected databases 1643 for path in edi_core.selected_path: 1644 data_location = os.path.expanduser(path) 1645 data_location_tasks = '%s/tasks'%data_location 1646 1647 if not os.path.exists(data_location): 1648 sys.exit('%s is unreachable.'%path) 1649 tasks = os.listdir(data_location_tasks) 1650 if sys.argv[2] in tasks: 1651 # found task, setup database below 1652 status = '' 1653 break 1654 1655 if status == 'in tree': 1656 #:get_current_group_in_tree 1657 if cwd.split('/')[-1] == 'tree': 1658 group = 'root' 1659 else: 1660 group = cwd.split('/')[-1] 1661 #:get_position_from_argv2 1662 try: 1663 position = int(sys.argv[2]) 1664 except: 1665 sys.exit('%s is invalid position'%sys.argv[2]) 1666 #:find_task_at_position 1667 if position < 0: 1668 sys.exit('Position %d is invalid.'%position) 1669 group_tasks = os.listdir(generate_group_path(group)) 1670 order_id = baseconvert(position) 1671 tid = '' 1672 for t in group_tasks: 1673 # find exact match 1674 if order_id == t[:ORDER_ID_LENGTH]: 1675 tid = t[ORDER_ID_LENGTH:] 1676 if not tid: 1677 sys.exit('Position %d does not exist.'%position) 1678 sys.argv[2] = tid 1679 1680 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 1681 #:tab1_find_task_in_selected_databases_and_setup_data_location 1682 if sys.argv[2] == 'root': 1683 #set_default_database 1684 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1685 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1686 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1687 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1688 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1689 if not os.path.exists(edi_core.data_location): 1690 sys.exit('%s is unreachable.'%edi_core.data_location) 1691 else: 1692 for path in edi_core.selected_path: 1693 edi_core.data_location = os.path.expanduser(path) 1694 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1695 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1696 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1697 1698 if not os.path.exists(edi_core.data_location): 1699 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1700 tasks = os.listdir(edi_core.data_location_tasks) 1701 if sys.argv[2] in tasks: 1702 break 1703 # Verify that task tid is in database 1704 tasks = os.listdir(edi_core.data_location_tasks) 1705 if not sys.argv[2] in tasks: 1706 sys.exit('%s not found.'%sys.argv[2]) 1707 # Verify int_status parameter 1708 try: 1709 test = int(sys.argv[3]) 1710 except: 1711 sys.exit('int_status %s is invalid.'%sys.argv[3]) 1712 if test >= len(edi_core.TASK_STATUS): 1713 sys.exit('int_status %s is too large.'%sys.argv[3]) 1714 if test < 0: 1715 sys.exit('int_status %s is invalid.'%sys.argv[3]) 1716 set_status(sys.argv[2],int(sys.argv[3])) 1717 1718 ## set tasks to active. Without parameter set tasks in root group 1719 # @ingroup EDI_CLI 1720 def reset(): 1721 # Figure out if the command is run in the tree 1722 #:figure_out_if_in_tree 1723 status = '' 1724 cwd = os.path.realpath(os.getcwd()) 1725 #loop_on_selected_databases 1726 z = zip(edi_core.selected, edi_core.selected_path) 1727 for d,path in z: 1728 edi_core.data_location = os.path.expanduser(path) 1729 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1730 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1731 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1732 1733 # check path from left 1734 real_tree_path = os.path.realpath(edi_core.data_location_tree) 1735 if real_tree_path == cwd[:len(real_tree_path)]: 1736 status = 'in tree' 1737 p_l = edi_core.data_location_tree.split('/')[-2:] 1738 break 1739 1740 if status == 'in tree': 1741 #:get_current_group_in_tree 1742 if cwd.split('/')[-1] == 'tree': 1743 group = 'root' 1744 else: 1745 group = cwd.split('/')[-1] 1746 1747 if (len(sys.argv) == 2) and (status != 'in tree'): 1748 #:set_default_database 1749 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1750 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1751 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1752 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1753 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1754 if not os.path.exists(edi_core.data_location): 1755 sys.exit('%s is unreachable.'%edi_core.data_location) 1756 group = 'root' 1757 if (len(sys.argv) > 2) and (sys.argv[2] == 'root') and (not status): 1758 # set default database when group is root and cwd not in tree 1759 #:set_default_database 1760 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1761 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1762 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1763 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1764 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1765 if not os.path.exists(edi_core.data_location): 1766 sys.exit('%s is unreachable.'%edi_core.data_location) 1767 group = 'root' 1768 # when group is root and in tree, dont change data_location 1769 if (len(sys.argv) > 2) and (sys.argv[2] != 'root'): 1770 group = sys.argv[2] 1771 #:find_group_in_selected_databases_and_setup_data_location 1772 for path in edi_core.selected_path: 1773 edi_core.data_location = os.path.expanduser(path) 1774 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1775 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1776 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1777 1778 if not os.path.exists(edi_core.data_location): 1779 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1780 groups = os.listdir(edi_core.data_location_groups) 1781 if group in groups: 1782 break 1783 1784 if not is_this_task_a_group(group): 1785 sys.exit('%s is not a group.'%group) 1786 reset_group_status(group) 1787 1788 ## search string in tasks folder 1789 # @ingroup EDI_CLI 1790 def search(): 1791 if len(sys.argv) < 3: 1792 sys.exit('Too little parameters.') 1793 # Figure out if the command is run in the tree 1794 #:figure_out_if_in_tree 1795 status = '' 1796 cwd = os.path.realpath(os.getcwd()) 1797 #loop_on_selected_databases 1798 z = zip(edi_core.selected, edi_core.selected_path) 1799 for d,path in z: 1800 edi_core.data_location = os.path.expanduser(path) 1801 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1802 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1803 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1804 1805 # check path from left 1806 real_tree_path = os.path.realpath(edi_core.data_location_tree) 1807 if real_tree_path == cwd[:len(real_tree_path)]: 1808 status = 'in tree' 1809 p_l = edi_core.data_location_tree.split('/')[-2:] 1810 break 1811 1812 if status == 'in tree': 1813 #:get_current_group_in_tree 1814 if cwd.split('/')[-1] == 'tree': 1815 group = 'root' 1816 else: 1817 group = cwd.split('/')[-1] 1818 print ''.join(search_string_in_tree(group,sys.argv[2])) 1819 else: 1820 #:loop_on_selected_databases 1821 z = zip(edi_core.selected, edi_core.selected_path) 1822 for d,path in z: 1823 print '%s - %s' % (d,path) 1824 edi_core.data_location = os.path.expanduser(path) 1825 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1826 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1827 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1828 if not os.path.exists(edi_core.data_location): 1829 sys.exit('%s is unreachable.'%edi_core.data_location) 1830 print ''.join(search_string(sys.argv[2])) 1831 1832 ## move task or group 1833 # @ingroup EDI_CLI 1834 def move_task(): 1835 if len(sys.argv) < 4: 1836 sys.exit('Too little parameters.') 1837 if len(sys.argv) == 5: 1838 tid = sys.argv[2] 1839 #:find_task_in_selected_databases_and_setup_data_location 1840 if tid == 'root': 1841 #set_default_database 1842 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1843 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1844 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1845 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1846 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1847 if not os.path.exists(edi_core.data_location): 1848 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1849 elif tid != 'tree': 1850 for path in edi_core.selected_path: 1851 edi_core.data_location = os.path.expanduser(path) 1852 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1853 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1854 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1855 1856 if not os.path.exists(edi_core.data_location): 1857 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1858 tasks = os.listdir(edi_core.data_location_tasks) 1859 if tid in tasks: 1860 break 1861 # Verify parameters 1862 # Verify that task tid is not root 1863 if sys.argv[3] == 'root': 1864 sys.exit('root is invalid task') 1865 if not is_this_task_a_group(sys.argv[2]): 1866 sys.exit('%s is not a group.'%sys.argv[2]) 1867 if not is_this_task_a_group(sys.argv[4]): 1868 sys.exit('%s is not a group.'%sys.argv[4]) 1869 # Verify that task tid is in database 1870 tasks = os.listdir(edi_core.data_location_tasks) 1871 if not sys.argv[3] in tasks: 1872 sys.exit('%s not found.'%sys.argv[3]) 1873 # Verify that when tid is a group, tid is not parent to destination group (sys.argv[3]) 1874 if is_this_task_a_group(sys.argv[3]): 1875 tree_path = find_group_in_tree(sys.argv[4]) 1876 parent_path = tree_path.split(sys.argv[4])[0] 1877 if sys.argv[3] in parent_path: 1878 print tree_path 1879 sys.exit('%s is a parent group for %s'%(sys.argv[3],sys.argv[4])) 1880 # Verify that group is not move on itself 1881 if sys.argv[3] == sys.argv[4]: 1882 sys.exit('Moving %s group on itself.'%sys.argv[3]) 1883 # Verify that source group is not destination group 1884 if sys.argv[2] == sys.argv[4]: 1885 sys.exit('Source and destination groups are identical %s.'%sys.argv[2]) 1886 tid = move_task_to_a_group(sys.argv[2],sys.argv[3],sys.argv[4]) 1887 if len(tid) > edi_core.ID_LENGTH: 1888 # Error when the task sys.argv[3] is not found in sys.argv[2] 1889 sys.exit(tid) 1890 return 1891 1892 # Always 4 parameters - other parameters are ignored 1893 # Parameter 2 is position, find group 1894 # Figure out if the command is run in the tree 1895 #:figure_out_if_in_tree 1896 status = '' 1897 cwd = os.path.realpath(os.getcwd()) 1898 #loop_on_selected_databases 1899 z = zip(edi_core.selected, edi_core.selected_path) 1900 for d,path in z: 1901 edi_core.data_location = os.path.expanduser(path) 1902 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1903 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1904 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1905 1906 # check path from left 1907 real_tree_path = os.path.realpath(edi_core.data_location_tree) 1908 if real_tree_path == cwd[:len(real_tree_path)]: 1909 status = 'in tree' 1910 p_l = edi_core.data_location_tree.split('/')[-2:] 1911 break 1912 1913 if status == 'in tree': 1914 #:get_current_group_in_tree 1915 if cwd.split('/')[-1] == 'tree': 1916 group = 'root' 1917 else: 1918 group = cwd.split('/')[-1] 1919 #:get_position_from_argv2 1920 try: 1921 position = int(sys.argv[2]) 1922 except: 1923 sys.exit('%s is invalid position'%sys.argv[2]) 1924 #:find_task_at_position 1925 if position < 0: 1926 sys.exit('Position %d is invalid.'%position) 1927 group_tasks = os.listdir(generate_group_path(group)) 1928 order_id = baseconvert(position) 1929 tid = '' 1930 for t in group_tasks: 1931 # find exact match 1932 if order_id == t[:ORDER_ID_LENGTH]: 1933 tid = t[ORDER_ID_LENGTH:] 1934 if not tid: 1935 sys.exit('Position %d does not exist.'%position) 1936 sys.argv[2] = tid 1937 1938 #:tab1_find_task_in_selected_databases_and_setup_data_location 1939 if sys.argv[2] == 'root': 1940 #set_default_database 1941 z = dict(zip(edi_core.selected, edi_core.selected_path)) 1942 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 1943 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1944 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1945 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1946 if not os.path.exists(edi_core.data_location): 1947 sys.exit('%s is unreachable.'%edi_core.data_location) 1948 else: 1949 for path in edi_core.selected_path: 1950 edi_core.data_location = os.path.expanduser(path) 1951 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 1952 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 1953 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 1954 1955 if not os.path.exists(edi_core.data_location): 1956 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 1957 tasks = os.listdir(edi_core.data_location_tasks) 1958 if sys.argv[2] in tasks: 1959 break 1960 1961 # Verify parameters 1962 if not 'group' in locals(): 1963 sys.exit('Invalid parameters.') 1964 if not is_this_task_a_group(sys.argv[3]): 1965 sys.exit('%s is not a group.'%sys.argv[3]) 1966 # Verify that when tid is a group, tid is not parent to destination group (sys.argv[3]) 1967 if is_this_task_a_group(tid): 1968 tree_path = find_group_in_tree(sys.argv[3]) 1969 parent_path = tree_path.split(sys.argv[3])[0] 1970 if tid in parent_path: 1971 print tree_path 1972 sys.exit('%s is a parent group for %s'%(tid,sys.argv[3])) 1973 # Verify that group is not move on itself 1974 if tid == sys.argv[3]: 1975 sys.exit('Moving %s group on itself.'%tid) 1976 # Verify that source group is not destination group 1977 if group == sys.argv[3]: 1978 sys.exit('Source and destination groups are identical %s.'%group) 1979 move_task_to_a_group(group,tid,sys.argv[3]) 1980 1981 ## copy task to a group. option -E copy description to path, first line in description is filename 1982 # @ingroup EDI_CLI 1983 def copy_task(): 1984 # Verify parameters 1985 if len(sys.argv) < 4: 1986 sys.exit('Too little parameters.') 1987 # option 1988 if sys.argv[2] == '-E': 1989 # Verify parameters 1990 if len(sys.argv) < 5: 1991 sys.exit('Too little parameters.') 1992 option = '-E' 1993 sys.argv[2] = sys.argv[3] 1994 tid = sys.argv[3] 1995 else: 1996 option = '' 1997 tid = sys.argv[2] 1998 1999 # Figure out if the command is run in the tree 2000 #:figure_out_if_in_tree 2001 status = '' 2002 cwd = os.path.realpath(os.getcwd()) 2003 #loop_on_selected_databases 2004 z = zip(edi_core.selected, edi_core.selected_path) 2005 for d,path in z: 2006 edi_core.data_location = os.path.expanduser(path) 2007 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2008 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2009 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2010 2011 # check path from left 2012 real_tree_path = os.path.realpath(edi_core.data_location_tree) 2013 if real_tree_path == cwd[:len(real_tree_path)]: 2014 status = 'in tree' 2015 p_l = edi_core.data_location_tree.split('/')[-2:] 2016 break 2017 2018 #:find_task_sysargv2_in_selected_databases 2019 # the goal for this code is to reset status when a tid is an existing task 2020 # when parameter is taskid, it doesnt matter if cwd is in tree 2021 # find task in selected databases 2022 for path in edi_core.selected_path: 2023 data_location = os.path.expanduser(path) 2024 data_location_tasks = '%s/tasks'%data_location 2025 2026 if not os.path.exists(data_location): 2027 sys.exit('%s is unreachable.'%path) 2028 tasks = os.listdir(data_location_tasks) 2029 if sys.argv[2] in tasks: 2030 # found task, setup database below 2031 status = '' 2032 break 2033 2034 if status == 'in tree': 2035 #:get_current_group_in_tree 2036 if cwd.split('/')[-1] == 'tree': 2037 group = 'root' 2038 else: 2039 group = cwd.split('/')[-1] 2040 #:get_position_from_argv2 2041 try: 2042 position = int(sys.argv[2]) 2043 except: 2044 sys.exit('%s is invalid position'%sys.argv[2]) 2045 #:find_task_at_position 2046 if position < 0: 2047 sys.exit('Position %d is invalid.'%position) 2048 group_tasks = os.listdir(generate_group_path(group)) 2049 order_id = baseconvert(position) 2050 tid = '' 2051 for t in group_tasks: 2052 # find exact match 2053 if order_id == t[:ORDER_ID_LENGTH]: 2054 tid = t[ORDER_ID_LENGTH:] 2055 if not tid: 2056 sys.exit('Position %d does not exist.'%position) 2057 2058 if option == '-E': 2059 # Export task to a file 2060 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 2061 #:find_task_in_selected_databases_and_setup_data_location 2062 if tid == 'root': 2063 #set_default_database 2064 z = dict(zip(edi_core.selected, edi_core.selected_path)) 2065 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 2066 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2067 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2068 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2069 if not os.path.exists(edi_core.data_location): 2070 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 2071 elif tid != 'tree': 2072 for path in edi_core.selected_path: 2073 edi_core.data_location = os.path.expanduser(path) 2074 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2075 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2076 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2077 2078 if not os.path.exists(edi_core.data_location): 2079 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 2080 tasks = os.listdir(edi_core.data_location_tasks) 2081 if tid in tasks: 2082 break 2083 if not os.path.exists(sys.argv[4]): 2084 sys.exit('%s is unreachable.'%sys.argv[4]) 2085 2086 # Verify that task tid is in database 2087 tasks = os.listdir(edi_core.data_location_tasks) 2088 if not tid in tasks: 2089 sys.exit('%s not found.'%tid) 2090 2091 r = export_task_to_a_file(tid,sys.argv[4]) 2092 print 'Exported task to %s'%r 2093 else: 2094 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 2095 #:find_task_in_selected_databases_and_setup_data_location 2096 if tid == 'root': 2097 #set_default_database 2098 z = dict(zip(edi_core.selected, edi_core.selected_path)) 2099 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 2100 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2101 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2102 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2103 if not os.path.exists(edi_core.data_location): 2104 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 2105 elif tid != 'tree': 2106 for path in edi_core.selected_path: 2107 edi_core.data_location = os.path.expanduser(path) 2108 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2109 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2110 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2111 2112 if not os.path.exists(edi_core.data_location): 2113 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 2114 tasks = os.listdir(edi_core.data_location_tasks) 2115 if tid in tasks: 2116 break 2117 # Verify that task tid is not root 2118 if tid == 'root': 2119 sys.exit('root is invalid task') 2120 # Verify that task tid is in database 2121 tasks = os.listdir(edi_core.data_location_tasks) 2122 if not tid in tasks: 2123 sys.exit('%s not found.'%tid) 2124 2125 if not is_this_task_a_group(sys.argv[3]): 2126 sys.exit('%s is not a group.'%sys.argv[3]) 2127 if tid == sys.argv[3]: 2128 sys.exit('Source and destination are identical.') 2129 # Verify that when tid is a group, tid is not parent to destination group (sys.argv[3]) 2130 if is_this_task_a_group(tid): 2131 tree_path = find_group_in_tree(sys.argv[3]) 2132 parent_path = tree_path.split(sys.argv[3])[0] 2133 if tid in parent_path: 2134 print tree_path 2135 sys.exit('%s is a parent group for %s'%(tid,sys.argv[3])) 2136 print copy_task_to_a_group(tid,sys.argv[3]) 2137 2138 ## add a reference in group 2139 # @ingroup EDI_CLI 2140 def link_task(): 2141 if len(sys.argv) < 4: 2142 sys.exit('Too little parameters.') 2143 # Figure out if the command is run in the tree 2144 #:figure_out_if_in_tree 2145 status = '' 2146 cwd = os.path.realpath(os.getcwd()) 2147 #loop_on_selected_databases 2148 z = zip(edi_core.selected, edi_core.selected_path) 2149 for d,path in z: 2150 edi_core.data_location = os.path.expanduser(path) 2151 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2152 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2153 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2154 2155 # check path from left 2156 real_tree_path = os.path.realpath(edi_core.data_location_tree) 2157 if real_tree_path == cwd[:len(real_tree_path)]: 2158 status = 'in tree' 2159 p_l = edi_core.data_location_tree.split('/')[-2:] 2160 break 2161 2162 #:find_task_sysargv2_in_selected_databases 2163 # the goal for this code is to reset status when a tid is an existing task 2164 # when parameter is taskid, it doesnt matter if cwd is in tree 2165 # find task in selected databases 2166 for path in edi_core.selected_path: 2167 data_location = os.path.expanduser(path) 2168 data_location_tasks = '%s/tasks'%data_location 2169 2170 if not os.path.exists(data_location): 2171 sys.exit('%s is unreachable.'%path) 2172 tasks = os.listdir(data_location_tasks) 2173 if sys.argv[2] in tasks: 2174 # found task, setup database below 2175 status = '' 2176 break 2177 2178 if status == 'in tree': 2179 #:get_current_group_in_tree 2180 if cwd.split('/')[-1] == 'tree': 2181 group = 'root' 2182 else: 2183 group = cwd.split('/')[-1] 2184 #:get_position_from_argv2 2185 try: 2186 position = int(sys.argv[2]) 2187 except: 2188 sys.exit('%s is invalid position'%sys.argv[2]) 2189 #:find_task_at_position 2190 if position < 0: 2191 sys.exit('Position %d is invalid.'%position) 2192 group_tasks = os.listdir(generate_group_path(group)) 2193 order_id = baseconvert(position) 2194 tid = '' 2195 for t in group_tasks: 2196 # find exact match 2197 if order_id == t[:ORDER_ID_LENGTH]: 2198 tid = t[ORDER_ID_LENGTH:] 2199 if not tid: 2200 sys.exit('Position %d does not exist.'%position) 2201 sys.argv[2] = tid 2202 2203 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 2204 #:tab1_find_task_in_selected_databases_and_setup_data_location 2205 if sys.argv[2] == 'root': 2206 #set_default_database 2207 z = dict(zip(edi_core.selected, edi_core.selected_path)) 2208 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 2209 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2210 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2211 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2212 if not os.path.exists(edi_core.data_location): 2213 sys.exit('%s is unreachable.'%edi_core.data_location) 2214 else: 2215 for path in edi_core.selected_path: 2216 edi_core.data_location = os.path.expanduser(path) 2217 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2218 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2219 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2220 2221 if not os.path.exists(edi_core.data_location): 2222 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 2223 tasks = os.listdir(edi_core.data_location_tasks) 2224 if sys.argv[2] in tasks: 2225 break 2226 # Verify that task tid is in database 2227 tasks = os.listdir(edi_core.data_location_tasks) 2228 if not sys.argv[2] in tasks: 2229 sys.exit('%s not found.'%sys.argv[2]) 2230 # Verify parameters 2231 if not is_this_task_a_group(sys.argv[3]): 2232 sys.exit('%s is not a group.'%sys.argv[3]) 2233 if sys.argv[3] == find_group_containing_task(sys.argv[2]): 2234 sys.exit('Task %s is already in group %s.'%(sys.argv[2],sys.argv[3])) 2235 add_task_reference_to_a_group(sys.argv[2],sys.argv[3]) 2236 2237 ## print task filesystem path 2238 # @ingroup EDI_CLI 2239 def get_task_path(): 2240 if len(sys.argv) < 3: 2241 sys.exit('Too little parameters.') 2242 # Figure out if the command is run in the tree 2243 #:figure_out_if_in_tree 2244 status = '' 2245 cwd = os.path.realpath(os.getcwd()) 2246 #loop_on_selected_databases 2247 z = zip(edi_core.selected, edi_core.selected_path) 2248 for d,path in z: 2249 edi_core.data_location = os.path.expanduser(path) 2250 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2251 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2252 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2253 2254 # check path from left 2255 real_tree_path = os.path.realpath(edi_core.data_location_tree) 2256 if real_tree_path == cwd[:len(real_tree_path)]: 2257 status = 'in tree' 2258 p_l = edi_core.data_location_tree.split('/')[-2:] 2259 break 2260 2261 #:find_task_sysargv2_in_selected_databases 2262 # the goal for this code is to reset status when a tid is an existing task 2263 # when parameter is taskid, it doesnt matter if cwd is in tree 2264 # find task in selected databases 2265 for path in edi_core.selected_path: 2266 data_location = os.path.expanduser(path) 2267 data_location_tasks = '%s/tasks'%data_location 2268 2269 if not os.path.exists(data_location): 2270 sys.exit('%s is unreachable.'%path) 2271 tasks = os.listdir(data_location_tasks) 2272 if sys.argv[2] in tasks: 2273 # found task, setup database below 2274 status = '' 2275 break 2276 2277 if status == 'in tree': 2278 #:get_current_group_in_tree 2279 if cwd.split('/')[-1] == 'tree': 2280 group = 'root' 2281 else: 2282 group = cwd.split('/')[-1] 2283 #:get_position_from_argv2 2284 try: 2285 position = int(sys.argv[2]) 2286 except: 2287 sys.exit('%s is invalid position'%sys.argv[2]) 2288 #:find_task_at_position 2289 if position < 0: 2290 sys.exit('Position %d is invalid.'%position) 2291 group_tasks = os.listdir(generate_group_path(group)) 2292 order_id = baseconvert(position) 2293 tid = '' 2294 for t in group_tasks: 2295 # find exact match 2296 if order_id == t[:ORDER_ID_LENGTH]: 2297 tid = t[ORDER_ID_LENGTH:] 2298 if not tid: 2299 sys.exit('Position %d does not exist.'%position) 2300 sys.argv[2] = tid 2301 2302 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 2303 #:tab1_find_task_in_selected_databases_and_setup_data_location 2304 if sys.argv[2] == 'root': 2305 #set_default_database 2306 z = dict(zip(edi_core.selected, edi_core.selected_path)) 2307 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 2308 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2309 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2310 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2311 if not os.path.exists(edi_core.data_location): 2312 sys.exit('%s is unreachable.'%edi_core.data_location) 2313 else: 2314 for path in edi_core.selected_path: 2315 edi_core.data_location = os.path.expanduser(path) 2316 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2317 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2318 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2319 2320 if not os.path.exists(edi_core.data_location): 2321 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 2322 tasks = os.listdir(edi_core.data_location_tasks) 2323 if sys.argv[2] in tasks: 2324 break 2325 # Verify that task tid is in database 2326 tasks = os.listdir(edi_core.data_location_tasks) 2327 if not sys.argv[2] in tasks: 2328 sys.exit('%s not found.'%sys.argv[2]) 2329 print generate_task_path(sys.argv[2]) 2330 2331 ## print tree path 2332 # @ingroup EDI_CLI 2333 def tree(): 2334 print edi_core.data_location_tree 2335 2336 DATABASE_NAME = 0 2337 DATABASE_PATH = 1 2338 print 2339 print 'trees' 2340 for d in edi_core.databases: 2341 print '%s - %s/tree' % (d[DATABASE_NAME], d[DATABASE_PATH]) 2342 2343 ## enable/disable (set) status filter 2344 # @ingroup EDI_CLI 2345 def set_status_filter(): 2346 if len(sys.argv)<3: 2347 print edi_core.status_filters_d 2348 else: 2349 if len(sys.argv)<4: 2350 sys.exit('Too little parameters.') 2351 status_name = sys.argv[2] 2352 state = sys.argv[3] 2353 2354 # verify parameters 2355 task_status = [i.strip().lower() for i in edi_core.TASK_STATUS] 2356 if not status_name.lower() in task_status: 2357 sys.exit('%s is invalid status_filter. Possible status filter are %s.'%(status_name,','.join(task_status))) 2358 if not state in edi_core.STATUS_FILTER_STATES: 2359 sys.exit('%s is invalid state. Possible states are %s.'%(state,','.join(edi_core.STATUS_FILTER_STATES))) 2360 2361 #:define load_ini_file 2362 f = open(os.path.expanduser('~/.easydoneit.ini')) 2363 # load config from user home 2364 config = ConfigParser.ConfigParser() 2365 config.readfp(f) 2366 f.close() 2367 #:end 2368 config.set('filters',status_name,state) 2369 2370 #:define save_ini_file 2371 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 2372 config.write(f) 2373 f.close() 2374 #:end 2375 2376 ## set path for database 2377 # @ingroup EDI_CLI 2378 def data(): 2379 if len(sys.argv)<3: 2380 print 'Selected data_location' 2381 print edi_core.data_location 2382 DATABASE_NAME = 0 2383 DATABASE_PATH = 1 2384 print 2385 print 'Available databases' 2386 for d in edi_core.databases: 2387 print '%s - %s' % (d[DATABASE_NAME], d[DATABASE_PATH]) 2388 else: 2389 if len(sys.argv)<4: 2390 sys.exit('Too little parameters.') 2391 #:load_ini_file 2392 f = open(os.path.expanduser('~/.easydoneit.ini')) 2393 # load config from user home 2394 config = ConfigParser.ConfigParser() 2395 config.readfp(f) 2396 f.close() 2397 if sys.argv[2] == '-d': 2398 name = sys.argv[3] 2399 try: 2400 path = config.get('data',name) 2401 except: 2402 sys.exit('%s is invalid database name.'%name) 2403 if name == 'location': 2404 sys.exit('%s is invalid database name.'%name) 2405 2406 # remove database from selected configuration and check that at least one database is selected 2407 selected = config.get('locations','selected') 2408 selected_l = selected.split(',') 2409 new_selected_l = [] 2410 for i in selected_l: 2411 if not name in i: 2412 new_selected_l.append(i) 2413 if not new_selected_l: 2414 sys.exit('Select more databases before deleting %s'%name) 2415 new_selected = ','.join(new_selected_l) 2416 config.set('locations','selected',new_selected) 2417 2418 # delete database folder from file system 2419 # delete database from config file 2420 2421 # delete database folder from file system 2422 if os.path.exists(path): 2423 shutil.rmtree(path) 2424 # delete database from config file - data, selected and default_add_in 2425 config.remove_option('data',name) 2426 2427 default = config.get('locations','default_add_in') 2428 if name == default: 2429 default = new_selected_l[0] 2430 config.set('locations','default_add_in',default) 2431 2432 #save_ini_file 2433 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 2434 config.write(f) 2435 f.close() 2436 #end 2437 2438 print 'Deleted database %s - %s' % (name,path) 2439 print '\nSelected databases' 2440 print new_selected 2441 print '\nDefault for new tasks' 2442 print default 2443 return 2444 2445 name = sys.argv[2] 2446 if name == 'location': 2447 sys.exit('%s is invalid database name.'%name) 2448 path = os.path.expanduser(sys.argv[3]) 2449 2450 config.set('data',name,path) 2451 #:save_ini_file 2452 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 2453 config.write(f) 2454 f.close() 2455 edi_core.data_location = path 2456 init() 2457 2458 ## generate html for tasks 2459 # @ingroup EDI_CLI 2460 def html_cli(): 2461 # generate html header and content 2462 edi_core.list_option = 'html' 2463 2464 html_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2465 <html> 2466 <head> 2467 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 2468 <title>Tasks</title> 2469 <style type="text/css"> 2470 .subject {text-align: left} 2471 .plannedStartDateTime {text-align: right} 2472 .priority {text-align: right} 2473 .inactive {color: #5E5E5E} 2474 .late {color: #A020F0} 2475 .active {color: #000000} 2476 .duesoon {color: #FF8000} 2477 .overdue {color: #FF0000} 2478 .completed {color: #037700} 2479 2480 body { 2481 color: #333; 2482 background-color: white; 2483 font: 11px verdana, arial, helvetica, sans-serif; 2484 } 2485 2486 /* Styles for the title and table caption */ 2487 h1, caption { 2488 text-align: center; 2489 font-size: 18px; 2490 font-weight: 900; 2491 color: #778; 2492 } 2493 2494 /* Styles for the whole table */ 2495 #table { 2496 border-collapse: collapse; 2497 border: 2px solid #ebedff; 2498 margin: 10px; 2499 padding: 0; 2500 } 2501 2502 /* Styles for the header row */ 2503 .header { 2504 font: bold 12px/14px verdana, arial, helvetica, sans-serif; 2505 color: #07a; 2506 background-color: #ebedff; 2507 } 2508 2509 /* Mark the column that is sorted on */ 2510 #sorted { 2511 text-decoration: underline; 2512 } 2513 2514 /* Styles for a specific column */ 2515 .subject { 2516 font-weight: bold; 2517 } 2518 2519 /* Styles for regular table cells */ 2520 td { 2521 padding: 5px; 2522 border: 2px solid #ebedff; 2523 } 2524 2525 /* Styles for table header cells */ 2526 th { 2527 padding: 5px; 2528 border: 2px solid #ebedff; 2529 } 2530 2531 </style> 2532 </head> 2533 <body> 2534 <h1>Tasks</h1> 2535 <table border="1" id="table"> 2536 <thead> 2537 <tr class="header"> 2538 <th class="subject" scope="col">Subject</th> 2539 <th class="description" scope="col">Description</th> 2540 </tr> 2541 </thead> 2542 <tbody>''' 2543 2544 html_footer = ''' </tbody> 2545 </table> 2546 </body> 2547 </html>''' 2548 2549 print html_header 2550 ls_generic() 2551 print html_footer 2552 2553 ## list selected databases or set selected databases 2554 # @ingroup EDI_CLI 2555 def selected_cli(): 2556 if len(sys.argv)>3: 2557 sys.exit('Too many parameters.') 2558 if len(sys.argv)<3: 2559 print 'Selected databases' 2560 print ','.join(edi_core.selected) 2561 print 2562 z = zip(edi_core.selected, edi_core.selected_path) 2563 for d,p in z: 2564 print '%s - %s' % (d,p) 2565 if len(sys.argv)==3: 2566 #:load_ini_file 2567 f = open(os.path.expanduser('~/.easydoneit.ini')) 2568 # load config from user home 2569 config = ConfigParser.ConfigParser() 2570 config.readfp(f) 2571 f.close() 2572 # Verify parameter 2573 selected = sys.argv[2].split(',') 2574 if 'location' in selected: 2575 sys.exit('location is invalid database name.') 2576 for d in selected: 2577 if not d in dict(edi_core.databases).keys(): 2578 sys.exit('%s is invalid database name.'%d) 2579 if not edi_core.default_add_in in selected: 2580 # default becomes first selected database 2581 print 'Default database %s is not selected'%edi_core.default_add_in 2582 print '%s is now default'%sys.argv[2].split(',')[0] 2583 config.set('locations','default_add_in',sys.argv[2].split(',')[0]) 2584 config.set('locations','selected',sys.argv[2]) 2585 #:save_ini_file 2586 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 2587 config.write(f) 2588 f.close() 2589 2590 ## set default database 2591 # @ingroup EDI_CLI 2592 def default_cli(): 2593 if len(sys.argv)>3: 2594 sys.exit('Too many parameters.') 2595 if len(sys.argv)<3: 2596 print 'Default for new tasks' 2597 print edi_core.default_add_in 2598 z = dict(zip(edi_core.selected, edi_core.selected_path)) 2599 print z[edi_core.default_add_in] 2600 if len(sys.argv)==3: 2601 # Verify parameter 2602 if not sys.argv[2] in edi_core.selected: 2603 sys.exit('%s is not selected'%sys.argv[2]) 2604 #:load_ini_file 2605 f = open(os.path.expanduser('~/.easydoneit.ini')) 2606 # load config from user home 2607 config = ConfigParser.ConfigParser() 2608 config.readfp(f) 2609 f.close() 2610 config.set('locations','default_add_in',sys.argv[2]) 2611 #:save_ini_file 2612 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 2613 config.write(f) 2614 f.close() 2615 2616 2617 ## copy task or group to database/group 2618 # @ingroup EDI_CLI 2619 def cpb_cli(): 2620 if len(sys.argv) < 5: 2621 sys.exit('Too little parameters.') 2622 # Figure out if the command is run in the tree 2623 #:figure_out_if_in_tree 2624 status = '' 2625 cwd = os.path.realpath(os.getcwd()) 2626 #loop_on_selected_databases 2627 z = zip(edi_core.selected, edi_core.selected_path) 2628 for d,path in z: 2629 edi_core.data_location = os.path.expanduser(path) 2630 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2631 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2632 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2633 2634 # check path from left 2635 real_tree_path = os.path.realpath(edi_core.data_location_tree) 2636 if real_tree_path == cwd[:len(real_tree_path)]: 2637 status = 'in tree' 2638 p_l = edi_core.data_location_tree.split('/')[-2:] 2639 break 2640 2641 #:find_task_sysargv2_in_selected_databases 2642 # the goal for this code is to reset status when a tid is an existing task 2643 # when parameter is taskid, it doesnt matter if cwd is in tree 2644 # find task in selected databases 2645 for path in edi_core.selected_path: 2646 data_location = os.path.expanduser(path) 2647 data_location_tasks = '%s/tasks'%data_location 2648 2649 if not os.path.exists(data_location): 2650 sys.exit('%s is unreachable.'%path) 2651 tasks = os.listdir(data_location_tasks) 2652 if sys.argv[2] in tasks: 2653 # found task, setup database below 2654 status = '' 2655 break 2656 2657 if status == 'in tree': 2658 #:get_current_group_in_tree 2659 if cwd.split('/')[-1] == 'tree': 2660 group = 'root' 2661 else: 2662 group = cwd.split('/')[-1] 2663 #:get_position_from_argv2 2664 try: 2665 position = int(sys.argv[2]) 2666 except: 2667 sys.exit('%s is invalid position'%sys.argv[2]) 2668 #:find_task_at_position 2669 if position < 0: 2670 sys.exit('Position %d is invalid.'%position) 2671 group_tasks = os.listdir(generate_group_path(group)) 2672 order_id = baseconvert(position) 2673 tid = '' 2674 for t in group_tasks: 2675 # find exact match 2676 if order_id == t[:ORDER_ID_LENGTH]: 2677 tid = t[ORDER_ID_LENGTH:] 2678 if not tid: 2679 sys.exit('Position %d does not exist.'%position) 2680 sys.argv[2] = tid 2681 2682 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 2683 #:tab1_find_task_in_selected_databases_and_setup_data_location 2684 if sys.argv[2] == 'root': 2685 #set_default_database 2686 z = dict(zip(edi_core.selected, edi_core.selected_path)) 2687 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 2688 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2689 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2690 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2691 if not os.path.exists(edi_core.data_location): 2692 sys.exit('%s is unreachable.'%edi_core.data_location) 2693 else: 2694 for path in edi_core.selected_path: 2695 edi_core.data_location = os.path.expanduser(path) 2696 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2697 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2698 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2699 2700 if not os.path.exists(edi_core.data_location): 2701 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 2702 tasks = os.listdir(edi_core.data_location_tasks) 2703 if sys.argv[2] in tasks: 2704 break 2705 # Verify parameters 2706 if not sys.argv[3] in edi_core.selected: 2707 sys.exit('%s database is not selected.'%sys.argv[3]) 2708 # Verify that task tid is not root 2709 if sys.argv[2] == 'root': 2710 sys.exit('root is invalid task') 2711 # Verify that task tid is in database 2712 tasks = os.listdir(edi_core.data_location_tasks) 2713 if not sys.argv[2] in tasks: 2714 sys.exit('%s not found.'%sys.argv[2]) 2715 z = dict(zip(edi_core.selected, edi_core.selected_path)) 2716 data_location = os.path.expanduser(z[sys.argv[3]]) 2717 data_location_groups = '%s/groups'%data_location 2718 if not os.path.exists('%s/%s'%(data_location_groups,sys.argv[4])): 2719 sys.exit('Missing destination group %s'%sys.argv[4]) 2720 print copy_task_to_database(sys.argv[2],sys.argv[3],sys.argv[4]) 2721 2722 ## move task or group to database 2723 # @ingroup EDI_CLI 2724 # 2 group<br> 2725 # 3 task|group<br> 2726 # 4 location<br> 2727 # 5 group 2728 def mvb_cli(): 2729 if len(sys.argv) < 5: 2730 sys.exit('Too little parameters.') 2731 # Figure out if the command is run in the tree 2732 #:figure_out_if_in_tree 2733 status = '' 2734 cwd = os.path.realpath(os.getcwd()) 2735 #loop_on_selected_databases 2736 z = zip(edi_core.selected, edi_core.selected_path) 2737 for d,path in z: 2738 edi_core.data_location = os.path.expanduser(path) 2739 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2740 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2741 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2742 2743 # check path from left 2744 real_tree_path = os.path.realpath(edi_core.data_location_tree) 2745 if real_tree_path == cwd[:len(real_tree_path)]: 2746 status = 'in tree' 2747 p_l = edi_core.data_location_tree.split('/')[-2:] 2748 break 2749 2750 #:find_task_sysargv2_in_selected_databases 2751 # the goal for this code is to reset status when a tid is an existing task 2752 # when parameter is taskid, it doesnt matter if cwd is in tree 2753 # find task in selected databases 2754 for path in edi_core.selected_path: 2755 data_location = os.path.expanduser(path) 2756 data_location_tasks = '%s/tasks'%data_location 2757 2758 if not os.path.exists(data_location): 2759 sys.exit('%s is unreachable.'%path) 2760 tasks = os.listdir(data_location_tasks) 2761 if sys.argv[2] in tasks: 2762 # found task, setup database below 2763 status = '' 2764 break 2765 2766 if status == 'in tree': 2767 #:get_current_group_in_tree 2768 if cwd.split('/')[-1] == 'tree': 2769 group = 'root' 2770 else: 2771 group = cwd.split('/')[-1] 2772 #:get_position_from_argv2 2773 try: 2774 position = int(sys.argv[2]) 2775 except: 2776 sys.exit('%s is invalid position'%sys.argv[2]) 2777 #:find_task_at_position 2778 if position < 0: 2779 sys.exit('Position %d is invalid.'%position) 2780 group_tasks = os.listdir(generate_group_path(group)) 2781 order_id = baseconvert(position) 2782 tid = '' 2783 for t in group_tasks: 2784 # find exact match 2785 if order_id == t[:ORDER_ID_LENGTH]: 2786 tid = t[ORDER_ID_LENGTH:] 2787 if not tid: 2788 sys.exit('Position %d does not exist.'%position) 2789 sys.argv[2] = tid 2790 database = sys.argv[3] 2791 destination_group = sys.argv[4] 2792 else: 2793 if len(sys.argv) < 6: 2794 sys.exit('Too little parameters.') 2795 group = sys.argv[2] 2796 tid = sys.argv[3] 2797 database = sys.argv[4] 2798 destination_group = sys.argv[5] 2799 2800 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 2801 #:tab1_find_task_in_selected_databases_and_setup_data_location 2802 if sys.argv[2] == 'root': 2803 #set_default_database 2804 z = dict(zip(edi_core.selected, edi_core.selected_path)) 2805 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 2806 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2807 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2808 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2809 if not os.path.exists(edi_core.data_location): 2810 sys.exit('%s is unreachable.'%edi_core.data_location) 2811 else: 2812 for path in edi_core.selected_path: 2813 edi_core.data_location = os.path.expanduser(path) 2814 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2815 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2816 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2817 2818 if not os.path.exists(edi_core.data_location): 2819 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 2820 tasks = os.listdir(edi_core.data_location_tasks) 2821 if sys.argv[2] in tasks: 2822 break 2823 # Verify parameters 2824 if not database in edi_core.selected: 2825 sys.exit('%s database is not selected.'%database) 2826 # Verify that task tid is not root 2827 if tid == 'root': 2828 sys.exit('root is invalid task') 2829 if not is_this_task_a_group(group): 2830 sys.exit('%s is not a group.'%group) 2831 # Verify that task tid is in database 2832 tasks = os.listdir(edi_core.data_location_tasks) 2833 if not tid in tasks: 2834 sys.exit('%s not found.'%tid) 2835 z = dict(zip(edi_core.selected, edi_core.selected_path)) 2836 data_location = os.path.expanduser(z[database]) 2837 data_location_groups = '%s/groups'%data_location 2838 if not os.path.exists('%s/%s'%(data_location_groups,destination_group)): 2839 sys.exit('Missing destination group %s'%destination_group) 2840 print move_task_to_a_group_to_database(group,tid,database,destination_group) 2841 2842 ## set or show foreground color 2843 # @ingroup EDI_CLI 2844 def fc_cli(): 2845 if len(sys.argv) < 3: 2846 sys.exit('Too little parameters.') 2847 # Figure out if the command is run in the tree 2848 #:figure_out_if_in_tree 2849 status = '' 2850 cwd = os.path.realpath(os.getcwd()) 2851 #loop_on_selected_databases 2852 z = zip(edi_core.selected, edi_core.selected_path) 2853 for d,path in z: 2854 edi_core.data_location = os.path.expanduser(path) 2855 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2856 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2857 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2858 2859 # check path from left 2860 real_tree_path = os.path.realpath(edi_core.data_location_tree) 2861 if real_tree_path == cwd[:len(real_tree_path)]: 2862 status = 'in tree' 2863 p_l = edi_core.data_location_tree.split('/')[-2:] 2864 break 2865 2866 #:find_task_sysargv2_in_selected_databases 2867 # the goal for this code is to reset status when a tid is an existing task 2868 # when parameter is taskid, it doesnt matter if cwd is in tree 2869 # find task in selected databases 2870 for path in edi_core.selected_path: 2871 data_location = os.path.expanduser(path) 2872 data_location_tasks = '%s/tasks'%data_location 2873 2874 if not os.path.exists(data_location): 2875 sys.exit('%s is unreachable.'%path) 2876 tasks = os.listdir(data_location_tasks) 2877 if sys.argv[2] in tasks: 2878 # found task, setup database below 2879 status = '' 2880 break 2881 2882 if status == 'in tree': 2883 #:get_current_group_in_tree 2884 if cwd.split('/')[-1] == 'tree': 2885 group = 'root' 2886 else: 2887 group = cwd.split('/')[-1] 2888 #:get_position_from_argv2 2889 try: 2890 position = int(sys.argv[2]) 2891 except: 2892 sys.exit('%s is invalid position'%sys.argv[2]) 2893 #:find_task_at_position 2894 if position < 0: 2895 sys.exit('Position %d is invalid.'%position) 2896 group_tasks = os.listdir(generate_group_path(group)) 2897 order_id = baseconvert(position) 2898 tid = '' 2899 for t in group_tasks: 2900 # find exact match 2901 if order_id == t[:ORDER_ID_LENGTH]: 2902 tid = t[ORDER_ID_LENGTH:] 2903 if not tid: 2904 sys.exit('Position %d does not exist.'%position) 2905 sys.argv[2] = tid 2906 2907 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 2908 #:tab1_find_task_in_selected_databases_and_setup_data_location 2909 if sys.argv[2] == 'root': 2910 #set_default_database 2911 z = dict(zip(edi_core.selected, edi_core.selected_path)) 2912 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 2913 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2914 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2915 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2916 if not os.path.exists(edi_core.data_location): 2917 sys.exit('%s is unreachable.'%edi_core.data_location) 2918 else: 2919 for path in edi_core.selected_path: 2920 edi_core.data_location = os.path.expanduser(path) 2921 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2922 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2923 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2924 2925 if not os.path.exists(edi_core.data_location): 2926 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 2927 tasks = os.listdir(edi_core.data_location_tasks) 2928 if sys.argv[2] in tasks: 2929 break 2930 # Verify that task tid is in database 2931 tasks = os.listdir(edi_core.data_location_tasks) 2932 if not sys.argv[2] in tasks: 2933 sys.exit('%s not found.'%sys.argv[2]) 2934 if len(sys.argv)<4: 2935 color = get_forground_color(sys.argv[2]) 2936 print '%d,%d,%d,%d' % (color[0],color[1],color[2],color[3]) 2937 if len(sys.argv)==4: 2938 set_forground_color(sys.argv[2],sys.argv[3]) 2939 2940 ## set or show background color 2941 # @ingroup EDI_CLI 2942 def bc_cli(): 2943 if len(sys.argv) < 3: 2944 sys.exit('Too little parameters.') 2945 # Figure out if the command is run in the tree 2946 #:figure_out_if_in_tree 2947 status = '' 2948 cwd = os.path.realpath(os.getcwd()) 2949 #loop_on_selected_databases 2950 z = zip(edi_core.selected, edi_core.selected_path) 2951 for d,path in z: 2952 edi_core.data_location = os.path.expanduser(path) 2953 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 2954 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 2955 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 2956 2957 # check path from left 2958 real_tree_path = os.path.realpath(edi_core.data_location_tree) 2959 if real_tree_path == cwd[:len(real_tree_path)]: 2960 status = 'in tree' 2961 p_l = edi_core.data_location_tree.split('/')[-2:] 2962 break 2963 2964 #:find_task_sysargv2_in_selected_databases 2965 # the goal for this code is to reset status when a tid is an existing task 2966 # when parameter is taskid, it doesnt matter if cwd is in tree 2967 # find task in selected databases 2968 for path in edi_core.selected_path: 2969 data_location = os.path.expanduser(path) 2970 data_location_tasks = '%s/tasks'%data_location 2971 2972 if not os.path.exists(data_location): 2973 sys.exit('%s is unreachable.'%path) 2974 tasks = os.listdir(data_location_tasks) 2975 if sys.argv[2] in tasks: 2976 # found task, setup database below 2977 status = '' 2978 break 2979 2980 if status == 'in tree': 2981 #:get_current_group_in_tree 2982 if cwd.split('/')[-1] == 'tree': 2983 group = 'root' 2984 else: 2985 group = cwd.split('/')[-1] 2986 #:get_position_from_argv2 2987 try: 2988 position = int(sys.argv[2]) 2989 except: 2990 sys.exit('%s is invalid position'%sys.argv[2]) 2991 #:find_task_at_position 2992 if position < 0: 2993 sys.exit('Position %d is invalid.'%position) 2994 group_tasks = os.listdir(generate_group_path(group)) 2995 order_id = baseconvert(position) 2996 tid = '' 2997 for t in group_tasks: 2998 # find exact match 2999 if order_id == t[:ORDER_ID_LENGTH]: 3000 tid = t[ORDER_ID_LENGTH:] 3001 if not tid: 3002 sys.exit('Position %d does not exist.'%position) 3003 sys.argv[2] = tid 3004 3005 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 3006 #:tab1_find_task_in_selected_databases_and_setup_data_location 3007 if sys.argv[2] == 'root': 3008 #set_default_database 3009 z = dict(zip(edi_core.selected, edi_core.selected_path)) 3010 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 3011 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3012 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3013 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3014 if not os.path.exists(edi_core.data_location): 3015 sys.exit('%s is unreachable.'%edi_core.data_location) 3016 else: 3017 for path in edi_core.selected_path: 3018 edi_core.data_location = os.path.expanduser(path) 3019 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3020 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3021 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3022 3023 if not os.path.exists(edi_core.data_location): 3024 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 3025 tasks = os.listdir(edi_core.data_location_tasks) 3026 if sys.argv[2] in tasks: 3027 break 3028 # Verify that task tid is in database 3029 tasks = os.listdir(edi_core.data_location_tasks) 3030 if not sys.argv[2] in tasks: 3031 sys.exit('%s not found.'%sys.argv[2]) 3032 if len(sys.argv)<4: 3033 color = get_background_color(sys.argv[2]) 3034 print '%d,%d,%d,%d' % (color[0],color[1],color[2],color[3]) 3035 if len(sys.argv)==4: 3036 set_background_color(sys.argv[2],sys.argv[3]) 3037 3038 ## Create database folder and set path in .easydoneit.ini 3039 # @ingroup EDI_CLI 3040 def createDatabase_cli(): 3041 if len(sys.argv) == 4: 3042 name = sys.argv[2] 3043 path = os.path.expanduser(sys.argv[3]) 3044 if name == 'location': 3045 sys.exit('%s is invalid database name.'%name) 3046 if (not os.path.exists(os.path.dirname(path))) and (os.path.dirname(path)): 3047 # os.path.dirname(path) -- to be able to create a database in current directory 3048 sys.exit('%s is unreachable.'%os.path.dirname(path)) 3049 #:load_ini_file 3050 f = open(os.path.expanduser('~/.easydoneit.ini')) 3051 # load config from user home 3052 config = ConfigParser.ConfigParser() 3053 config.readfp(f) 3054 f.close() 3055 config.set('data',name,path) 3056 #:save_ini_file 3057 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 3058 config.write(f) 3059 f.close() 3060 edi_core.data_location = path 3061 init() 3062 else: 3063 sys.exit('Too little or too many parameters. This command takes 2 parameters: databasename path_to_new_database.') 3064 3065 ## choose or show where to add new tasks 3066 # @ingroup EDI_CLI 3067 def topbot_cli(): 3068 if len(sys.argv)<3: 3069 print 'Add new tasks' 3070 print '%s of group' % edi_core.add_top_or_bottom 3071 else: 3072 if (sys.argv[2]!='bottom') and (sys.argv[2] != 'top'): 3073 sys.exit('%s is invalid parameter. Possible values are "top" or "bottom".'%sys.argv[2]) 3074 #:load_ini_file 3075 f = open(os.path.expanduser('~/.easydoneit.ini')) 3076 # load config from user home 3077 config = ConfigParser.ConfigParser() 3078 config.readfp(f) 3079 f.close() 3080 config.set('locations','add_top_or_bottom',sys.argv[2]) 3081 #:save_ini_file 3082 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 3083 config.write(f) 3084 f.close() 3085 3086 ## print group in md format 3087 # @ingroup EDI_CLI 3088 def in_cli(): 3089 edi_core.list_option = 'md' 3090 3091 option = '' 3092 if len(sys.argv) > 2: 3093 if sys.argv[2] == '-A': 3094 # option to create agenda is set 3095 option = 'create agenda' 3096 del sys.argv[2] 3097 3098 # Figure out if the command is run in the tree 3099 #:figure_out_if_in_tree 3100 status = '' 3101 cwd = os.path.realpath(os.getcwd()) 3102 #loop_on_selected_databases 3103 z = zip(edi_core.selected, edi_core.selected_path) 3104 for d,path in z: 3105 edi_core.data_location = os.path.expanduser(path) 3106 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3107 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3108 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3109 3110 # check path from left 3111 real_tree_path = os.path.realpath(edi_core.data_location_tree) 3112 if real_tree_path == cwd[:len(real_tree_path)]: 3113 status = 'in tree' 3114 p_l = edi_core.data_location_tree.split('/')[-2:] 3115 break 3116 3117 if len(sys.argv) == 2: 3118 # no parameter - just command 3119 # select current group when in tree 3120 if status == 'in tree': 3121 #get_current_group_in_tree 3122 if cwd.split('/')[-1] == 'tree': 3123 group = 'root' 3124 else: 3125 group = cwd.split('/')[-1] 3126 #end 3127 3128 task_attributes = list_group(group) 3129 if group == 'root': 3130 # for root, first task is the title in the md document 3131 task_attributes[0]['head'] = 'head group' 3132 if option == 'create agenda': 3133 # Generate agenda 3134 for t in task_attributes[1:]: 3135 if t['head'] != 'empty line': 3136 edi_core.agenda.append('%3d - %s %s'%(t['position'],t['group'],t['title'])) 3137 print_list(task_attributes) 3138 return 3139 else: 3140 # default group 3141 group = 'root' 3142 sys.argv.append(group) 3143 # change status because there is no position parameter, no need to search for tid at given position 3144 status = '' 3145 3146 #:find_task_sysargv2_in_selected_databases 3147 # the goal for this code is to reset status when a tid is an existing task 3148 # when parameter is taskid, it doesnt matter if cwd is in tree 3149 # find task in selected databases 3150 for path in edi_core.selected_path: 3151 data_location = os.path.expanduser(path) 3152 data_location_tasks = '%s/tasks'%data_location 3153 3154 if not os.path.exists(data_location): 3155 sys.exit('%s is unreachable.'%path) 3156 tasks = os.listdir(data_location_tasks) 3157 if sys.argv[2] in tasks: 3158 # found task, setup database below 3159 status = '' 3160 break 3161 3162 if status == 'in tree': 3163 #:get_current_group_in_tree 3164 if cwd.split('/')[-1] == 'tree': 3165 group = 'root' 3166 else: 3167 group = cwd.split('/')[-1] 3168 #:get_position_from_argv2 3169 try: 3170 position = int(sys.argv[2]) 3171 except: 3172 sys.exit('%s is invalid position'%sys.argv[2]) 3173 #:find_task_at_position 3174 if position < 0: 3175 sys.exit('Position %d is invalid.'%position) 3176 group_tasks = os.listdir(generate_group_path(group)) 3177 order_id = baseconvert(position) 3178 tid = '' 3179 for t in group_tasks: 3180 # find exact match 3181 if order_id == t[:ORDER_ID_LENGTH]: 3182 tid = t[ORDER_ID_LENGTH:] 3183 if not tid: 3184 sys.exit('Position %d does not exist.'%position) 3185 sys.argv[2] = tid 3186 3187 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 3188 #:tab1_find_task_in_selected_databases_and_setup_data_location 3189 if sys.argv[2] == 'root': 3190 #set_default_database 3191 z = dict(zip(edi_core.selected, edi_core.selected_path)) 3192 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 3193 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3194 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3195 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3196 if not os.path.exists(edi_core.data_location): 3197 sys.exit('%s is unreachable.'%edi_core.data_location) 3198 else: 3199 for path in edi_core.selected_path: 3200 edi_core.data_location = os.path.expanduser(path) 3201 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3202 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3203 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3204 3205 if not os.path.exists(edi_core.data_location): 3206 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 3207 tasks = os.listdir(edi_core.data_location_tasks) 3208 if sys.argv[2] in tasks: 3209 break 3210 # Verify that task tid is in database 3211 if not is_this_task_a_group(sys.argv[2]): 3212 sys.exit('%s is not a group.'%sys.argv[2]) 3213 3214 task_attributes = list_group(sys.argv[2]) 3215 if sys.argv[2] == 'root': 3216 # for root, first task is the title in the md document 3217 task_attributes[0]['head'] = 'head group' 3218 if option == 'create agenda': 3219 # Generate agenda 3220 for t in task_attributes[1:]: 3221 if t['head'] != 'empty line': 3222 edi_core.agenda.append('%3d - %s %s'%(t['position'],t['group'],t['title'])) 3223 print_list(task_attributes) 3224 3225 ## print group in reStructuredText format 3226 # @ingroup EDI_CLI 3227 def re_cli(): 3228 edi_core.list_option = 'rst' 3229 3230 option = '' 3231 if len(sys.argv) > 2: 3232 if sys.argv[2] == '-A': 3233 # option to create agenda is set 3234 option = 'create agenda' 3235 del sys.argv[2] 3236 3237 # Figure out if the command is run in the tree 3238 #:figure_out_if_in_tree 3239 status = '' 3240 cwd = os.path.realpath(os.getcwd()) 3241 #loop_on_selected_databases 3242 z = zip(edi_core.selected, edi_core.selected_path) 3243 for d,path in z: 3244 edi_core.data_location = os.path.expanduser(path) 3245 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3246 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3247 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3248 3249 # check path from left 3250 real_tree_path = os.path.realpath(edi_core.data_location_tree) 3251 if real_tree_path == cwd[:len(real_tree_path)]: 3252 status = 'in tree' 3253 p_l = edi_core.data_location_tree.split('/')[-2:] 3254 break 3255 3256 if len(sys.argv) == 2: 3257 # no parameter - just command 3258 # select current group when in tree 3259 if status == 'in tree': 3260 #get_current_group_in_tree 3261 if cwd.split('/')[-1] == 'tree': 3262 group = 'root' 3263 else: 3264 group = cwd.split('/')[-1] 3265 #end 3266 3267 task_attributes = list_group(group) 3268 if group == 'root': 3269 # for root, first task is the title in the rst document 3270 task_attributes[0]['head'] = 'head group' 3271 if option == 'create agenda': 3272 # Generate agenda 3273 for t in task_attributes[1:]: 3274 if t['head'] != 'empty line': 3275 # keep only title 3276 edi_core.agenda.append('#. %s'%t['title']) 3277 print_list(task_attributes) 3278 return 3279 else: 3280 # default group 3281 group = 'root' 3282 sys.argv.append(group) 3283 # change status because there is no position parameter, no need to search for tid at given position 3284 status = '' 3285 3286 #:find_task_sysargv2_in_selected_databases 3287 # the goal for this code is to reset status when a tid is an existing task 3288 # when parameter is taskid, it doesnt matter if cwd is in tree 3289 # find task in selected databases 3290 for path in edi_core.selected_path: 3291 data_location = os.path.expanduser(path) 3292 data_location_tasks = '%s/tasks'%data_location 3293 3294 if not os.path.exists(data_location): 3295 sys.exit('%s is unreachable.'%path) 3296 tasks = os.listdir(data_location_tasks) 3297 if sys.argv[2] in tasks: 3298 # found task, setup database below 3299 status = '' 3300 break 3301 3302 if status == 'in tree': 3303 #:get_current_group_in_tree 3304 if cwd.split('/')[-1] == 'tree': 3305 group = 'root' 3306 else: 3307 group = cwd.split('/')[-1] 3308 #:get_position_from_argv2 3309 try: 3310 position = int(sys.argv[2]) 3311 except: 3312 sys.exit('%s is invalid position'%sys.argv[2]) 3313 #:find_task_at_position 3314 if position < 0: 3315 sys.exit('Position %d is invalid.'%position) 3316 group_tasks = os.listdir(generate_group_path(group)) 3317 order_id = baseconvert(position) 3318 tid = '' 3319 for t in group_tasks: 3320 # find exact match 3321 if order_id == t[:ORDER_ID_LENGTH]: 3322 tid = t[ORDER_ID_LENGTH:] 3323 if not tid: 3324 sys.exit('Position %d does not exist.'%position) 3325 sys.argv[2] = tid 3326 3327 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 3328 #:tab1_find_task_in_selected_databases_and_setup_data_location 3329 if sys.argv[2] == 'root': 3330 #set_default_database 3331 z = dict(zip(edi_core.selected, edi_core.selected_path)) 3332 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 3333 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3334 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3335 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3336 if not os.path.exists(edi_core.data_location): 3337 sys.exit('%s is unreachable.'%edi_core.data_location) 3338 else: 3339 for path in edi_core.selected_path: 3340 edi_core.data_location = os.path.expanduser(path) 3341 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3342 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3343 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3344 3345 if not os.path.exists(edi_core.data_location): 3346 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 3347 tasks = os.listdir(edi_core.data_location_tasks) 3348 if sys.argv[2] in tasks: 3349 break 3350 # Verify that task tid is in database 3351 if not is_this_task_a_group(sys.argv[2]): 3352 sys.exit('%s is not a group.'%sys.argv[2]) 3353 3354 task_attributes = list_group(sys.argv[2]) 3355 if sys.argv[2] == 'root': 3356 # for root, first task is the title in the rst document 3357 task_attributes[0]['head'] = 'head group' 3358 if option == 'create agenda': 3359 # Generate agenda 3360 for t in task_attributes[1:]: 3361 if t['head'] != 'empty line': 3362 # keep only title 3363 edi_core.agenda.append('#. %s'%t['title']) 3364 print_list(task_attributes) 3365 3366 ## show trees 3367 # @ingroup EDI_CLI 3368 # print all trees: group tids and titles 3369 def show_trees_cli(): 3370 3371 #:loop_on_selected_databases 3372 z = zip(edi_core.selected, edi_core.selected_path) 3373 for d,path in z: 3374 print '%s - %s' % (d,path) 3375 edi_core.data_location = os.path.expanduser(path) 3376 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3377 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3378 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3379 if not os.path.exists(edi_core.data_location): 3380 sys.exit('%s is unreachable.'%edi_core.data_location) 3381 print ''.join(show_tree()) 3382 3383 ## zip database 3384 # @ingroup EDI_CLI 3385 # The path parameter is optional 3386 # When 2 parameters are given, run data function instead. 3387 def zip_cli(): 3388 3389 if len(sys.argv) < 3: 3390 data() 3391 return 3392 if len(sys.argv) == 3: 3393 # path is current directory 3394 zip_path = '.' 3395 else: 3396 zip_path = sys.argv[3] 3397 database_name = sys.argv[2] 3398 3399 # Verify parameters 3400 if not database_name in edi_core.selected: 3401 sys.exit('%s database is not selected.'%database_name) 3402 if not os.path.exists(zip_path): 3403 sys.exit('%s is unreachable.'%zip_path) 3404 3405 # get database system path 3406 z = dict(zip(edi_core.selected, edi_core.selected_path)) 3407 3408 # Verify parameters 3409 if not os.path.exists(z[database_name]): 3410 sys.exit('%s is unreachable.'%z[database_name]) 3411 3412 print 'zipped: %s' % database_name 3413 print 'system path: %s' % z[database_name] 3414 print 'target: %s/%s.tar.bz2' % (zip_path, database_name) 3415 print 3416 #print ('tar -c %s | bzip2 -9 > %s/%s.tar.bz2'%(z[database_name], zip_path, database_name)) 3417 os.system('tar -cj %s > %s/%s.tar.bz2'%(z[database_name], zip_path, database_name)) 3418 3419 ## list autolink groups or set autolink groups 3420 # @ingroup EDI_CLI 3421 def autolink_cli(): 3422 if len(sys.argv)<3: 3423 print 'Autolink groups' 3424 if not edi_core.autolink: 3425 print 'Empty' 3426 else: 3427 print ','.join(edi_core.autolink) 3428 print 3429 print '\n'.join(edi_core.autolink) 3430 if len(sys.argv)==3: 3431 #:load_ini_file 3432 f = open(os.path.expanduser('~/.easydoneit.ini')) 3433 # load config from user home 3434 config = ConfigParser.ConfigParser() 3435 config.readfp(f) 3436 f.close() 3437 config.set('locations','autolink',sys.argv[2]) 3438 #:save_ini_file 3439 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 3440 config.write(f) 3441 f.close() 3442 3443 ## convert empty group to task 3444 # @ingroup EDI_CLI 3445 def cv_cli(): 3446 if len(sys.argv) < 3: 3447 sys.exit('Too little parameters.') 3448 # Figure out if the command is run in the tree 3449 #:figure_out_if_in_tree 3450 status = '' 3451 cwd = os.path.realpath(os.getcwd()) 3452 #loop_on_selected_databases 3453 z = zip(edi_core.selected, edi_core.selected_path) 3454 for d,path in z: 3455 edi_core.data_location = os.path.expanduser(path) 3456 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3457 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3458 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3459 3460 # check path from left 3461 real_tree_path = os.path.realpath(edi_core.data_location_tree) 3462 if real_tree_path == cwd[:len(real_tree_path)]: 3463 status = 'in tree' 3464 p_l = edi_core.data_location_tree.split('/')[-2:] 3465 break 3466 3467 #:find_task_sysargv2_in_selected_databases 3468 # the goal for this code is to reset status when a tid is an existing task 3469 # when parameter is taskid, it doesnt matter if cwd is in tree 3470 # find task in selected databases 3471 for path in edi_core.selected_path: 3472 data_location = os.path.expanduser(path) 3473 data_location_tasks = '%s/tasks'%data_location 3474 3475 if not os.path.exists(data_location): 3476 sys.exit('%s is unreachable.'%path) 3477 tasks = os.listdir(data_location_tasks) 3478 if sys.argv[2] in tasks: 3479 # found task, setup database below 3480 status = '' 3481 break 3482 3483 if status == 'in tree': 3484 #:get_current_group_in_tree 3485 if cwd.split('/')[-1] == 'tree': 3486 group = 'root' 3487 else: 3488 group = cwd.split('/')[-1] 3489 #:get_position_from_argv2 3490 try: 3491 position = int(sys.argv[2]) 3492 except: 3493 sys.exit('%s is invalid position'%sys.argv[2]) 3494 #:find_task_at_position 3495 if position < 0: 3496 sys.exit('Position %d is invalid.'%position) 3497 group_tasks = os.listdir(generate_group_path(group)) 3498 order_id = baseconvert(position) 3499 tid = '' 3500 for t in group_tasks: 3501 # find exact match 3502 if order_id == t[:ORDER_ID_LENGTH]: 3503 tid = t[ORDER_ID_LENGTH:] 3504 if not tid: 3505 sys.exit('Position %d does not exist.'%position) 3506 sys.argv[2] = tid 3507 3508 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 3509 #:tab1_find_task_in_selected_databases_and_setup_data_location 3510 if sys.argv[2] == 'root': 3511 #set_default_database 3512 z = dict(zip(edi_core.selected, edi_core.selected_path)) 3513 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 3514 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3515 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3516 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3517 if not os.path.exists(edi_core.data_location): 3518 sys.exit('%s is unreachable.'%edi_core.data_location) 3519 else: 3520 for path in edi_core.selected_path: 3521 edi_core.data_location = os.path.expanduser(path) 3522 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3523 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3524 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3525 3526 if not os.path.exists(edi_core.data_location): 3527 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 3528 tasks = os.listdir(edi_core.data_location_tasks) 3529 if sys.argv[2] in tasks: 3530 break 3531 # Verify that task tid is not root 3532 if sys.argv[2] == 'root': 3533 sys.exit('root is invalid group') 3534 # Verify that task tid is in database 3535 tasks = os.listdir(edi_core.data_location_tasks) 3536 if not sys.argv[2] in tasks: 3537 sys.exit('%s not found.'%sys.argv[2]) 3538 if not is_this_task_a_group(sys.argv[2]): 3539 sys.exit('%s is not a group.'%sys.argv[2]) 3540 print '\n'.join(convert_group_to_task(sys.argv[2])) 3541 3542 ## display user name or set user name 3543 # @ingroup EDI_CLI 3544 def user_cli(): 3545 if len(sys.argv)<3: 3546 print 'User name: %s <%s>'%(edi_core.user,edi_core.email) 3547 if len(sys.argv)>3: 3548 sys.exit('Too many parameters.') 3549 if len(sys.argv)==3: 3550 #:load_ini_file 3551 f = open(os.path.expanduser('~/.easydoneit.ini')) 3552 # load config from user home 3553 config = ConfigParser.ConfigParser() 3554 config.readfp(f) 3555 f.close() 3556 config.set('settings','username',sys.argv[2]) 3557 #:save_ini_file 3558 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 3559 config.write(f) 3560 f.close() 3561 3562 ## display user email or set user email 3563 # @ingroup EDI_CLI 3564 def email_cli(): 3565 if len(sys.argv)<3: 3566 print 'User name: %s <%s>'%(edi_core.user,edi_core.email) 3567 if len(sys.argv)>3: 3568 sys.exit('Too many parameters.') 3569 if len(sys.argv)==3: 3570 #:load_ini_file 3571 f = open(os.path.expanduser('~/.easydoneit.ini')) 3572 # load config from user home 3573 config = ConfigParser.ConfigParser() 3574 config.readfp(f) 3575 f.close() 3576 config.set('settings','useremail',sys.argv[2]) 3577 #:save_ini_file 3578 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 3579 config.write(f) 3580 f.close() 3581 3582 ## show statistics 3583 # @ingroup EDI_CLI 3584 def stats_cli(): 3585 # Figure out if the command is run in the tree 3586 #:figure_out_if_in_tree 3587 status = '' 3588 cwd = os.path.realpath(os.getcwd()) 3589 #loop_on_selected_databases 3590 z = zip(edi_core.selected, edi_core.selected_path) 3591 for d,path in z: 3592 edi_core.data_location = os.path.expanduser(path) 3593 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3594 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3595 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3596 3597 # check path from left 3598 real_tree_path = os.path.realpath(edi_core.data_location_tree) 3599 if real_tree_path == cwd[:len(real_tree_path)]: 3600 status = 'in tree' 3601 p_l = edi_core.data_location_tree.split('/')[-2:] 3602 break 3603 3604 # Decide what to execute 3605 if len(sys.argv) == 2: 3606 tid = 'root' 3607 if status: 3608 # in tree, set tid to cwd 3609 tid = cwd.split('/')[-1] 3610 if tid == 'tree': 3611 tid = 'root' 3612 exe = 'stats in tree' 3613 else: 3614 exe = 'stats root' 3615 else: 3616 tid = sys.argv[2] 3617 3618 #:find_task_in_selected_databases_and_setup_data_location 3619 if tid == 'root': 3620 #set_default_database 3621 z = dict(zip(edi_core.selected, edi_core.selected_path)) 3622 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 3623 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3624 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3625 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3626 if not os.path.exists(edi_core.data_location): 3627 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 3628 elif tid != 'tree': 3629 for path in edi_core.selected_path: 3630 edi_core.data_location = os.path.expanduser(path) 3631 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3632 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3633 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3634 3635 if not os.path.exists(edi_core.data_location): 3636 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 3637 tasks = os.listdir(edi_core.data_location_tasks) 3638 if tid in tasks: 3639 break 3640 exe = 'stats parameter' 3641 3642 if exe == 'stats root': 3643 #:loop_on_selected_databases 3644 z = zip(edi_core.selected, edi_core.selected_path) 3645 for d,path in z: 3646 print '%s - %s' % (d,path) 3647 edi_core.data_location = os.path.expanduser(path) 3648 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3649 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3650 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3651 if not os.path.exists(edi_core.data_location): 3652 sys.exit('%s is unreachable.'%edi_core.data_location) 3653 print '\n'.join(statistics('for database')) 3654 else: 3655 if not is_this_task_a_group(tid): 3656 sys.exit('Group %s not found.'%tid) 3657 3658 print '\n'.join(statistics(tid)) 3659 3660 ## add many tasks or many groups 3661 # @ingroup EDI_CLI 3662 def many_cli(): 3663 if len(sys.argv) < 3: 3664 sys.exit('Too little parameters.') 3665 3666 #:figure_out_if_in_tree 3667 status = '' 3668 cwd = os.path.realpath(os.getcwd()) 3669 #loop_on_selected_databases 3670 z = zip(edi_core.selected, edi_core.selected_path) 3671 for d,path in z: 3672 edi_core.data_location = os.path.expanduser(path) 3673 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3674 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3675 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3676 3677 # check path from left 3678 real_tree_path = os.path.realpath(edi_core.data_location_tree) 3679 if real_tree_path == cwd[:len(real_tree_path)]: 3680 status = 'in tree' 3681 p_l = edi_core.data_location_tree.split('/')[-2:] 3682 break 3683 3684 options = '' 3685 group_parameter_status = 'group is a command line parameter' 3686 if len(sys.argv) < 4: 3687 # Parameters are: command filename 3688 # select current group when in tree 3689 if status == 'in tree': 3690 #get_current_group_in_tree 3691 if cwd.split('/')[-1] == 'tree': 3692 group = 'root' 3693 else: 3694 group = cwd.split('/')[-1] 3695 #end 3696 else: 3697 # default group 3698 group = 'root' 3699 group_parameter_status = 'edi selected group' 3700 3701 text_file = sys.argv[2] 3702 else: 3703 if ((sys.argv[2] == '-1') or (sys.argv[2] == '-g')) and len(sys.argv) == 4: 3704 options = sys.argv[2] 3705 text_file = sys.argv[3] 3706 # select current group when in tree 3707 if status == 'in tree': 3708 #get_current_group_in_tree 3709 if cwd.split('/')[-1] == 'tree': 3710 group = 'root' 3711 else: 3712 group = cwd.split('/')[-1] 3713 #end 3714 else: 3715 # default group 3716 group = 'root' 3717 group_parameter_status = 'edi selected group' 3718 if ((sys.argv[2] == '-1') or (sys.argv[2] == '-g')) and len(sys.argv) == 5: 3719 options = sys.argv[2] 3720 group = sys.argv[3] 3721 text_file = sys.argv[4] 3722 if ((sys.argv[2] != '-1') and (sys.argv[2] != '-g')): 3723 group = sys.argv[2] 3724 text_file = sys.argv[3] 3725 if not options: 3726 exe = 'add' 3727 else: 3728 if options == '-1': 3729 # option -1 adds one task per line in text_file 3730 exe = 'add one task per line' 3731 elif options == '-g': 3732 # option -F stores text_file filename in first line of description 3733 exe = 'add groups from text file' 3734 3735 if (group == 'root') and (not status): 3736 # set default database when group is root and cwd not in tree 3737 #:set_default_database 3738 z = dict(zip(edi_core.selected, edi_core.selected_path)) 3739 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 3740 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3741 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3742 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3743 if not os.path.exists(edi_core.data_location): 3744 sys.exit('%s is unreachable.'%edi_core.data_location) 3745 if (group != 'root') and ((not status) or (group_parameter_status == 'group is a command line parameter')): 3746 #:find_group_in_selected_databases_and_setup_data_location 3747 for path in edi_core.selected_path: 3748 edi_core.data_location = os.path.expanduser(path) 3749 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3750 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3751 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3752 3753 if not os.path.exists(edi_core.data_location): 3754 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 3755 groups = os.listdir(edi_core.data_location_groups) 3756 if group in groups: 3757 break 3758 3759 if not is_this_task_a_group(group): 3760 sys.exit('%s is not a group.'%group) 3761 3762 if not os.path.exists(text_file): 3763 sys.exit('%s unreachable file.'%text_file) 3764 3765 if exe == 'add': 3766 print add_many_tasks(group,text_file) 3767 if exe == 'add one task per line': 3768 print add_many_one_line_tasks(group,text_file) 3769 if exe == 'add groups from text file': 3770 print add_many_groups_from_text(group,text_file) 3771 3772 ## demo to show how to use Easydoneit CLI 3773 # @ingroup EDI_CLI 3774 def demo_cli(): 3775 print '# Easydoneit CLI - Demo' 3776 # print (), to print without a newline 3777 print ('#'), 3778 #:edi_version 3779 f = open('%s/VERSION'%os.path.abspath(os.path.dirname(sys.argv[0]))) 3780 v = f.readline() 3781 f.close() 3782 print 'Version %s'%v 3783 3784 print ''' 3785 # Run the commands below in a terminal 3786 3787 # create the demo database 3788 edi createDatabase easydoneit_cli_demo ~/easydoneit_cli_demo 3789 3790 # show selected databases - SAVE THIS STRING 3791 edi select 3792 3793 # show default database - SAVE THIS STRING 3794 edi default 3795 3796 # select demo database 3797 edi select easydoneit_cli_demo 3798 3799 # demo database is default 3800 edi default easydoneit_cli_demo 3801 3802 # the configuration file is in your home, change text editor if you dont use VI 3803 cat ~/.easydoneit.ini 3804 3805 # create a task in default database, type your task in the text editor 3806 edi cr 3807 3808 # list tasks 3809 edi ls 3810 3811 # add task directly from command line 3812 edi add -t demo_task_1 3813 edi add -t 'demo task 2 - string with spaces' 3814 edi ls 3815 3816 # tasks can be added on the top of the list 3817 edi topbot top 3818 3819 # add task from file 3820 echo 'demo task 3' > ~/demo_3.txt 3821 edi add ~/demo_3.txt 3822 rm ~/demo_3.txt 3823 edi ls 3824 3825 # choose to add tasks at the bottom 3826 edi topbot bottom 3827 3828 # it is simpler to use Easydoneit CLI in the tree 3829 cd ~/easydoneit_cli_demo/tree 3830 edi ls 3831 3832 # create a group using position 3833 edi mkdir 0 3834 3835 # background color 3836 edi bc 0 230,230,230,255 3837 3838 # change order, moves task at position 0 to position 2 3839 edi order 0 2 3840 3841 # change state to done, pending and inactive 3842 edi set 0 1 3843 edi set 1 3 3844 edi set 2 4 3845 edi ls 3846 3847 # display the complete tree of groups 3848 edi st 3849 3850 # filter out done tasks 3851 edi stfi done disable 3852 edi ls 3853 3854 # search 3855 edi search demo 3856 3857 # delete task 3858 edi rm 1 3859 3860 # display system path for a task 3861 edi path 2 3862 3863 # generate html 3864 edi html 3865 3866 # generate reStructuredText (rst) 3867 edi re 3868 3869 # zip 3870 edi zip easydoneit_cli_demo ~/ 3871 3872 # delete database, RESELECT YOUR DATABASES WITH edi select BEFORE RUNNING THE COMMANDS BELOW 3873 cd - 3874 edi data -d easydoneit_cli_demo 3875 edi data 3876 3877 # remove database zip 3878 rm ~/easydoneit_cli_demo.tar.bz2 3879 3880 # end 3881 ''' 3882 3883 ## set list of group for edi ls -L, -La and -Lx options 3884 # @ingroup EDI_CLI 3885 def list_cli(): 3886 if len(sys.argv)<3: 3887 print 'list of groups' 3888 if not edi_core.list_of_groups: 3889 print 'Empty' 3890 else: 3891 print ','.join(edi_core.list_of_groups) 3892 print 3893 print '\n'.join(edi_core.list_of_groups) 3894 if len(sys.argv)==3: 3895 #:load_ini_file 3896 f = open(os.path.expanduser('~/.easydoneit.ini')) 3897 # load config from user home 3898 config = ConfigParser.ConfigParser() 3899 config.readfp(f) 3900 f.close() 3901 config.set('locations','list',sys.argv[2]) 3902 #:save_ini_file 3903 f = open(os.path.expanduser('~/.easydoneit.ini'),'w') 3904 config.write(f) 3905 f.close() 3906 3907 ## copy database sys.argv[2] to database sys.argv[3] 3908 # @ingroup EDI_CLI 3909 def merge_cli(): 3910 if len(sys.argv) < 4: 3911 sys.exit('Too little parameters.') 3912 3913 # set source path (argv 2) 3914 path = '' 3915 if os.path.exists(sys.argv[2]): 3916 path = sys.argv[2] 3917 if not path: 3918 # argv 2 could be a database name 3919 dbs = dict(edi_core.databases) 3920 if sys.argv[2] in dbs.keys(): 3921 path = dbs[sys.argv[2]] 3922 if not path: 3923 sys.exit('Source database %s not found.'%sys.argv[2]) 3924 3925 # check source database structure 3926 directories = ['tasks', 'groups', 'tree'] 3927 3928 status = 'source database structure ok' 3929 for d in directories: 3930 directory = '%s/%s'%(path, d) 3931 if not os.path.exists(directory): 3932 print 'Missing %s'%directory 3933 status = 'missing directories in source database' 3934 if status == 'missing directories in source database': 3935 sys.exit('Invalid source database %s'%path) 3936 3937 # check destination database 3938 if not sys.argv[3] in edi_core.selected: 3939 sys.exit('%s database not selected.'%sys.argv[3]) 3940 3941 s = dict(zip(edi_core.selected, edi_core.selected_path)) 3942 destination_path = s[sys.argv[3]] 3943 3944 # copy database 3945 for d in directories: 3946 directory = '%s/%s'%(path, d) 3947 ddirectory = '%s/%s'%(destination_path, d) 3948 os.system('cp -R %s/* %s'%(directory,ddirectory)) 3949 3950 3951 ## copy media sys.argv[3] to task sys.argv[2] 3952 # @ingroup EDI_CLI 3953 def media_cli(): 3954 if len(sys.argv) < 3: 3955 sys.exit('Too little parameters.') 3956 # Figure out if the command is run in the tree 3957 #:figure_out_if_in_tree 3958 status = '' 3959 cwd = os.path.realpath(os.getcwd()) 3960 #loop_on_selected_databases 3961 z = zip(edi_core.selected, edi_core.selected_path) 3962 for d,path in z: 3963 edi_core.data_location = os.path.expanduser(path) 3964 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 3965 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 3966 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 3967 3968 # check path from left 3969 real_tree_path = os.path.realpath(edi_core.data_location_tree) 3970 if real_tree_path == cwd[:len(real_tree_path)]: 3971 status = 'in tree' 3972 p_l = edi_core.data_location_tree.split('/')[-2:] 3973 break 3974 3975 #:find_task_sysargv2_in_selected_databases 3976 # the goal for this code is to reset status when a tid is an existing task 3977 # when parameter is taskid, it doesnt matter if cwd is in tree 3978 # find task in selected databases 3979 for path in edi_core.selected_path: 3980 data_location = os.path.expanduser(path) 3981 data_location_tasks = '%s/tasks'%data_location 3982 3983 if not os.path.exists(data_location): 3984 sys.exit('%s is unreachable.'%path) 3985 tasks = os.listdir(data_location_tasks) 3986 if sys.argv[2] in tasks: 3987 # found task, setup database below 3988 status = '' 3989 break 3990 3991 if status == 'in tree': 3992 #:get_current_group_in_tree 3993 if cwd.split('/')[-1] == 'tree': 3994 group = 'root' 3995 else: 3996 group = cwd.split('/')[-1] 3997 #:get_position_from_argv2 3998 try: 3999 position = int(sys.argv[2]) 4000 except: 4001 sys.exit('%s is invalid position'%sys.argv[2]) 4002 #:find_task_at_position 4003 if position < 0: 4004 sys.exit('Position %d is invalid.'%position) 4005 group_tasks = os.listdir(generate_group_path(group)) 4006 order_id = baseconvert(position) 4007 tid = '' 4008 for t in group_tasks: 4009 # find exact match 4010 if order_id == t[:ORDER_ID_LENGTH]: 4011 tid = t[ORDER_ID_LENGTH:] 4012 if not tid: 4013 sys.exit('Position %d does not exist.'%position) 4014 sys.argv[2] = tid 4015 4016 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 4017 #:tab1_find_task_in_selected_databases_and_setup_data_location 4018 if sys.argv[2] == 'root': 4019 #set_default_database 4020 z = dict(zip(edi_core.selected, edi_core.selected_path)) 4021 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 4022 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 4023 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 4024 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 4025 if not os.path.exists(edi_core.data_location): 4026 sys.exit('%s is unreachable.'%edi_core.data_location) 4027 else: 4028 for path in edi_core.selected_path: 4029 edi_core.data_location = os.path.expanduser(path) 4030 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 4031 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 4032 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 4033 4034 if not os.path.exists(edi_core.data_location): 4035 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 4036 tasks = os.listdir(edi_core.data_location_tasks) 4037 if sys.argv[2] in tasks: 4038 break 4039 # Verify that task tid is in database 4040 tasks = os.listdir(edi_core.data_location_tasks) 4041 if not sys.argv[2] in tasks: 4042 sys.exit('%s not found.'%sys.argv[2]) 4043 if len(sys.argv)<4: 4044 print '\n'.join(get_media(sys.argv[2])) 4045 if len(sys.argv)==4: 4046 if not os.path.exists(sys.argv[3]): 4047 sys.exit('%s not found.'%sys.argv[3]) 4048 print set_media(sys.argv[2],sys.argv[3]) 4049 4050 4051 ## copy attachments sys.argv[3] to task sys.argv[2] 4052 # @ingroup EDI_CLI 4053 def at_cli(): 4054 if len(sys.argv) < 3: 4055 sys.exit('Too little parameters.') 4056 # Figure out if the command is run in the tree 4057 #:figure_out_if_in_tree 4058 status = '' 4059 cwd = os.path.realpath(os.getcwd()) 4060 #loop_on_selected_databases 4061 z = zip(edi_core.selected, edi_core.selected_path) 4062 for d,path in z: 4063 edi_core.data_location = os.path.expanduser(path) 4064 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 4065 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 4066 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 4067 4068 # check path from left 4069 real_tree_path = os.path.realpath(edi_core.data_location_tree) 4070 if real_tree_path == cwd[:len(real_tree_path)]: 4071 status = 'in tree' 4072 p_l = edi_core.data_location_tree.split('/')[-2:] 4073 break 4074 4075 #:find_task_sysargv2_in_selected_databases 4076 # the goal for this code is to reset status when a tid is an existing task 4077 # when parameter is taskid, it doesnt matter if cwd is in tree 4078 # find task in selected databases 4079 for path in edi_core.selected_path: 4080 data_location = os.path.expanduser(path) 4081 data_location_tasks = '%s/tasks'%data_location 4082 4083 if not os.path.exists(data_location): 4084 sys.exit('%s is unreachable.'%path) 4085 tasks = os.listdir(data_location_tasks) 4086 if sys.argv[2] in tasks: 4087 # found task, setup database below 4088 status = '' 4089 break 4090 4091 if status == 'in tree': 4092 #:get_current_group_in_tree 4093 if cwd.split('/')[-1] == 'tree': 4094 group = 'root' 4095 else: 4096 group = cwd.split('/')[-1] 4097 #:get_position_from_argv2 4098 try: 4099 position = int(sys.argv[2]) 4100 except: 4101 sys.exit('%s is invalid position'%sys.argv[2]) 4102 #:find_task_at_position 4103 if position < 0: 4104 sys.exit('Position %d is invalid.'%position) 4105 group_tasks = os.listdir(generate_group_path(group)) 4106 order_id = baseconvert(position) 4107 tid = '' 4108 for t in group_tasks: 4109 # find exact match 4110 if order_id == t[:ORDER_ID_LENGTH]: 4111 tid = t[ORDER_ID_LENGTH:] 4112 if not tid: 4113 sys.exit('Position %d does not exist.'%position) 4114 sys.argv[2] = tid 4115 4116 # cant cover sys.exit('%s is unreachable.'%d) below, exception catched before. Dont add no cover because the code is reused in other functions. 4117 #:tab1_find_task_in_selected_databases_and_setup_data_location 4118 if sys.argv[2] == 'root': 4119 #set_default_database 4120 z = dict(zip(edi_core.selected, edi_core.selected_path)) 4121 edi_core.data_location = os.path.expanduser(z[edi_core.default_add_in]) 4122 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 4123 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 4124 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 4125 if not os.path.exists(edi_core.data_location): 4126 sys.exit('%s is unreachable.'%edi_core.data_location) 4127 else: 4128 for path in edi_core.selected_path: 4129 edi_core.data_location = os.path.expanduser(path) 4130 edi_core.data_location_tasks = '%s/tasks'%edi_core.data_location 4131 edi_core.data_location_groups = '%s/groups'%edi_core.data_location 4132 edi_core.data_location_tree = '%s/tree'%edi_core.data_location 4133 4134 if not os.path.exists(edi_core.data_location): 4135 sys.exit('%s is unreachable.'%edi_core.data_location) #pragma: no cover 4136 tasks = os.listdir(edi_core.data_location_tasks) 4137 if sys.argv[2] in tasks: 4138 break 4139 # Verify that task tid is in database 4140 tasks = os.listdir(edi_core.data_location_tasks) 4141 if not sys.argv[2] in tasks: 4142 sys.exit('%s not found.'%sys.argv[2]) 4143 if len(sys.argv)<4: 4144 print '\n'.join(get_attachments(sys.argv[2])) 4145 if len(sys.argv)>3: 4146 for fn in sys.argv[3:]: 4147 if not os.path.exists(fn): 4148 sys.exit('%s not found.'%fn) 4149 print '\n'.join(set_attachments(sys.argv[2],sys.argv[3:])) 4150 4151 4152 ## CLI command functions 4153 FUNCTIONS = [help,version,create_task_cli,lsid,add_task_cli,cat,mkdir,show_group_for_task_cli,rm,vi,change_order,set,reset,search,move_task,copy_task,link_task,get_task_path,tree,ls,set_status_filter,data,html_cli,selected_cli,default_cli,cpb_cli,mvb_cli,fc_cli,bc_cli,createDatabase_cli,topbot_cli,in_cli,re_cli,show_trees_cli,zip_cli,autolink_cli,cv_cli,user_cli,email_cli,stats_cli,many_cli,demo_cli,list_cli,merge_cli,media_cli,at_cli] 4154 4155 COMMAND_MAP = dict(zip(COMMANDS,FUNCTIONS)) 4156 4157 4158 if __name__ == '__main__': 4159 #:print_command_map 4160 #:end 4161 start() #pragma: no cover 4162 4163 if len(sys.argv)> 1: #pragma: no cover 4164 # remove whitespaces from parameters. ^M can come for scripts 4165 for i,a in enumerate(sys.argv[1:]): #pragma: no cover 4166 sys.argv[i+1] = a.strip() #pragma: no cover 4167 #:not profiler 4168 COMMAND_MAP.get(sys.argv[1],Nothing)() #pragma: no cover 4169 #:else 4170 #:end 4171 else: 4172 help() #pragma: no cover 4173 #:profiler 4174 #:end