Changeset 844 for trunk/plugins/oforgeplugin/oforge/api.py
- Timestamp:
- 05/11/11 17:48:00 (2 years ago)
- File:
-
- 1 edited
-
trunk/plugins/oforgeplugin/oforge/api.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/plugins/oforgeplugin/oforge/api.py
r843 r844 618 618 619 619 def _copy_ini_sections(self, src_conf, target_conf, sections, save=True): 620 for section in sectio category = config.get('project', 'category') 621 project_display_name = config.get('project','name', name) 622 # Create the new schema/user 623 self._create_postgres_user_and_schema(new_user_schema_name, new_password) 624 625 src_db_cnx = self.getenv(name).get_db_cnx() 626 olddburl = config.get('trac', 'database') 627 config.set('trac', 'database', 628 self._get_postgres_url(new_user_schema_name, new_password)) 629 config.set('oforge', 'postgres_schema', new_user_schema_name) 630 config.save() 631 new_env = self.getenv(name) 632 target_db_cnx = new_env.get_db_cnx() 633 try: 634 # Create tables in new schema 635 DatabaseManager(new_env).init_db() 636 # This is needed to get the default data into the DB 637 # Which is required to run the upgrade method that follows 638 EnvironmentSetup(new_env).environment_created() 639 new_env.upgrade(backup=False) 640 # Get list of tables excluding ones that shouldn't be copeied 641 target_db_cursor = target_db_cnx.cursor() 642 target_db_cursor.execute(""" 643 SELECT table_name 644 FROM information_schema.tables 645 WHERE table_schema = %s AND table_name != 'session' 646 AND table_name != 'auth_cookie'""", (new_user_schema_name,)) 647 # Copy tables 648 for table in map(lambda r: r[0], target_db_cursor.fetchall()): 649 self.logger.debug("copying table %s"%(table)) 650 self._copy_table(src_db_cnx, target_db_cnx, table) 651 # Commit all changes 652 target_db_cnx.commit() 653 except Exception, e: 654 config.set('trac','database', olddburl) 655 config.set('oforge','proj_id', None) 656 target_db_cnx.rollback() 657 master_db_cnx = self.warehouse_db_cnx() 658 master_cursor = master_db_cnx.cursor() 659 master_cursor.execute('DROP SCHEMA %s CASCADE'%(new_user_schema_name)) 660 master_cursor.execute('DROP USER %s'%(new_user_schema_name)) 661 master_db_cnx.commit() 662 raise 663 664 def add_dashboard_project(self, name, tags=None): 665 """ 666 Connect a project to the project dashboard. 667 """ 668 env = self.getenv(name) 669 if env.config.get('oforge', 'proj_id', None): 670 raise OForgeException("Project already registered") 671 display_name = env.config.get('project', 'name') 672 type = env.config.get('project', 'category') 673 p = Project(name=name, display_name=display_name,type=type, 674 state='Open',start_date=datetime.datetime.now()) 675 p.save() 676 p.tags = tags 677 p.save() 678 env.config.set('oforge', 'proj_id', p.id) 679 env.config.save() 680 return p.id 681 682 def remove_dashboard_project(self, name): 683 """ 684 Disconnect a project from the project dashboard. 685 """ 686 env = self.getenv(name) 687 proj_id = env.config.getint('oforge', 'proj_id', -1) 688 if proj_id != -1: 689 Project.objects.filter(id=proj_id).delete() 690 env.config.set('oforge', 'proj_id', None) 691 env.config.save() 692 else: 693 raise OForgeProjectException("Project not registered") 694 695 def createproject(self, name, **kwargs): 696 ''' 697 Create an OForge project. Takes the following dict args: 698 699 * createsvn: Flag to stop svn repo creation 700 default: True 701 702 * svntemplate: Template svn structure 703 default: none 704 705 * type: Project type 706 default: Client 707 708 * defaultworkspace: Workspace to clone 709 default: none 710 711 * admins: Users to give admin priviledges to 712 Comma seperated 713 default: noone 714 715 * postgres: Use postgres DB instead of sqlite 716 default: True 717 718 * display_name: Display name of project 719 default: same as name parameter 720 721 * description: Description of the project 722 723 * tags: Tags for project 724 725 * copy_ini_sections: Sections of default workspace (if any) 726 to copy to the new environment 727 default: ticket-workflow and ticket-custom 728 ''' 729 self.logger.debug('Parsing args') 730 731 svnlocation = None 732 gitlocation = None 733 traclocation = None 734 engine = "git" 735 createsvn = kwargs.get('createsvn', False) 736 svntemplate = kwargs.get('svntemplate', None) 737 type = kwargs.get('type', 'Client') 738 defaultworkspace = kwargs.get('defaultworkspace', None) 739 admins = kwargs.get('admins', None) 740 postgres = kwargs.get('postgres', True) 741 descr = kwargs.get('description', None) 742 display_name = kwargs.get('display_name', name) 743 tags = kwargs.get('tags', None) 744 copy_ini_sections = kwargs.get('copy_ini_sections', ('ticket-custom', 745 'ticket-workflow')) 746 tracadmin = TracAdmin() 747 748 # error handling flags 749 project_created = None 750 schema_created = None 751 user_created = None 752 env_created = None 753 svn_created = None 754 proj_id = None 755 try: 756 #added git 757 if createsvn: 758 if engine=="svn": 759 svnlocation = path.join(self.config.get('oforge', 'svn_base'),name) 760 if not path.exists(svnlocation) and createsvn: 761 os.makedirs(svnlocation) 762 svn_created = True 763 if engine=="git": 764 gitlocation = path.join(self.config.get('oforge', 'git_base'),name) 765 if not path.exists(gitlocation) and createsvn: 766 os.makedirs(gitlocation) 767 svn_created = True 768 769 traclocation = path.join(self.config.get('oforge', 'trac_base'), 770 name) 771 dburl = None 772 if postgres: 773 new_user_schema_name = self._canonize_schema_name(name) 774 new_password = self.config.get('oforge','initial_db_password', 'secret') 775 self._create_postgres_user_and_schema(new_user_schema_name, new_password) 776 schema_created = user_created = True 777 dburl = self._get_postgres_url(new_user_schema_name, new_password) 778 self.logger.debug('Creating svn and trac dirs') 779 if not path.exists(traclocation): 780 os.makedirs(traclocation) 781 self.logger.debug('Sanity check') 782 # sanity check 783 tracadmin.env_set(traclocation) 784 if tracadmin.env_check(): 785 raise OForgeProjectCreationError, \ 786 ns: 620 for section in sections: 787 621 for option in target_conf[section].options(): 788 622 target_conf.remove(section, option[0])
Note: See TracChangeset
for help on using the changeset viewer.
