openERP Enterprise Management Modul

E 'vako raja, poceo ja sa svojim diplomskim projektom. Ukratko radi se o slijedecem:

Programiram jedan modul za openERP koji bi sluzio kao interface izmedju Java aplikacije i samog openERP-a a funkcija mu je obezbjedjivanje relevantnih statistickih podataka frontendu.

Ideja je slijedeca: frontend je java aplikacija (servlet ili stand-alone) pomocu koje se moze zatraziti prikaz odredjenih statistickih podataka, tipa, prihodi u odredjenom mjesecu, prihodi od poreza, likvidnost i slicni pokazatelji poslovanja firme. Nakon sto se u frontednu zatrazi odredjeni ekonomski pokazatelj, XML-RPC-om stize upit za python baziranu backend aplikaciju. Zadatak backenda je da se zarovi u openERP bazu podataka (Postgres), izvuce potrebne podatke, formatira ih, izracuna sta treba, i obradjene podatke, opet preko XML-RPc-a vrati java frontendu koji bi to sve lijepo graficki prikazao.

Moj dio projekta je programiranje backenda. Na ovoj temi cu se javljati sa prije svega problemima, ali i dijelovima code-a, sugestijama i idejama, mozda nekome bude od koristi.

Za pocetak razvojna platforma:

OS: Slackware 1337
Python: 2.6
IDE: Eclipse Helios
openERP (client/server) 6.0.2
Postgresql: 9.0.3
pgadmin3: 1.12.0

Vec mi se javio mali problemcic sa pgadminom, javim sutra tacno o cemu se radi.

EDIT: pgadmin3 1.12.0

Dakle. moj problem sa pgadminom:

kada se konektujem na localhost dobijem ovo:

This version of pgAdmin has only been tested with PostgreSQL version 8.4 and below and may not function correctly with this server. Please upgrade pgAdmin.

Kliknem ok i dobijem ovo:

[code]An error has occurred:

ERROR: column “datconfig” does not exist
LINE 1: …b.dattablespace AS spcoid, spcname, datallowconn, datconfig,…[/code]
Jos jednom ok donosi ovo:

[code]An error has occurred:

Column not found in pgSet: rolconfig[/code]
Nakon toga se spojim na localhost, ali mi je dio Databases prazan, odnosno pokazuje ovo:

Kada kliknem na Databases daje mi ovaj prvi error gore.

Eh sad, znam sta je problem i znam kako to mogu rijesiti, downgrade bazu na 8.x.x. Medjutim, radije bih popravljao pgadmin da radi sa 9.x.x.

Any ideas?

Adis?

Ako odeš na stranicu pgAdmina, tamo fino piše da je podrška za PostgreSQL 9.0 dostupna od verzije 1.12.0, a ti koristiš 1.10.1 :smiley:

Pa hvala.

Ovo mi doslo kao default install na 1337. Prebacim sada na 1.12.0.

btw, od koje verzije wxPythona zavisi pgadmin3 1.12.0?

EDIT: rjeseno, instaliran 1.12.0 i radi ko sat. me likes slackware.

Evo ga slijedeci problemcic.

Naime, imam Postgres server i hocu da Python aplikacija prvo provjeri da li neka baza postoji, ako ne postoji onda da je kreira i nakon toga napravi odredjene tabele. Ako baza postoji, onda da se samo nakaci na bazu i napravi tabele. Za sada cemo pretpostaviti da je baza, ukoliko i postoji, prazna.

Imam ovo: http://paste.linux.org.ba/paste/1495

Malo mi je bezveze sto se jednom konektujem na server da napravim bazu, pa se diskonektujem, pa se opet konektujem na tu bazu da bih napravio tabele and such. Ima li kakav bolji nacin?

I kojeg su tipa ovi objekti conn i cursor? Odnosno, da li se mogu konektovati na server, napraviti bazu i odmah se konektovati na bazu bez ovog prvog disconnect bloka? Da li u tom slucaju pravim duplu konekciju?

Fala.

http://www.google.ba/search?sourceid=chrome&ie=UTF-8&q=postgres+if+exists

Ma dobro, ovaj if exists dio mi je ok. Vise mi je problematicno ovo duplo konektovanje.

Tnx anyway.

EDIT: plus, ovo je uglavnom dokumentacija za DROP TABLE IF EXISTS, sto u mom slucaju i nije bas najbolje rjesenje. Pretpostavljam da se slicno moze koristiti i DROP DATABASE IF EXISTS ali ja necu da drop-am bazu ako vec postoji nego da se konektujem na nju.

Da nije tebe na forumu, sveb’ se vrtilo oko podesavanja konekcije na ubuntu :smiley:

Pogledaj ovaj katalog:

http://www.postgresql.org/docs/8.4/static/catalog-pg-database.html

[quote=adis]Pogledaj ovaj katalog:

http://www.postgresql.org/docs/8.4/static/catalog-pg-database.html[/quote]
Jesi siguran da je ovaj katalog u pitanju? Ne mogu da skontam sta bi mi odavde koristilo…

Ma dobro, ovaj if exists dio mi je ok. Vise mi je problematicno ovo duplo konektovanje.

Tnx anyway.

EDIT: plus, ovo je uglavnom dokumentacija za DROP TABLE IF EXISTS, sto u mom slucaju i nije bas najbolje rjesenje. Pretpostavljam da se slicno moze koristiti i DROP DATABASE IF EXISTS ali ja necu da drop-am bazu ako vec postoji nego da se konektujem na nju.[/quote]
portaj ovu skriptu

[code]#!/bin/sh
########################################################

- create a test database if it does not exist.

if necessary some variables may be passed

with arguments; db password, path to psql,

name of the database, db owner… anything else

#-----------------------------------------------------

if we get the db password, we put it in our temp

env., otherwise psql may pause and prompt for it.

if [ “$1” ] ; then
export PGPASSWORD=“$1”
fi

may check the args to see if dbname

was provided

dbname=test

sql to check whether given database exist

sql1=“select count(1) from pg_catalog.pg_database where datname = ‘$dbname’”

sql to create database (add other params as needed)

sql2=“create database $dbname”

depending on how PATH is set psql may require a fully qualified path

cmd=“psql -t -c "$sql1"”

db_exists=eval $cmd

if [ $db_exists -eq 0 ] ; then

create the database, discard the output

cmd=“psql -t -c "$sql2" > /dev/null 2>&1”
eval $cmd
fi

exit with success status

exit 0[/code]
http://bytes.com/topic/postgresql/answers/577571-create-database-test-if-not-exists
http://bytes.com/topic/postgresql/answers/636016-create-database-if-not-exists

^^

[code]mysql> create database if not exists nja;
Query OK, 1 row affected (0.03 sec)

mysql>[/code]

@nidla drug, hvala na idejama, probam sutra ove skripte pa javim sta i kako.

Mislim da bi se moglo iz pythona to i jednostavnije provjeriti samo nisam siguran kako. Moj kolega iz kancelarije koji vec dugo programira u pythonu kaze da je potpuno ok napraviti jednu konekciju na server, napraviti bazu, diskonektovati se, te ponovo se konektovati direktno na bazu i raditi sta vec treba. Meni to malo njaaa. Ja bih to htio odraditi sa jednom konekcijom na server i onda na neki nacin “upgrade-ovati” konekciju spajanjem na bazu.

Idealno bi bilo ovako:

  1. konektovanje na PG server
  2. provjera da li baza postoji
    2a. ako ne - CREATE database
  3. konektovanje na bazu
  4. odraditi sve sto treba
  5. commit
  6. disconnect

Ovo pod 3 bi bilo idealno odraditi kao upgrade postojece konekcije, ako je to moguce.

Nadam se da sam iole jasno objasni sta bih htio uraditi.

Plus, ovo sve treba odraditi iz Pythona, po mogucnosti bez eksternih bash ili bilo kojih drugih skripti.

[quote=Amar]Idealno bi bilo ovako:

  1. konektovanje na PG server
  2. provjera da li baza postoji
    2a. ako ne - CREATE database
  3. konektovanje na bazu
  4. odraditi sve sto treba
  5. commit
  6. disconnect[/quote]
    Na PostgreSQL nije moguće uraditi konekciju na server pa uraditi “selectdb” kao u MySQL. Svaki put se moraš konektovati na konkretnu bazu (uvijek je dostupna ‘template1’ baza).

Vozdra raja,

evo jedan simpatican problemcic.

Naime, imam Excel fajl (diamonds.xls) koji se sastoji od jedne linije:

Svaka pojedinacna vrijednost je zapisana u posebno polje u excelu.

Hocu da iz Pythona procitam ovu liniju ubacim je u dictionary gdje bi skoro svako polje bilo value a dobilo bi i predefined key. Za sada sam napisao ovo:

[code]’’'
Created on Jun 21, 2011

@author: amar
’’'
from datetime import date
from xlrd import open_workbook, xldate_as_tuple
from os import chdir

chdir(’/home/amar/Documents/python’)

book = open_workbook(‘diamonds.xls’)
sheet = book.sheet_by_index(0)
norm = sheet.row_values(0)

date_value = xldate_as_tuple(sheet.cell(0,8).value,book.datemode)
datum = date(*date_value[:3])
print datum

dia_dict={‘yrx_dia_supplier_pid’:str(int(norm[0])),
‘yrx_dia_shape’:str(norm[1]).lower(),
‘yrx_dia_carat’:norm[2],
‘yrx_dia_color’:str(norm[3]),
‘yrx_dia_clarity’:str(norm[5]),
‘yrx_dia_certificate’:str(norm[6]),
‘yrx_dia_certificate_no’:str(norm[7]),

      'yrx_dia_certificate_date':datum,
      'yrx_dia_polish':str(norm[10]),
      'yrx_dia_fluorescence':str(norm[11]),
      'yrx_dia_costs':norm[15],
      'yrx_dia_measurement1':norm[16],
      'yrx_dia_measurement2':norm[17],
      'yrx_dia_measurement3':norm[18],
      'yrx_dia_depth':norm[19]/100,
      'yrx_dia_table':norm[20]/100,
      'yrx_dia_culet':str(norm[21]),
      'yrx_dia_girdle':str(norm[22])
      }

print dia_dict[/code]
Eh sad, imam dva problema.

  1. Datum:

date_value = xldate_as_tuple(sheet.cell(0,8).value,book.datemode) datum = date(*date_value[:3]) print datum
Ovaj dio mi preformatira datum u 2009-7-14 sto slijedeca linija print lijepo i pokazuje. (bio bih sretniji da mi datum prikaze u ovom formatu: 14.7.2009 ali i sa ovim mogu prezivjeti).
Problem je kada tu varijablu datum prebacim u dictionary

prilikom printanja dictionary-a, za datum par key:value dobijem slijedece:

sto naravno nije lijepo.

  1. Hyperlink

Osmo polje u tabeli (ili sedmo kako ga python cita) je string

Medjutim, to je samo ono sto je prikazano u Excel tabeli. Ustvari ispod se nalazi link, recimo na http://www.google.ba

Sada bih trebao na slican nacin napraviti par key:value gdje mi je value ovaj hyperlink.

Nasao sam ovo kao moguce rjesenje:

http://groups.google.com/group/python-excel/browse_thread/thread/7144b383499d1dc5?pli=1

ali mi javlja da attribute hyperlink_list doesn’t exist.

Eto, valjda sam kako treba objasnio.

Feel free da ubacite bruku dobrih ideja :slight_smile:

EDIT:

Datum sredjen.

Ostaje hyperlink.