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.

Reply via email to