Beispiel #1
0
 def register_auth_chain(self, register=True, session=None):
     parents = self.auth_parent_snos
     if register is True:
         for parent in parents:
             serialnos.link_serialno(child=self.serialno,
                                     parent=parent,
                                     session=session)
Beispiel #2
0
 def register_auth_chain(self, register=True, session=None):
     parents = self.auth_parent_snos
     if register is True:
         for parent in parents:
             serialnos.link_serialno(child=self.serialno,
                                     parent=parent,
                                     session=session)
Beispiel #3
0
 def commit(self,
            outfolder=None,
            indent_sno=None,
            prod_ord_sno=None,
            register=False,
            pb_class=None,
            stacked_pb=False,
            leaf_pb=True,
            session=None):
     if self._is_done is True:
         raise NothingToProduceError
     self._generate_docs(outfolder, indent_sno, prod_ord_sno, register,
                         session)
     if register is True:
         serialnos.set_serialno_efield(sno=self._sno,
                                       efield=self._target_modulename,
                                       session=session)
         serialnos.link_serialno(child=self._sno,
                                 parent=prod_ord_sno,
                                 session=session)
         self._original = get_module_prototype(self._orig_modulename)
         self._target = get_module_instance(self._sno,
                                            self._target_modulename,
                                            session=session)
         self._is_done = True
Beispiel #4
0
    def commit(self, outfolder=None, indent_sno=None, prod_ord_sno=None,
               register=False, pb_class=None, stacked_pb=False, leaf_pb=True,
               session=None):
        # Serial numbers will already have been written in.
        if self._prototype.strategy['genmanifest'] is True:

            if pb_class is None:
                pb_class = TendrilProgressBar
            if leaf_pb is True:
                pb = pb_class(max=len(self.refdes))
                verbose = False
            else:
                pb = None
                verbose = True

            msg = "Generating Manifests and Linking for {0}".format(self.ident)
            print(msg)

            for card in self.modules:
                self._generate_am(
                    outfolder, card.refdes, prod_ord_sno, indent_sno,
                    verbose=verbose, register=register, session=session
                )
                if register is True:
                    serialnos.link_serialno(
                        child=card.refdes, parent=prod_ord_sno,
                        verbose=verbose, session=session
                    )
                if leaf_pb is True:
                    pb.next(note=card.refdes)
            if leaf_pb is True:
                pb.finish()
Beispiel #5
0
 def commit(self, outfolder=None, indent_sno=None, prod_ord_sno=None,
            register=False, pb_class=None, stacked_pb=False, leaf_pb=True,
            session=None):
     if self._is_done is True:
         raise NothingToProduceError
     self._generate_docs(outfolder, indent_sno, prod_ord_sno,
                         register, session)
     if register is True:
         serialnos.set_serialno_efield(
             sno=self._sno, efield=self._target_modulename,
             session=session
         )
         serialnos.link_serialno(
             child=self._sno, parent=prod_ord_sno, session=session
         )
         self._original = get_module_prototype(self._orig_modulename)
         self._target = get_module_instance(self._sno,
                                            self._target_modulename,
                                            session=session)
         self._is_done = True
Beispiel #6
0
    def commit(self,
               outfolder=None,
               indent_sno=None,
               prod_ord_sno=None,
               register=False,
               pb_class=None,
               stacked_pb=False,
               leaf_pb=True,
               session=None):
        # Serial numbers will already have been written in.
        if self._prototype.strategy['genmanifest'] is True:

            if pb_class is None:
                pb_class = TendrilProgressBar
            if leaf_pb is True:
                pb = pb_class(max=len(self.refdes))
                verbose = False
            else:
                pb = None
                verbose = True

            msg = "Generating Manifests and Linking for {0}".format(self.ident)
            print(msg)

            for card in self.modules:
                self._generate_am(outfolder,
                                  card.refdes,
                                  prod_ord_sno,
                                  indent_sno,
                                  verbose=verbose,
                                  register=register,
                                  session=session)
                if register is True:
                    serialnos.link_serialno(child=card.refdes,
                                            parent=prod_ord_sno,
                                            verbose=verbose,
                                            session=session)
                if leaf_pb is True:
                    pb.next(note=card.refdes)
            if leaf_pb is True:
                pb.finish()
