Skip to content
Snippets Groups Projects
Commit 93ff2a63 authored by JORGE SASIAIN's avatar JORGE SASIAIN
Browse files

Products and product blocks for trunk

parent 20143bb7
No related branches found
No related tags found
No related merge requests found
# A generic, single database configuration.
[alembic]
# template used to generate migration files
file_template = %%(year)d-%%(month).2d-%%(day).2d_%%(rev)s_%%(slug)s
# set to 'true' to run the environment during
# the 'revision' command, regardless of autogenerate
# revision_environment = false
script_location = migrations
version_locations = %(here)s/migrations/versions/schema
# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = WARN
handlers = console
qualname =
[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
[logger_alembic]
level = INFO
handlers =
qualname = alembic
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%S
\ No newline at end of file
File added
import logging
import os
from alembic import context
from sqlalchemy import engine_from_config, pool
import orchestrator
from orchestrator.db.database import BaseModel
from orchestrator.settings import app_settings
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config
# Interpret the config file for Python logging.
# This line sets up loggers basically.
logger = logging.getLogger("alembic.env")
config.set_main_option("sqlalchemy.url", app_settings.DATABASE_URI)
# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
target_metadata = BaseModel.metadata
# other values from the config, defined by the needs of env.py,
# can be acquired:
# my_important_option = config.get_main_option("my_important_option")
# ... etc.
def run_migrations_offline() -> None:
"""Run migrations in 'offline' mode.
This configures the context with just a URL
and not an Engine, though an Engine is acceptable
here as well. By skipping the Engine creation
we don't even need a DBAPI to be available.
Calls to context.execute() here emit the given string to the
script output.
"""
url = config.get_main_option("sqlalchemy.url")
context.configure(
url=url, target_metadata=target_metadata, literal_binds=True, dialect_opts={"paramstyle": "named"}
)
with context.begin_transaction():
context.run_migrations()
def run_migrations_online() -> None:
"""Run migrations in 'online' mode.
In this scenario we need to create an Engine
and associate a connection with the context.
"""
# this callback is used to prevent an auto-migration from being generated
# when there are no changes to the schema
# reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html
def process_revision_directives(context, revision, directives): # type: ignore
if getattr(config.cmd_opts, "autogenerate", False):
script = directives[0]
if script.upgrade_ops.is_empty():
directives[:] = []
logger.info("No changes in schema detected.")
engine = engine_from_config(
config.get_section(config.config_ini_section), prefix="sqlalchemy.", poolclass=pool.NullPool
)
connection = engine.connect()
context.configure(
connection=connection,
target_metadata=target_metadata,
process_revision_directives=process_revision_directives,
compare_type=True,
)
try:
with context.begin_transaction():
context.run_migrations()
finally:
connection.close()
if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()
from orchestrator.migrations.helpers import *
# Write your own helper functions below this line.
"""${message}.
Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}
"""
import sqlalchemy as sa
from alembic import op
${imports if imports else ""}
# revision identifiers, used by Alembic.
revision = ${repr(up_revision)}
down_revision = ${repr(down_revision)}
branch_labels = ${repr(branch_labels)}
depends_on = ${repr(depends_on)}
def upgrade() -> None:
${upgrades if upgrades else "pass"}
def downgrade() -> None:
${downgrades if downgrades else "pass"}
from typing import Optional
from orchestrator.domain.base import ProductBlockModel
from orchestrator.types import SubscriptionLifecycle
class TrunkBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="TrunkBlock"):
trunk_id: Optional[int] = None
geant_s_sid: Optional[str] = None
name: Optional[str] = None
class TrunkBlockProvisioning(TrunkBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
trunk_id: Optional[int] = None
geant_s_sid: Optional[str] = None
name: str
class TrunkBlock(TrunkBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
trunk_id: int
geant_s_sid: str
name: str
from typing import Optional
from orchestrator.domain.base import ProductBlockModel
from orchestrator.types import SubscriptionLifecycle
from products.product_blocks.trunk import TrunkBlock, TrunkBlockInactive, TrunkBlockProvisioning
class TrunkConfigBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="TrunkConfigBlock"):
trunk: TrunkBlockInactive
trunk_config_id: Optional[int] = None
class TrunkConfigBlockProvisioning(TrunkConfigBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
trunk: TrunkBlockProvisioning
trunk_config_id: Optional[int] = None
class TrunkConfigBlock(TrunkConfigBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
trunk: TrunkBlock
trunk_config_id: int
from typing import Optional
from orchestrator.domain.base import ProductBlockModel
from orchestrator.types import SubscriptionLifecycle
from products.product_blocks.trunk_config import TrunkConfigBlock, TrunkConfigBlockInactive, TrunkConfigBlockProvisioning
class TrunkConfigCommonBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="TrunkConfigCommonBlock"):
trunk_config: TrunkConfigBlockInactive
trunk_config_common_id: Optional[int] = None
speed: Optional[str] = None
is_leased_line: Optional[bool] = None
isis_metric: Optional[int] = None
minimum_links: Optional[int] = None
class TrunkConfigCommonBlockProvisioning(TrunkConfigCommonBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
trunk_config: TrunkConfigBlockProvisioning
trunk_config_common_id: Optional[int] = None
speed: str
is_leased_line: Optional[bool] = None
isis_metric: int
minimum_links: int
class TrunkConfigCommonBlock(TrunkConfigCommonBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
trunk_config: TrunkConfigBlock
trunk_config_common_id: int
speed: str
is_leased_line: bool
isis_metric: int
minimum_links: int
from typing import Optional
from orchestrator.domain.base import ProductBlockModel
from orchestrator.types import SubscriptionLifecycle
from products.product_blocks.trunk_config import TrunkConfigBlock, TrunkConfigBlockInactive, TrunkConfigBlockProvisioning
class TrunkConfigSideBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="TrunkConfigSideBlock"):
trunk_config: TrunkConfigBlockInactive
trunk_config_side_id: Optional[int] = None
name: Optional[str] = None
ae_name: Optional[str] = None
geant_a_sid: Optional[str] = None
ipv4_address: Optional[str] = None
ipv6_address: Optional[str] = None
members: Optional[list] = None
class TrunkConfigSideBlockProvisioning(TrunkConfigSideBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
trunk_config: TrunkConfigBlockProvisioning
trunk_config_side_id: Optional[int] = None
name: str
ae_name: Optional[str] = None
geant_a_sid: Optional[str] = None
ipv4_address: Optional[str] = None
ipv6_address: Optional[str] = None
members: Optional[list] = None
class TrunkConfigSideBlock(TrunkConfigSideBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
trunk_config: TrunkConfigBlock
trunk_config_side_id: int
name: str
ae_name: str
geant_a_sid: str
ipv4_address: str
ipv6_address: str
members: list
from orchestrator.domain.base import SubscriptionModel
from orchestrator.types import SubscriptionLifecycle
from products.product_blocks.trunk import TrunkBlock, TrunkBlockInactive, TrunkBlockProvisioning
class TrunkInactive(SubscriptionModel, is_base=True, lifecycle=[SubscriptionLifecycle.INITIAL]):
trunk: TrunkBlockInactive
class TrunkProvisioning(TrunkInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
trunk: TrunkBlockProvisioning
class Trunk(TrunkProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
trunk: TrunkBlock
from orchestrator.domain.base import SubscriptionModel
from orchestrator.types import SubscriptionLifecycle
from products.product_blocks.trunk_config import TrunkConfigBlock, TrunkConfigBlockInactive, TrunkConfigBlockProvisioning
class TrunkInactive(SubscriptionModel, is_base=True, lifecycle=[SubscriptionLifecycle.INITIAL]):
trunk_config: TrunkConfigBlockInactive
class TrunkProvisioning(TrunkInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
trunk_config: TrunkConfigBlockProvisioning
class Trunk(TrunkProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
trunk_config: TrunkConfigBlock
from orchestrator.domain.base import SubscriptionModel
from orchestrator.types import SubscriptionLifecycle
from products.product_blocks.trunk_config_common import TrunkConfigCommonBlock, TrunkConfigCommonBlockInactive, TrunkConfigCommonBlockProvisioning
class TrunkInactive(SubscriptionModel, is_base=True, lifecycle=[SubscriptionLifecycle.INITIAL]):
trunk_config_common: TrunkConfigCommonBlockInactive
class TrunkProvisioning(TrunkInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
trunk_config_common: TrunkConfigCommonBlockProvisioning
class Trunk(TrunkProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
trunk_config_common: TrunkConfigCommonBlock
from orchestrator.domain.base import SubscriptionModel
from orchestrator.types import SubscriptionLifecycle
from products.product_blocks.trunk_config_side import TrunkConfigSideBlock, TrunkConfigSideBlockInactive, TrunkConfigSideBlockProvisioning
class TrunkInactive(SubscriptionModel, is_base=True, lifecycle=[SubscriptionLifecycle.INITIAL]):
trunk_config_side: TrunkConfigSideBlockInactive
class TrunkProvisioning(TrunkInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
trunk_config_side: TrunkConfigSideBlockProvisioning
class Trunk(TrunkProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
trunk_config_side: TrunkConfigSideBlock
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment