# coding: utf-8
"""An implementation of the original MoClo ToolKit for the Python MoClo library.
.. image:: https://media.springernature.com/original/springer-static/image/chp%3A10.1007%2F978-1-0716-0908-8_8/MediaObjects/468902_1_En_8_Fig2_HTML.png
:target: https://link.springer.com/protocol/10.1007/978-1-0716-0908-8_8
References:
1. `Weber, E., Engler, C., Gruetzner, R., Werner, S., Marillonnet, S. (2011).
A Modular Cloning System for Standardized Assembly of Multigene Constructs.
PLOS ONE, 6(2), e16765.
<https://doi.org/10.1371/journal.pone.0016765>`_.
2. `Werner, S., Engler, C., Weber, E., Gruetzner, R., & Marillonnet, S. (2012).
Fast track assembly of multigene constructs using Golden Gate cloning
and the MoClo system. Bioengineered, 3(1), 38–43.
<https://doi.org/10.4161/bbug.3.1.18223>`_.
3. `Marillonnet, S., Werner, S. (2020).
Assembly of Multigene Constructs Using the Modular Cloning System
MoClo. Methods Mol Biol. 2020;2205:125-141.
<https://10.1007/978-1-0716-0908-8_8>`_.
"""
from __future__ import absolute_import
from __future__ import unicode_literals
from Bio.Restriction import BsaI, BpiI
from ..core import parts, modules, vectors
__author__ = "Martin Larralde <martin.larralde@ens-paris-saclay.fr>"
__version__ = (
__import__("pkg_resources")
.resource_string(__name__, "moclo.version")
.strip()
.decode("ascii")
)
# VECTORS ####################################################################
[docs]class MoCloEntryVector(vectors.EntryVector):
"""A MoClo entry vector.
References:
*Weber et al.*, Figure 2A.
"""
cutter = BpiI
[docs] @classmethod
def structure(cls):
return (
"GGTCTC" # BsaI
"N"
"(NNNN)" # Downstream overhang
"(NN"
"GTCTTC" # BpiI
"N*" # Placeholder sequence
"GAAGAC" # BpiI
"NN)"
"(NNNN)" # Upstream overhang
"N"
"GAGACC" # BsaI
)
[docs]class MoCloCassetteVector(vectors.CassetteVector):
"""A MoClo cassette vector.
References:
*Weber et al.*, Figure 4A.
"""
cutter = BsaI
[docs] @classmethod
def structure(cls): # noqa: D105
return (
"GAAGAC" # BpiI
"NN"
"NNNN" # Cassette upstream overhang
"(NNNN)" # Cassette vector downstream overhang
"(N"
"GAGACC" # BsaI
"N*" # Placeholder sequence
"GGTCTC" # BsaI
"N)"
"(NNNN)" # Cassette vector upstream overhang
"NNNN" # Cassette downstream overhang
"NN"
"GTCTTC" # BbsI
)
class MoCloSingleCassetteVector(vectors.CassetteVector):
"""An original MoClo single cassette vector.
These plasmids allow obtaining plasmids ready for plant transformation
containing only a single transcription unit, assembled directly from
entries, without using an intermediate *E. coli* plasmid.
Danger:
The resulting plasmid will not be a valid `MoCloCassette`!
References:
`AddGene MoClo <https://www.addgene.org/cloning/moclo/marillonnet/>`_
construct reference.
"""
cutter = BsaI
[docs]class MoCloDeviceVector(vectors.DeviceVector):
"""An original MoClo device vector.
References:
*Weber et al.*, Figure 4A.
"""
cutter = BpiI
# MODULES ####################################################################
[docs]class MoCloProduct(modules.Product):
"""An original MoClo product.
"""
cutter = BpiI
[docs]class MoCloEntry(modules.Entry):
"""An original MoClo entry.
"""
cutter = BsaI
[docs]class MoCloCassette(modules.Cassette):
"""An original MoClo cassette.
"""
cutter = BpiI
# PARTS ######################################################################
# Abstract ###################################################################
class MoCloPart(parts.AbstractPart):
"""An original MoClo standard part.
A part is a plasmid with standardized flanking overhang sequences
that allows immediate type recognition.
"""
cutter = BsaI
signature = NotImplemented
# Level 0 ####################################################################
[docs]class MoCloPro(MoCloPart, MoCloEntry):
"""An original MoClo promoter part.
"""
signature = ("GGAG", "TACT")
[docs]class MoClo5U(MoCloPart, MoCloEntry):
"""An original MoClo 5' UTR part.
"""
signature = ("TACT", "AATG")
[docs]class MoClo5Uf(MoCloPart, MoCloEntry):
"""An original MoClo 5'UTR part for N-terminal tag linkage.
"""
signature = ("TACT", "CCAT")
[docs]class MoCloNTag(MoCloPart, MoCloEntry):
"""An original MoClo N-terminal tag part.
"""
signature = ("CCAT", "AATG")
[docs]class MoCloPro5U(MoCloPart, MoCloEntry):
"""An original MoClo promoter fused with a 5'UTR part.
"""
signature = ("GGAG", "AATG")
[docs]class MoCloPro5Uf(MoCloPart, MoCloEntry):
"""An original MoClo promoter fused with a 5'UTR for N-terminal linkage.
"""
signature = ("GGAG", "CCAT")
[docs]class MoCloCDS1(MoCloPart, MoCloEntry):
"""An original MoClo CDS1.
"""
signature = ("AATG", "GCTT")
[docs]class MoCloCDS1ns(MoCloPart, MoCloEntry):
"""An original MoClo CDS1 without STOP codon for C-terminal tag linkage.
"""
signature = ("AATG", "TTCG")
[docs]class MoCloSP(MoCloPart, MoCloEntry):
"""An original MoClo signal peptide part."""
signature = ("AATG", "AGGT")
[docs]class MoCloCDS2(MoCloPart, MoCloEntry):
"""An original MoClo CDS2 part.
"""
signature = ("AGGT", "GCTT")
[docs]class MoCloCDS2ns(MoCloPart, MoCloEntry):
"""An original MoClo CDS2 for C-terminal tag linkage.
"""
signature = ("AGGT", "TTCG")
[docs]class MoCloCTag(MoCloPart, MoCloEntry):
"""An original MoClo C-terminal tag part.
"""
signature = ("TTCG", "GCTT")
[docs]class MoClo3U(MoCloPart, MoCloEntry):
"""An original MoClo 3'UTR part.
"""
signature = ("GCTT", "GGTA")
[docs]class MoCloTer(MoCloPart, MoCloEntry):
"""An original MoClo terminator part.
"""
signature = ("GGTA", "CGCT")
[docs]class MoClo3UTer(MoCloPart, MoCloEntry):
"""An original MoClo terminator part.
"""
signature = ("GCTT", "CGCT")
[docs]class MoCloGene(MoCloPart, MoCloEntry):
"""An complete transcription unit stored as an original MoClo part.
"""
signature = ("GGAG", "CGCT")
# Level 0 ####################################################################
[docs]class MoCloEndLinker(MoCloPart, MoCloCassette):
"""An Icon Genetic end linker part.
References:
*Weber et al.*, Figure 5.
"""
signature = ("NNNN", "GGGA")
# Level M ####################################################################
[docs]class MoCloLevelMEndLinker(MoCloPart, MoCloCassette):
signature = ("NNNN", "GGGA")
# FIXME: add prefix BsaI
[docs] @classmethod
def structure(cls):
return super(MoCloLevelMEndLinker, cls).structure()
[docs]class MoCloLevelMVector(MoCloPart, MoCloDeviceVector):
cutter = BpiI
signature = ("GGGA", "NNNN")
# FIXME: add prefix BsaI
[docs] @classmethod
def structure(cls):
return super(MoCloLevelMVector, cls).structure()
# Level P ####################################################################
[docs]class MoCloLevelPEndLinker(MoCloPart, MoCloEntry): # FIXME: hierarchy ?
cutter = BsaI
signature = ("NNNN", "GGGA")
# FIXME: add prefix BpiI
[docs] @classmethod
def structure(cls):
return super(MoCloLevelPEndLinker, cls).structure()
[docs]class MoCloLevelPVector(MoCloPart, MoCloCassetteVector): # FIXME: hierarchy ?
cutter = BsaI
signature = ("GGGA", "NNNN")
# FIXME: add prefix BpiI
[docs] @classmethod
def structure(cls):
return super(MoCloLevelPVector, cls).structure()