Hello all.
I had a problem with my model, and here is it (just a bit of it):
import elixir
import sqlalchemy
import sqlalchemy.databases
class noticias_noticia(elixir.Entity):
id_noticia = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
titulo = elixir.Field(elixir.Unicode(200), required=True)
fonte = elixir.Field(elixir.Unicode(200), required=True)
corpo = elixir.Field(elixir.Text, required=True)
criacao = elixir.Field(elixir.DateTime, required=True)
criador = elixir.Field(sqlalchemy.databases.postgres.BIGINT)
a_partir = elixir.Field(elixir.DateTime)
ate = elixir.Field(elixir.DateTime)
autorizacao = elixir.Field(elixir.DateTime)
autorizador = elixir.Field(sqlalchemy.databases.postgres.BIGINT)
situacao = elixir.Field(elixir.Unicode(20), required=True)
noticia_id_anexos = elixir.has_many('noticia_id_anexos',
of_kind='noticias_anexo', inverse='noticia_id_anexo')
noticia_id_permissaos = elixir.has_many('noticia_id_permissaos',
of_kind='noticias_permissao', inverse='noticia_id_permissao')
noticia_id_noticias = elixir.has_many('noticia_id_noticias',
of_kind='integracao_noticia', inverse='noticia_id_noticia')
elixir.using_options(tablename='noticia')
elixir.using_table_options(schema='noticias')
def __repr__(self):
return '<noticias.noticia "%s">' % (self.id_noticia)
class noticias_arquivo(elixir.Entity):
id_arquivo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
caminho = elixir.Field(elixir.Unicode(400), required=True)
nome = elixir.Field(elixir.Unicode(200), required=True)
mime = elixir.Field(elixir.Unicode(200), required=True)
tamanho = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
required=True)
acesso = elixir.Field(elixir.Unicode(20), required=True)
md5sum = elixir.Field(elixir.Unicode(64))
arquivo_id_anexos = elixir.has_many('arquivo_id_anexos',
of_kind='noticias_anexo', inverse='arquivo_id_anexo')
arquivo_id_imagems = elixir.has_many('arquivo_id_imagems',
of_kind='noticias_imagem', inverse='arquivo_id_imagem')
arquivo_id_noticia_arquivos =
elixir.has_many('arquivo_id_noticia_arquivos',
of_kind='integracao_noticia_arquivo',
inverse='arquivo_id_noticia_arquivo')
elixir.using_options(tablename='arquivo')
elixir.using_table_options(schema='noticias')
def __repr__(self):
return '<noticias.arquivo "%s">' % (self.id_arquivo)
class noticias_anexo(elixir.Entity):
id_noticia = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
id_arquivo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
noticia_id_anexo = elixir.belongs_to('noticia_id_anexo',
of_kind='noticias_noticia', field=[id_noticia],
target_column=['id_noticia'])
arquivo_id_anexo = elixir.belongs_to('arquivo_id_anexo',
of_kind='noticias_arquivo', field=[id_arquivo],
target_column=['id_arquivo'])
elixir.using_options(tablename='anexo')
elixir.using_table_options(schema='noticias')
def __repr__(self):
return '<noticias.anexo "%s">' %
(self.id_noticia,self.id_arquivo)
class noticias_grupo(elixir.Entity):
id_grupo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
nome = elixir.Field(elixir.Unicode(200), required=True)
acesso_padrao = elixir.Field(elixir.Unicode(20), required=True)
grupo_id_permissaos = elixir.has_many('grupo_id_permissaos',
of_kind='noticias_permissao', inverse='grupo_id_permissao')
grupo_id_grupo_aplicacaos =
elixir.has_many('grupo_id_grupo_aplicacaos',
of_kind='noticias_grupo_aplicacao',
inverse='grupo_id_grupo_aplicacao')
grupo_id_noticia_grupos =
elixir.has_many('grupo_id_noticia_grupos',
of_kind='integracao_noticia_grupo', inverse='grupo_id_noticia_grupo')
elixir.using_options(tablename='grupo')
elixir.using_table_options(schema='noticias')
def __repr__(self):
return '<noticias.grupo "%s">' % (self.id_grupo)
class noticias_permissao(elixir.Entity):
id_noticia = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
id_grupo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
noticia_id_permissao = elixir.belongs_to('noticia_id_permissao',
of_kind='noticias_noticia', field=[id_noticia],
target_column=['id_noticia'])
grupo_id_permissao = elixir.belongs_to('grupo_id_permissao',
of_kind='noticias_grupo', field=[id_grupo],
target_column=['id_grupo'])
permissao_id_permissao_da_unidades =
elixir.has_many('permissao_id_permissao_da_unidades',
of_kind='noticias_permissao_de_unidade',
inverse='permissao_id_permissao_da_unidade')
elixir.using_options(tablename='permissao')
elixir.using_table_options(schema='noticias')
def __repr__(self):
return '<noticias.permissao "%s">' %
(self.id_noticia,self.id_grupo)
class noticias_imagem(elixir.Entity):
id_arquivo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
altura = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
required=True)
largura = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
required=True)
miniatura = elixir.Field(elixir.Boolean, required=True)
arquivo_id_imagem = elixir.belongs_to('arquivo_id_imagem',
of_kind='noticias_arquivo', field=[id_arquivo],
target_column=['id_arquivo'])
elixir.using_options(tablename='imagem')
elixir.using_table_options(schema='noticias')
def __repr__(self):
return '<noticias.imagem "%s">' % (self.id_arquivo)
class senai_aplicacao(elixir.Entity):
id_aplicacao = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
nome = elixir.Field(elixir.Unicode(200), required=True)
sigla = elixir.Field(elixir.Unicode(20), required=True)
id_registro = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
required=True)
tabela = elixir.Field(elixir.Text, required=True)
criacao = elixir.Field(elixir.DateTime, required=True)
alteracao = elixir.Field(elixir.DateTime)
id_criador = elixir.Field(sqlalchemy.databases.postgres.BIGINT)
id_aplicacao_criador =
elixir.Field(sqlalchemy.databases.postgres.BIGINT)
id_alterador = elixir.Field(sqlalchemy.databases.postgres.BIGINT)
id_aplicacao_alterador =
elixir.Field(sqlalchemy.databases.postgres.BIGINT)
aplicacao_id_grupo_aplicacaos =
elixir.has_many('aplicacao_id_grupo_aplicacaos',
of_kind='noticias_grupo_aplicacao',
inverse='aplicacao_id_grupo_aplicacao')
aplicacao_pa_noticias = elixir.has_many('aplicacao_pa_noticias',
of_kind='integracao_noticia', inverse='aplicacao_pa_noticia')
aplicacao_pa_unidades = elixir.has_many('aplicacao_pa_unidades',
of_kind='integracao_unidade', inverse='aplicacao_pa_unidade')
aplicacao_id_video_aplicacaos =
elixir.has_many('aplicacao_id_video_aplicacaos',
of_kind='tvsenai_video_aplicacao',
inverse='aplicacao_id_video_aplicacao')
aplicacao_pa_categorias =
elixir.has_many('aplicacao_pa_categorias',
of_kind='tvsenai_categoria', inverse='aplicacao_pa_categoria')
aplicacao_id_administradors =
elixir.has_many('aplicacao_id_administradors',
of_kind='tvsenai_administrador', inverse='aplicacao_id_administrador')
aplicacao_pa_registro_criadors =
elixir.has_many('aplicacao_pa_registro_criadors',
of_kind='senai_registro', inverse='aplicacao_pa_registro_criador')
aplicacao_pa_registro_alteradors =
elixir.has_many('aplicacao_pa_registro_alteradors',
of_kind='senai_registro', inverse='aplicacao_pa_registro_alterador')
aplicacao_id_pessoas = elixir.has_many('aplicacao_id_pessoas',
of_kind='integracao_pessoa', inverse='aplicacao_id_pessoa')
aplicacao_id_colaboradors =
elixir.has_many('aplicacao_id_colaboradors',
of_kind='integracao_colaborador', inverse='aplicacao_id_colaborador')
aplicacao_id_fornecedors =
elixir.has_many('aplicacao_id_fornecedors',
of_kind='integracao_fornecedor', inverse='aplicacao_id_fornecedor')
aplicacao_id_galeria_aplicacaos =
elixir.has_many('aplicacao_id_galeria_aplicacaos',
of_kind='galerias_galeria_aplicacao',
inverse='aplicacao_id_galeria_aplicacao')
aplicacao_pa_registro_removidos =
elixir.has_many('aplicacao_pa_registro_removidos',
of_kind='senai_registro_removido',
inverse='aplicacao_pa_registro_removido')
aplicacao_pa_categorias =
elixir.has_many('aplicacao_pa_categorias', of_kind='videos_categoria',
inverse='aplicacao_pa_categoria')
aplicacao_id_aplicacao_administradas =
elixir.has_many('aplicacao_id_aplicacao_administradas',
of_kind='videos_aplicacao_administrada',
inverse='aplicacao_id_aplicacao_administrada')
aplicacao_pa_menus = elixir.has_many('aplicacao_pa_menus',
of_kind='senai_menu', inverse='aplicacao_pa_menu')
aplicacao_id_projeto_financeiros =
elixir.has_many('aplicacao_id_projeto_financeiros',
of_kind='integracao_projeto_financeiro',
inverse='aplicacao_id_projeto_financeiro')
aplicacao_pa_rascunhos = elixir.has_many('aplicacao_pa_rascunhos',
of_kind='senai_rascunho', inverse='aplicacao_pa_rascunho')
aplicacao_pa_modulos = elixir.has_many('aplicacao_pa_modulos',
of_kind='senai_modulo', inverse='aplicacao_pa_modulo')
elixir.using_options(tablename='aplicacao')
elixir.using_table_options(schema='senai')
def __repr__(self):
return '<senai.aplicacao "%s">' % (self.id_aplicacao)
class noticias_grupo_aplicacao(elixir.Entity):
id_grupo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
id_aplicacao = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
grupo_id_grupo_aplicacao =
elixir.belongs_to('grupo_id_grupo_aplicacao',
of_kind='noticias_grupo', field=[id_grupo],
target_column=['id_grupo'])
aplicacao_id_grupo_aplicacao =
elixir.belongs_to('aplicacao_id_grupo_aplicacao',
of_kind='senai_aplicacao', field=[id_aplicacao],
target_column=['id_aplicacao'])
elixir.using_options(tablename='grupo_aplicacao')
elixir.using_table_options(schema='noticias')
def __repr__(self):
return '<noticias.grupo_aplicacao "%s">' %
(self.id_grupo,self.id_aplicacao)
class integracao_noticia_grupo(elixir.Entity):
id_grupo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
id_externo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
criacao = elixir.Field(elixir.DateTime, required=True)
alteracao = elixir.Field(elixir.DateTime)
grupo_id_noticia_grupo =
elixir.belongs_to('grupo_id_noticia_grupo', of_kind='noticias_grupo',
field=[id_grupo], target_column=['id_grupo'])
elixir.using_options(tablename='noticia_grupo')
elixir.using_table_options(schema='integracao')
def __repr__(self):
return '<integracao.noticia_grupo "%s">' %
(self.id_grupo,self.id_externo)
class integracao_noticia(elixir.Entity):
id_noticia = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
id_aplicacao = elixir.Field(sqlalchemy.databases.postgres.BIGINT)
id_externo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
required=True)
criacao = elixir.Field(elixir.DateTime, required=True)
alteracao = elixir.Field(elixir.DateTime)
noticia_id_noticia = elixir.belongs_to('noticia_id_noticia',
of_kind='noticias_noticia', field=[id_noticia],
target_column=['id_noticia'])
aplicacao_pa_noticia = elixir.belongs_to('aplicacao_pa_noticia',
of_kind='senai_aplicacao', field=[id_aplicacao],
target_column=['id_aplicacao'])
elixir.using_options(tablename='noticia')
elixir.using_table_options(schema='integracao')
def __repr__(self):
return '<integracao.noticia "%s">' % (self.id_noticia)
class integracao_noticia_arquivo(elixir.Entity):
id_arquivo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
primary_key=True, required=True)
id_externo = elixir.Field(sqlalchemy.databases.postgres.BIGINT,
required=True)
criacao = elixir.Field(elixir.DateTime, required=True)
alteracao = elixir.Field(elixir.DateTime)
arquivo_id_noticia_arquivo =
elixir.belongs_to('arquivo_id_noticia_arquivo',
of_kind='noticias_arquivo', field=[id_arquivo],
target_column=['id_arquivo'])
elixir.using_options(tablename='noticia_arquivo')
elixir.using_table_options(schema='integracao')
def __repr__(self):
return '<integracao.noticia_arquivo "%s">' % (self.id_arquivo)
And here is the test (I put some prints in create_keys):
>>> from model import *
>>> elixir.metadata.bind = "postgresql+psycopg2://sgn2:sgn2@copernico/senai"
>>> for item in elixir.entities:
... print item
... elixir.setup_entities([item])
...
<class 'model.noticias_noticia'>
<class 'model.noticias_arquivo'>
<class 'model.noticias_anexo'>
target_columns: [Column('id_noticia', BIGINT(), table=<noticia>,
primary_key=True, nullable=False)]
self.field[0]: Property(id_noticia, <class 'model.noticias_anexo'>)
key_num, target_col: 0 noticia.id_noticia
col: id_noticia
self, col: Property(noticia_id_anexo, <class 'model.noticias_anexo'>)
id_noticia
target_columns: [Column('id_arquivo', BIGINT(), table=<arquivo>,
primary_key=True, nullable=False)]
self.field[0]: Property(id_arquivo, <class 'model.noticias_anexo'>)
key_num, target_col: 0 arquivo.id_arquivo
col: id_arquivo
self, col: Property(arquivo_id_anexo, <class 'model.noticias_anexo'>)
id_arquivo
<class 'model.noticias_grupo'>
<class 'model.noticias_permissao'>
target_columns: [Column('id_noticia', BIGINT(), table=<noticia>,
primary_key=True, nullable=False)]
self.field[0]: Property(id_noticia, <class
'model.noticias_permissao'>)
key_num, target_col: 0 noticia.id_noticia
col: id_noticia
self, col: Property(noticia_id_permissao, <class
'model.noticias_permissao'>) id_noticia
target_columns: [Column('id_grupo', BIGINT(), table=<grupo>,
primary_key=True, nullable=False)]
self.field[0]: Property(id_grupo, <class 'model.noticias_permissao'>)
key_num, target_col: 0 grupo.id_grupo
col: id_grupo
self, col: Property(grupo_id_permissao, <class
'model.noticias_permissao'>) id_grupo
<class 'model.noticias_imagem'>
target_columns: [Column('id_arquivo', BIGINT(), table=<arquivo>,
primary_key=True, nullable=False)]
self.field[0]: Property(id_arquivo, <class 'model.noticias_imagem'>)
key_num, target_col: 0 arquivo.id_arquivo
col: id_arquivo
self, col: Property(arquivo_id_imagem, <class
'model.noticias_imagem'>) id_arquivo
<class 'model.senai_aplicacao'>
<class 'model.noticias_grupo_aplicacao'>
target_columns: [Column('id_grupo', BIGINT(), table=<grupo>,
primary_key=True, nullable=False)]
self.field[0]: Property(id_grupo, <class
'model.noticias_grupo_aplicacao'>)
key_num, target_col: 0 grupo.id_grupo
col: id_grupo
self, col: Property(grupo_id_grupo_aplicacao, <class
'model.noticias_grupo_aplicacao'>) id_grupo
target_columns: [Column('id_aplicacao', BIGINT(), table=<aplicacao>,
primary_key=True, nullable=False)]
self.field[0]: Property(id_aplicacao, <class
'model.noticias_grupo_aplicacao'>)
key_num, target_col: 0 aplicacao.id_aplicacao
col: id_aplicacao
self, col: Property(aplicacao_id_grupo_aplicacao, <class
'model.noticias_grupo_aplicacao'>) id_aplicacao
<class 'model.integracao_noticia_grupo'>
target_columns: [Column('id_grupo', BIGINT(), table=<grupo>,
primary_key=True, nullable=False)]
self.field[0]: Property(id_grupo, <class
'model.integracao_noticia_grupo'>)
key_num, target_col: 0 grupo.id_grupo
col: id_grupo
self, col: Property(grupo_id_noticia_grupo, <class
'model.integracao_noticia_grupo'>) id_grupo
<class 'model.integracao_noticia'>
target_columns: [Column('id_noticia', BIGINT(), table=<noticia>,
primary_key=True, nullable=False)]
self.field[0]: Property(id_noticia, <class
'model.integracao_noticia'>)
key_num, target_col: 0 noticia.id_noticia
col: id_noticia
self, col: Property(noticia_id_noticia, <class
'model.integracao_noticia'>) id_noticia
target_columns: [Column('id_aplicacao', BIGINT(), table=<aplicacao>,
primary_key=True, nullable=False)]
self.field[0]: Property(id_aplicacao, <class
'model.integracao_noticia'>)
key_num, target_col: 0 aplicacao.id_aplicacao
col: None
self, col: Property(aplicacao_pa_noticia, <class
'model.integracao_noticia'>) None
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "elixir/entity.py", line 951, in setup_entities
method()
File "elixir/entity.py", line 240, in setup_relkeys
self.call_builders('create_non_pk_cols')
File "elixir/entity.py", line 481, in call_builders
getattr(builder, what)()
File "elixir/relationships.py", line 451, in create_non_pk_cols
self.create_keys(False)
File "elixir/relationships.py", line 725, in create_keys
fk_colnames.append(col.key)
AttributeError: 'NoneType' object has no attribute 'key'
>>>
Any help? I'm not sure what is happening with it...
Regards,
Daniel Cristian Cruz
--
You received this message because you are subscribed to the Google Groups
"SQLElixir" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlelixir?hl=en.