Ignore:
Timestamp:
01/18/12 11:59:51 (8 years ago)
Author:
pcosquer
Message:

3D branch: merge changes from trunk (rev [661])

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3D/openPLM/plmapp/csvimport.py

    r474 r662  
    1515from openPLM.plmapp import models 
    1616from openPLM.plmapp.unicodecsv import UnicodeReader 
    17 from openPLM.plmapp.controllers.plmobject import PLMObjectController 
     17from openPLM.plmapp.controllers import PLMObjectController, UserController 
    1818from openPLM.plmapp.tasks import update_indexes 
    1919 
     
    353353 
    354354        parent.add_child(child, quantity, order) 
     355 
     356class UsersImporter(CSVImporter): 
     357    """ 
     358    A :class:`CSVImporter` that sponsors users from a CSV file. 
     359 
     360    The CSV must contain the following columns: 
     361 
     362        * username 
     363        * first_name 
     364        * last_name 
     365        * email 
     366        * groups (multiple groups can be separeted by a "/") 
     367 
     368    """ 
     369 
     370    REQUIRED_HEADERS = ('username', 'first_name', 'last_name', 'email', 'groups') 
     371 
     372    HEADERS_SET = set(REQUIRED_HEADERS) 
     373 
     374    def __init__(self, csv_file, user, encoding="utf-8"): 
     375        self.ctrl = UserController(user, user) 
     376        self.ctrl.block_mails() 
     377        super(UsersImporter, self).__init__(csv_file, user) 
     378        self.groups = dict(user.groups.values_list("name", "id")) 
     379 
     380    @classmethod 
     381    def get_headers_set(cls): 
     382        return cls.HEADERS_SET  
     383 
     384    def tear_down(self): 
     385        self.ctrl.unblock_mails() 
     386     
     387    def parse_row(self, line, row):  
     388        from openPLM.plmapp.forms import SponsorForm 
     389        un, fn, ln, em, grps = self.get_values(row, *self.REQUIRED_HEADERS) 
     390        groups = [] 
     391        for grp in grps.split("/"): 
     392            try: 
     393                groups.append(self.groups[grp]) 
     394            except KeyError: 
     395                self.store_errors(line, u"Invalid group:%s" % grp) 
     396                return 
     397        data = { 
     398                "sponsor" : self.user.id, 
     399                "username": un, 
     400                "last_name": ln, 
     401                "first_name": fn, 
     402                "email" : em, 
     403                "groups" : groups, 
     404                "warned" : True, 
     405                } 
     406        form = SponsorForm(data, sponsor=self.user.id) 
     407        if form.is_valid(): 
     408            new_user = form.save() 
     409            self.ctrl.sponsor(new_user) 
     410            self.objects.append(new_user) 
     411        else: 
     412            items = (mark_safe(u"%s: %s" % item) for item  
     413                    in form.errors.iteritems()) 
     414            self.store_errors(line, *items) 
     415     
    355416    
    356417#: Dictionary (name -> CSVImporter's subclass) of known :class:`CSVImporter` 
    357 IMPORTERS = {"csv" : PLMObjectsImporter, "bom" : BOMImporter } 
    358  
     418IMPORTERS = {"csv" : PLMObjectsImporter, "bom" : BOMImporter, 
     419        "users" : UsersImporter} 
     420 
Note: See TracChangeset for help on using the changeset viewer.