Beispiel #7
0
    def _process(self, outfolder=None, manifestsfolder=None,
                 label_manager=None, register=False, force=False,
                 pb_class=None, stacked_pb=False, leaf_pb=True,
                 session=None):
        self._force = force

        if pb_class is None:
            pb_class = TendrilProgressBar

        if stacked_pb is True:
            pb = pb_class(max=8)
        else:
            pb = DummyProgressBar(max=8)

        pb.next(note="Constructing Resources for Production Order Generation")

        if outfolder is None:
            if self._order_yaml_path is not None:
                outfolder = os.path.split(self._order_yaml_path)[0]
            else:
                raise AttributeError('Output folder needs to be defined')

        if manifestsfolder is None:
            manifestsfolder = os.path.join(outfolder, 'manifests')
            if not os.path.exists(manifestsfolder):
                os.makedirs(manifestsfolder)

        if self._sno is None:
            self._sno = serialnos.get_serialno(
                    series='PROD', efield=self._title,
                    register=register, session=session
            )

        # Create Snomap
        if self._snomap_path is not None:
            with open(self._snomap_path, 'r') as f:
                self._snomap = SerialNumberMap(yaml.load(f), self._sno)
        else:
            self._snomap = SerialNumberMap({}, self._sno)

        self._snomap.set_session(session=session)
        if register is True:
            self._snomap.enable_creation()

        indent_sno = self._snomap.get_sno('indentsno')
        if register is True:
            serialnos.link_serialno(child=indent_sno, parent=self.serialno,
                                    verbose=False, session=session)

        # Create cards and deltas and so forth
        pb.next(note="Constructing Production Order Actions")
        actions = self.card_actions + self.delta_actions

        pb.next(note="Executing Production Order Actions")
        for action in actions:
            if register is False:
                action.scaffold = True
            action.set_session(session=session)
            action.commit(
                outfolder=manifestsfolder, indent_sno=indent_sno,
                prod_ord_sno=self._sno, register=register, session=session,
                pb_class=pb_class, stacked_pb=stacked_pb, leaf_pb=leaf_pb,
            )

        self._snomap.disable_creation()

        pb.next(note="Constructing Composite Output BOM")
        cobom = CompositeOutputBom(self.bomlist)

        pb.next(note="Creating Indent(s)")
        self._process_indents(
            indent_sno=indent_sno, cobom=cobom, outfolder=outfolder,
            register=register, force=force, session=session
        )

        pb.next(note="Generating Production Order Document")
        # Make production order doc
        self._last_generated_at = arrow.utcnow().isoformat()
        if self._first_generated_at is None:
            self._first_generated_at = arrow.utcnow().isoformat()
        self._dump_order_yaml(outfolder=outfolder, register=register,
                              session=session)
        self._generate_doc(outfolder=outfolder, register=register,
                           session=session)

        pb.next(note="Generating Labels")
        self.make_labels(label_manager=label_manager, pb_class=pb_class,
                         stacked_pb=stacked_pb, leaf_pb=leaf_pb)

        pb.next(note="Finalizing Production Order")
        for action in actions:
            action.scaffold = False
            action.unset_session()
        self._snomap.dump_to_file(outfolder)
        self._snomap.unset_session()

        if register is True:
            docstore.register_document(
                    serialno=self.serialno,
                    docpath=os.path.join(outfolder, 'snomap.yaml'),
                    doctype='SNO MAP', efield=self.title,
                    verbose=False, session=session
            )
        pb.finish()
        self._defined = True
