Source code for anyblok_io.bloks.io.exporter
# This file is a part of the AnyBlok project
#
# Copyright (C) 2015 Jean-Sebastien SUZANNE <jssuzanne@anybox.fr>
#
# This Source Code Form is subject to the terms of the Mozilla Public License,
# v. 2.0. If a copy of the MPL was not distributed with this file,You can
# obtain one at http://mozilla.org/MPL/2.0/.
from anyblok import Declarations
from .exceptions import ExporterException
[docs]@Declarations.register(Declarations.Model.IO)
class Exporter(Declarations.Mixin.IOMixin):
def run(self, entries):
for entry in entries:
if entry.__registry_name__ != self.model:
raise ExporterException(
"The entries must be instance of %r" % self.model)
return self.get_model(self.mode)(self).run(entries)
@classmethod
def get_external_id(cls, model):
Sequence = cls.anyblok.System.Sequence
seq_code = 'export.%s' % model
query = Sequence.query().filter(Sequence.code == seq_code)
if query.count():
sequence = query.first()
else:
sequence = Sequence.insert(formater="{code}_{seq}", code=seq_code)
return sequence.nextval()
@classmethod
def get_key_mapping(cls, entry):
Mapping = cls.anyblok.IO.Mapping
mapping = Mapping.get_from_entry(entry)
if mapping:
return mapping.key
key = cls.get_external_id(entry.__registry_name__)
Mapping.set(key, entry)
return key
def value2str(self, value, ctype, external_id=False, model=None):
formater = self.get_formater(ctype)
if external_id:
return formater.externalIdValue2str(value, model)
return formater.value2str(value, model)