Exemple #1
0
 def parse_dept(self, part, company=None, optional=False, with_aka=False):
     r'''Parse a department and connect it to its parent organisation.
     '''
     if optional and 'de' not in part and 'de-' not in part:
         return None
     if 'de' in part:
         name = multilang.optparse(part.getvalue('de'))
         is_head = True
     else:
         name = multilang.optparse(part.getvalue('de-'))
         is_head = False
     aka = []
     if with_aka:
         aka = list(map(multilang.optparse, part.mgetvalue('aka', [])))
     prefer = sorted([name] + aka, key=lambda s: s.loc())[0]
     dept = self.model.register(Department(name=name, aka=aka, prefer=prefer))
     dept.place = part.place
     if not company:
         company = yield from self.find(Company, part.getvalue('of'))
     try:
         Has_department(company, dept, is_head=is_head)
     except ValueError as e:
         raise InputError(e, line=name)
     return dept
Exemple #2
0
 def parse_company_or_dept(self, part, optional=False):
     r'''Parse a company and/or any department thereof.
     '''
     company = None
     if 'co' in part:
         name = multilang.optparse(part.getvalue('co'))
         aka = list(map(multilang.optparse, part.mgetvalue('aka', [])))
         # The preferred name is the one that appears first in the input.
         prefer = sorted([name] + aka, key=lambda s: s.loc())[0]
         company = self.model.register(Company(name=name, aka=aka,
                                               prefer=prefer))
         company.place = part.place
     dept = yield from self.parse_dept(part, company, optional=company or optional, with_aka=not company)
     org = dept or company
     if not org and not optional:
         raise InputError('missing company or department', line=part)
     return org
Exemple #3
0
 def make_assoc(self, part, who, oth, ltype, timestamp=None, is_head=None):
     r'''Create an Associate_with link (or subtype) between two nodes,
     with suitable constructor data.
     '''
     assert issubclass(ltype, Association)
     # Here we introspect the keyword args accepted by ltype's constructor
     # and adapt accordingly.
     kw = {'timestamp': timestamp}
     if is_head is not None:
         kw['is_head'] = is_head
     if part:
         import inspect
         kwa = dict.fromkeys(inspect.getargspec(ltype.__init__)[0])
         if ('is_head' in kwa and hasattr(part, 'delim') and
             'is_head' not in kw):
             kw['is_head'] = part.delim != '-'
         if 'sequence' in kwa and hasattr(part, 'sequence'):
             kw['sequence'] = part.sequence
         if 'position' in kwa and 'pos' in part:
             kw['position'] = multilang.optparse(part.getvalue('pos'))
     return ltype(who, oth, **kw)