Beispiel #8
0
    def _process(self, outfolder=None, manifestsfolder=None,
                 label_manager=None, register=False, force=False,
                 pb_class=None, stacked_pb=False, leaf_pb=True,
                 session=None):
        self._force = force

        if pb_class is None:
            pb_class = TendrilProgressBar

        if stacked_pb is True:
            pb = pb_class(max=8)
        else:
            pb = DummyProgressBar(max=8)

        pb.next(note="Constructing Resources for Production Order Generation")

        if outfolder is None:
            if self._order_yaml_path is not None:
                outfolder = os.path.split(self._order_yaml_path)[0]
            else:
                raise AttributeError('Output folder needs to be defined')

        if manifestsfolder is None:
            manifestsfolder = os.path.join(outfolder, 'manifests')
            if not os.path.exists(manifestsfolder):
                os.makedirs(manifestsfolder)

        if self._sno is None:
            self._sno = serialnos.get_serialno(
                    series='PROD', efield=self._title,
                    register=register, session=session
            )

        # Create Snomap
        if self._snomap_path is not None:
            with open(self._snomap_path, 'r') as f:
                self._snomap = SerialNumberMap(yaml.load(f), self._sno)
        else:
            self._snomap = SerialNumberMap({}, self._sno)

        self._snomap.set_session(session=session)
        if register is True:
            self._snomap.enable_creation()

        indent_sno = self._snomap.get_sno('indentsno')
        if register is True:
            serialnos.link_serialno(child=indent_sno, parent=self.serialno,
                                    verbose=False, session=session)

        # Create cards and deltas and so forth
        pb.next(note="Constructing Production Order Actions")
        actions = self.card_actions + self.delta_actions

        pb.next(note="Executing Production Order Actions")
        for action in actions:
            if register is False:
                action.scaffold = True
            action.set_session(session=session)
            action.commit(
                outfolder=manifestsfolder, indent_sno=indent_sno,
                prod_ord_sno=self._sno, register=register, session=session,
                pb_class=pb_class, stacked_pb=stacked_pb, leaf_pb=leaf_pb,
            )

        self._snomap.disable_creation()

        pb.next(note="Constructing Composite Output BOM")
        cobom = CompositeOutputBom(self.bomlist)

        # Assume Indent is non-empty.
        # Create indent
        pb.next(note="Creating Indent")
        indent = InventoryIndent(indent_sno, verbose=False, session=session)
        indent.create(cobom, title="FOR {0}".format(self.serialno),
                      desc=None, indent_type='production',
                      requested_by=self._ordered_by, force=force)
        indent.define_auth_chain(prod_order_sno=self.serialno,
                                 session=session, prod_order_scaffold=True)
        indent.process(outfolder=outfolder, register=register,
                       verbose=False, session=session)
        self._indents.append(indent)

        pb.next(note="Generating Production Order Document")
        # Make production order doc
        self._last_generated_at = arrow.utcnow().isoformat()
        if self._first_generated_at is None:
            self._first_generated_at = arrow.utcnow().isoformat()
        self._dump_order_yaml(outfolder=outfolder, register=register,
                              session=session)
        self._generate_doc(outfolder=outfolder, register=register,
                           session=session)

        pb.next(note="Generating Labels")
        self.make_labels(label_manager=label_manager, pb_class=pb_class,
                         stacked_pb=stacked_pb, leaf_pb=leaf_pb)

        pb.next(note="Finalizing Production Order")
        for action in actions:
            action.scaffold = False
            action.unset_session()
        self._snomap.dump_to_file(outfolder)
        self._snomap.unset_session()

        if register is True:
            docstore.register_document(
                    serialno=self.serialno,
                    docpath=os.path.join(outfolder, 'snomap.yaml'),
                    doctype='SNO MAP', efield=self.title,
                    verbose=False, session=session
            )
        pb.finish()
        self._defined = True