Server-tools: [RFC] ๊ธฐ๋Šฅ์„์œ„ํ•œ ์ƒˆ๋กœ์šด api.groups ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ

์— ๋งŒ๋“  2017๋…„ 08์›” 22์ผ  ยท  34์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: OCA/server-tools

์•ˆ๋…•ํ•˜์„ธ์š”,

๋‚˜๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•œ๋‹ค.

@api.groups('group_1', 'group_2', '...')
def function_name(self, args):
    ...

<button name='function_name' /> ์™€ ๊ฐ™์€ xml ํŒŒ์ผ์—์„œ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์žฅ์‹ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ์•ก์„ธ์Šค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ ๋œ ๊ทธ๋ฃน ์ค‘ ํ•˜๋‚˜์˜ ๊ตฌ์„ฑ์›์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ Œ๋”๋ง ๋ทฐ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ ๋œ ๊ทธ๋ฃน์˜ ๊ตฌ์„ฑ์›์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋ฒ„ํŠผ์ด ์ˆจ๊ฒจ์ง‘๋‹ˆ๋‹ค.

์ด ์ƒˆ๋กœ์šด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ xml RPC์— ์˜ํ•ด ์ˆจ๊ฒจ์ง„ ๋ฒ„ํŠผ์˜ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœ ํ•  ์ˆ˜์žˆ๋Š” ๋ณด์•ˆ ์œ„๋ฐ˜์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ ๋‹ค๋ฅธ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ @ api.add_groups ๋˜๋Š” @ api.remove_groups๊ฐ€ ๋ชจ๋ธ์„ ์ƒ์†ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ชจ๋“ˆ์—์„œ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์˜๊ฒฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋„ˆ๋ฌด ๋‚˜์œ ocapi ์ด (๊ฐ€) ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. : smile_cat :

๋ชจ๋“  34 ๋Œ“๊ธ€

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.-๋ชจํ˜ธํ•œ ๋ณด์•ˆ (๋ฒ„ํŠผ ์ˆจ๊ธฐ๊ธฐ)์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์งˆ๋ฌธ์€ ์ด๊ฒƒ์„ ์–ด๋””์— ๋‘˜ ๊ฒƒ์ธ๊ฐ€์ž…๋‹ˆ๋‹ค. api.foreach ๊ตฌํ˜„์ด ํฌํ•จ ๋œ OCA Python ๋ชจ๋“ˆ ์„ ๋งŒ๋“ค์—ˆ์ง€ ๋งŒ OCA ์ „๋ฉด์œผ๋กœ ๊ฐ€์ ธ ์˜ค๋Š” ๋ฐ๋Š” ๋ณ„๋‹ค๋ฅธ ์›€์ง์ž„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ OCA API ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @lasley OCA ์ธ์Šคํ„ด์Šค ์ž‘์—… ( "ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ")์— ๋„ฃ์€ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค๊ณ  ๋งŒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด : +1 : ์ถ”๊ฐ€ ์šฉ์ด์ง€๋งŒ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ add_groups ๋“ฑ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ƒ์†์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค : ๋ฎ์–ด ์“ด ๋ฉ”์†Œ๋“œ์˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์— ์ƒˆ ๊ทธ๋ฃน์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋‹น ๊ทธ๋ฃน์ด ๋ชฉ๋ก์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน ์ œ๊ฑฐ์— ๋Œ€ํ•ด์„œ๋Š” ์ฝ”์–ด์—์„œ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : ์›๋ž˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ทธ๋ฃน์ด ๋” ์ ์€ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ).

์•ˆ๋…•ํ•˜์„ธ์š” ! ๋‹ต๋ณ€ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. OCA API ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ LGTM. ์ข‹์€ ์ƒ๊ฐ!

๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ add_groups ๋“ฑ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹น์‹  ๋ง์ด ๋งž์•„์š”. ์ •๋ง ๋‹จ์ˆœํ™” ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฃน ์ œ๊ฑฐ์— ๋Œ€ํ•ด์„œ๋Š” ์ฝ”์–ด์—์„œ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : ์›๋ž˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ทธ๋ฃน์ด ๋” ์ ์€ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ).

๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑ ํ•  ์ˆ˜ ์žˆ์„์ง€ ํ™•์‹  ํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ƒˆ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ํŠน์ • PR์—์„œ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@lasley OCA ์ธ์Šคํ„ด์Šค ์ž‘์—… ( "ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ")์— ๋„ฃ์€ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค๊ณ  ๋งŒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@lasley , ๋ณด๋‚ด ์ฃผ์„ธ์š”. POC๋ฅผ ์‹œ์ž‘ํ•œ ๋‹ค์Œ ๋‹ค์Œ Open (/ Closed) Days์— ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ OCA API ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @lasley OCA ์ธ์Šคํ„ด์Šค ์ž‘์—… ( "ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ")์— ๋„ฃ์€ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค๊ณ  ๋งŒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์ -๋‹น์‹œ์—๋Š”์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ๊ถŒํ•œ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ OCA ์ธ์Šคํ„ด์Šค์—์„œ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋” ํŒŒ๊ณ  ์ƒˆ ์ €์žฅ์†Œ๋กœ ๋‹ค์‹œ๋ณด๊ณ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ  ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ณ„์†ํ•ด์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ ๊ถŒํ•œ์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. @pedrobaeza PR์„ ์ œ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋นˆ OCA / python-oca ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“œ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๐Ÿ‘์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์„œ๋ฒ„ ๋„๊ตฌ์˜ ์ƒˆ ๋„๊ตฌ ๋ชจ๋“ˆ์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜์žˆ๋Š” @privileged ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ์•„์ด๋””์–ด๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ pip ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค. @ api.groups๋ผ๋Š” ์ด๋ฆ„ ๋งŒ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด odoo api python ๋ชจ๋“ˆ์—์„œ ์˜ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์Šค๋Ÿฝ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @ NL66278 ,

์Œ, ์ด๋ฆ„ ๊ณต๊ฐ„์— ๊ด€ํ•ด์„œ๋Š” ์ด๋ฆ„์ด @ api.groups๊ฐ€ ์•„๋‹Œ @ oca.groups์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (๋˜๋Š” ๋น„์Šทํ•œ ๊ฒƒ)

@legalsylvain ๋‚˜๋Š” ์ฒซ ๋ฒˆ์งธ ์˜ˆ์ œ ์‚ฌ์šฉ์— ๋ฐ˜์‘ํ–ˆ์Šต๋‹ˆ๋‹ค. @oca.groups ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@legalsylvain ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค!

์ฐจ๋ผ๋ฆฌ ๋ชจ๋“  oca ํŒจํ‚ค์ง€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€๋กœ 'oca'๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ์ƒˆ ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„์„ 'oca-decorator'๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒจํ‚ค์ง€๋Š” 'oca.decorator'(๋˜๋Š” oca.xyz)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

from oca.decorator import groups

    @groups(..)
    def function_name():

์•ฝ groups ์˜ˆ๋ฅผ ๋“ค์–ด allowed_groups ๊ฐ™์ด ๋” ๋ช…ํ™•ํ•œ ์ด๋ฆ„์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

lmi

@lasley ์ด๊ฒƒ์€ ์ƒˆ ์ €์žฅ์†Œ / PSC์— ๋Œ€ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง€์ •๋œ ์ž‘์—…์ž…๋‹ˆ๋‹ค : https://odoo-community.org/web#id = 264 & view_type = form & model = project.task & action = 468 & active_id = 2

Omg ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค Pedro! ์–ด๋–ค ์ด์œ ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ Repo๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ๊ฒ€์ƒ‰ํ–ˆ์ง€๋งŒ "PSC"๋ฅผ ํฌํ•จ ํ•  ์ƒ๊ฐ์€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Derp!

๊ทธ๋ž˜๋„ OCA GitHub์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„ํŠผ์ด ์—†์Šต๋‹ˆ๋‹ค.

image

์—ญํ• ์„ ๋ณ€๊ฒฝ ํ–ˆ์œผ๋‹ˆ ์ง€๊ธˆ ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.

@lasley @pedro ์™œ python-oca ? ์ด ์ด๋ฆ„์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„์„ ์–ด๋–ป๊ฒŒ ์ง€์ •ํ•  ๊ณ„ํš์ž…๋‹ˆ๊นŒ?

@lmignon- ๋‚˜๋Š” ์ œ์•ˆ์„ ์š”์ฒญํ–ˆ๊ณ  ์ด๊ฒƒ์ด ์ตœ๊ณ ์˜ ๊ฒƒ์ด์—ˆ๋‹ค. ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„์€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์Šจ ์ƒ๊ฐ์ด์•ผ? ๋‚˜๋Š” ๋ชจ๋‘ ๊ท€์ž…๋‹ˆ๋‹ค.

@lasley ๋‚˜์˜ ์ฃผ๋œ ๊ด€์‹ฌ์‚ฌ๋Š” ๋ชจ๋…ธ ๋ฆฌํ‹ฑ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€์˜ ์ƒ์„ฑ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ „๋ฌธ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š” ๋ชฉํ‘œ๋ผ๋ฉด ์™œ oca-decorator๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ฆ„์€ ํŒจํ‚ค์ง€์— ํฌํ•จ ๋œ ๊ธฐ๋Šฅ ๋ฒ”์œ„ ๋˜๋Š” ์›ํ•˜๋Š” ํ•ญ๋ชฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์•ผํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ์ด๋ฆ„์€ ์˜๋ฏธ๊ฐ€ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. IMO 'python-oca'๊ฐ€ ๋„ˆ๋ฌด ๋„“์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” oca-decorator ๋ฅผ ์ž˜ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ๋ชจ๋“ˆ์„ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์กฐํ™” ํ•  ํ•„์š”๊ฐ€ ์žˆ์ง€๋งŒ, ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์—์„œ ์ตœ์ƒ์œ„ ๋ ˆ๋ฒจ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ๊ทธ๋ ‡๊ฒŒํ–ˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ LasLabs / python-oca # 1์—์„œ oca.helpers ๋กœ ๋‹ค์‹œ ๋ฐ€์–ด ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ๊ทธ ๋ณ€ํ™”๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ถฉ๋ถ„ํžˆ ์‰ฌ์šฐ ๋ฉฐ, ์ฝ”๋“œ์˜ ๋งฅ๋ฝ์—์„œ ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ repo๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ PR์„ ์ œ์ถœํ•˜๊ณ  ์ œ์•ˆ์„ ํฌํ•จ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์ด ํ•˜์ด์žฌํ‚น ๋œ PR ๋Œ€์‹  ์ปจํ…์ŠคํŠธ์—์„œ ๋…ผ์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@lasley oca ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋Š” ๋น„์–ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋™์ผํ•œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ์•„๋ž˜์— ๋‹ค๋ฅธ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ helpers ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„์„ decorators ๋กœ ๋ณ€๊ฒฝ ํ•œ ๋‹ค์Œ Python ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ํ˜ธ์ถœํ• ๊นŒ์š”? ์ดˆ๋ก ์˜ˆ : oca-package-sub == oca.package.sub

์‘ : ์›ƒ์Œ : ๊ทธ๊ฒŒ ์•„์ด๋””์–ด์•ผ.

๋„ˆ๋ฌด ๋‚˜์œ ocapi ์ด (๊ฐ€) ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. : smile_cat :

์ด ์ฝ”๋“œ์˜ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (๋‚ด ์งˆ๋ฌธ์ด ๊ด€๋ จ์ด ์—†์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค)

๊ธฐ๋ณธ์ ์œผ๋กœ์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

A) ๊ธฐ์กด odoo ๋ชจ๋“ˆ์„ ํ†ตํ•ด (๊ธฐ์กด ๋˜๋Š” ์ƒˆ ์ €์žฅ์†Œ์—์„œ). ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š”

from odoo.addons.my_oca_lib_in_module import my_decorator

B) ํŒŒ์ด์ฌ lib๋ฅผ ํ†ตํ•ด.

์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘ ์†”๋ฃจ์…˜ "B"์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋” ๊นจ๋—ํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ๊ทธ๋Ÿฌํ•œ ๊ธฐ์ˆ ์ด ์ƒˆ๋กœ์šด oca-python lib์— ์˜์กดํ•˜๋Š” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ด์—†๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋ฅผ ์ฐจ๋‹จ ํ• ๊นŒ ๋ด ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. UI๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ odoo.sh๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ๋‚ด์ผ OCA ์•ฑ ์Šคํ† ์–ด์—์„œ!). ๋ชจ๋“  ํ˜ธ์ŠคํŒ… ์‹œ์Šคํ…œ์ด ์‚ฌ์šฉ์ž ์ง€์ • Python lib๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ผ๋ถ€ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์„ค์น˜ํ•  ์ˆ˜์—†๋Š” ์ถ”๊ฐ€ lib์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ์‚ฌ์šฉ์ž๊ฐ€ OCA ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋‹ค๋ฉด ์œ ๊ฐ์ž…๋‹ˆ๋‹ค.

๋‹น๋ถ„๊ฐ„ OCA์—๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋‹ค๋ฅธ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. openupgradelib. ์ฝ”๋“œ๋Š” ์ฒ˜์Œ์— OpenUpgrade ํ”„๋กœ์ ํŠธ์— ์žˆ์—ˆ๊ณ  ์™ธ๋ถ€ python-lib๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ๋Š” ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ธฐ์ˆ ์  ์ธ ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์— openupgradelib์˜ ์ฐจ๋‹จ ์ง€์ ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ด ?

Odoo.sh๊ฐ€ pip ์ข…์†์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

IMO ์ด๊ฒƒ์€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์—์„œ external_depencies ํ‚ค๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค-์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋งŽ์€ ๋ชจ๋“ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์ด barcodes_generator_abstract ์š”๊ตฌํ•˜๋Š” barcode barcodes_generator_abstract ์™€ ๋‹ค๋ฅผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Odoo.sh (๋˜๋Š” ํ”„๋ž‘์Šค ์ธ์˜ ๊ฒฝ์šฐ Odoo.hs)๋Š” ๋‹ค์Œ Runbot์ž…๋‹ˆ๋‹ค. ๋‚ด๊ธฐ.

๐Ÿ˜† ๊ทธ๋ž˜ ์šฐ๋ฆฌ๋Š” ๋‚ด ๋ฒ ํŒ… ์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ์•Œ๊ณ 

์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋งŽ์€ ๋ชจ๋“ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (@lasley์— ์˜ํ•ด)

์‚ฌ์‹ค, ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์•„์ฃผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ฐ”์ฝ”๋“œ ์ƒ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์„ ์›ํ•œ๋‹ค๋ฉด barcode lib๋ฅผ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ณ„ํ‘œ ๋“ฑ๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋งค์šฐ ์ œํ•œ์ ์ด๋ฉฐ ์•„๋งˆ๋„ ์„ธ๊ณ„์˜ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” ํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฌํ•œ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์•ˆ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ”์ฝ”๋“œ ์ƒ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฐ”์ฝ”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ OCA ์ฝ”๋“œ ์†Œ์Šค ๋ถ„์„์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚ ์—๋Š” 4182 ๊ฐœ์˜ ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (๋‘ ์ด์ •ํ‘œ์—์žˆ๋Š” ๋ชจ๋“ˆ์€ ๋‘ ๋ฒˆ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค). ๋ฐ˜๋ฉด์— ๋ชจ๋“  4182 ๋ชจ๋“ˆ์—๋Š” 274 ๊ฐœ์˜ ํŒŒ์ด์ฌ ์ข…์†์„ฑ ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ OCA ๋ชจ๋“ˆ์˜ 94 %๋Š” ์™ธ๋ถ€ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋งค์šฐ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ธ๋ถ€ ์‚ฌํ•ญ :

image

๋‚ด์ผ ์œ ์šฉํ•œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๊ฐ€์žˆ๋Š” ์ข‹์€ ์ถ”๊ฐ€ oca python lib๊ฐ€ ์žˆ๋‹ค๋ฉด (๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์ด ์Šค๋ ˆ๋“œ์—์„œ ์„ค๋ช…ํ•˜๋ ค๊ณ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€) ๋Œ€๋ถ€๋ถ„์˜ OCA ๋ชจ๋“ˆ์€ ๋‹จ๊ณ„๋ณ„๋กœ์ด lib์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

OCA์˜ ๋ชฉ์ ์€ OCA ํšŒ์›๋“ค์˜ ์ž‘์—…์„ ์ด‰์ง„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋Ÿฌํ•œ ๊ฒฐ์ • (์„ค์น˜ํ•  lib ์ƒ์„ฑ)์ด ์‚ฌ๋žŒ๋“ค์ด OCA ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ธ๋‹ค๋ฉด ๋‹น๋ถ„๊ฐ„์ด ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ํด๋ž˜์‹ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉ ํ•˜์—ฌ ์ž‘์€ oca-decorator ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  1/2 ๋…„ ์•ˆ์— ์„ฑ์ˆ™ํ•˜๊ณ  ๋ฐฐํฌ ๋ฐ ํ˜ธ์ŠคํŒ… ์‹œ์Šคํ…œ๋„ ์„ฑ์ˆ™ํ•˜๋ฉด (*) ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋„ฃ๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

openupgrade ์ฝ”๋“œ๋Š” ๋ช‡ ๋…„ ๋™์•ˆ openupgrade ์ €์žฅ์†Œ์— ์žˆ์—ˆ์œผ๋ฉฐ ์ตœ๊ทผ @StefanRijnhart์— ์˜ํ•ด ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€ํ™”๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

(*) : ํ˜ธ์ŠคํŒ… ๋ฐ ๋ฐฐํฌ ์‹œ์Šคํ…œ์€ ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ๋งŽ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (bzr๋กœ ์ฝ”๋“œ ๊ฐ€์ ธ ์˜ค๊ธฐ, github๋กœ ์ฝ”๋“œ ๊ฐ€์ ธ ์˜ค๊ธฐ, ๋นŒ๋“œ ์•„์›ƒ ๊ธฐ์ˆ  ์‚ฌ์šฉ, ์ตœ๊ทผ์—๋Š” pypi ๋ฐฐํฌ)

@ OCA / board๊ฐ€ ๊ทธ ์ ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์  ์ธ ๊ฒฐ์ •์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ „๋žต์  ๊ฒฐ์ •์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ https://github.com/OCA/oca-decorators ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ์ด RFC๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@legalsylvain- ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“ค๊ธฐ ์ „์— ์›๋ž˜ api.foreach ์— ๋Œ€ํ•œ ๋ชจ๋“ˆ์„ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด PR์„ ์‚ดํŽด๋ณด๋ฉด์ด ์ „๋žต์„ ํฌ๊ธฐํ•œ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

60-70์ž์ธ ๊ฐ€์ ธ ์˜ค๊ธฐ ๊ฒฝ๋กœ์™€ ๊ฐ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ๋‘˜๋Ÿฌ์‹ผ try / except๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ API ์‚ฌ์šฉ์€ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“ˆ์˜ ์ฑ„ํƒ์„ 0์œผ๋กœ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค-๊ฐ€์ ธ ์˜ค๊ธฐ๋Š” ๋ ˆ์ฝ”๋“œ ๋ฃจํ”„๋ณด๋‹ค ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์šฐ๋ฆฌ์˜ try / except ์ „๋žต์€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์™€ ํ•จ๊ป˜ ๋น„์ฐธํ•˜๊ฒŒ ์‹คํŒจํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ Odoo๊ฐ€ external_dependencies ํ‚ค๋ฅผ ์ˆ˜์ •ํ–ˆ์œผ๋ฉดํ•ฉ๋‹ˆ๋‹ค.

@dreispt- ๊ธฐ์กด ํ† ๋ก ์„ ๋‹ค๋ฅธ ์ €์žฅ์†Œ๋กœ ์˜ฎ๊ธฐ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์—๋Š” ์œ ๋™์ ์œผ๋กœ ๋„˜์–ด๊ฐˆ ์ง€ ํ™•์‹  ํ•  ์ˆ˜์—†๋Š” ๋งŽ์€ ์ ์ด ๋…ธ์ถœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

60-70์ž์ธ ๊ฐ€์ ธ ์˜ค๊ธฐ ๊ฒฝ๋กœ์™€ ๊ฐ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ๋‘˜๋Ÿฌ์‹ผ try / except๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ API ์‚ฌ์šฉ์ด ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ํ•ด๊ฒฐ์ฑ…์— ํ•„์š”ํ•œ ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ  ์‹œ๋„๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

oca @ foreach ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด oca_api lib ๋˜๋Š” ๋ชจ๋“ˆ์—์„œ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. :

Lib ์†”๋ฃจ์…˜์˜ ์˜ํ–ฅ
๋ฐฐํฌ :

  • pip ์„ค์น˜ ๋˜๋Š” ๋นŒ๋“œ ์•„์›ƒ์„ ํ†ตํ•ด. Saas ์ œํ•œ.

๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ :

'external_dependencies': {'python': ['oca_api']}

Python ํŒŒ์ผ :

from oca_api import oca

๋ชจ๋“ˆ ์†”๋ฃจ์…˜์˜ ์˜ํ–ฅ
๋ฐฐํฌ :

  • pip ์„ค์น˜ ๋˜๋Š” ๋‹ค์šด๋กœ๋“œ ๋ฐ UI ๋˜๋Š” ๋นŒ๋“œ ์•„์›ƒ์„ ํ†ตํ•ด ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์• ๋“œ์˜จ ํŒŒ์ผ์— ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. saas ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ :

'depends': ['oca_api'],

Python ํŒŒ์ผ :

from odoo.addons.oca_api import oca

์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์ณค์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์ €๋ฅผ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ํ•ด๊ฒฐ์ฑ…์— ํ•„์š”ํ•œ ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ  ์‹œ๋„๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

try / except๋Š” ํ•ต์‹ฌ Odoo๊ฐ€ ์•„๋‹Œ ๊ฒƒ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์ด๋ฏ€๋กœ ์˜ˆ์ œ๋Š” ๋Œ€์‹  ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

try:
    from oca_api import oca
except ImportError:...

try:
    from odoo.addons.oca_api import oca
except ImportError:...

ํ•˜์ง€๋งŒ ์˜ˆ, ๋ชจ๋“ˆ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด ๋‚ด ๊ฒƒ๋งŒ ํผ ๋‚˜์˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์ค‘ ๋งŽ์€ ๋ถ€๋ถ„์ด ๋ชจ๋“ˆ์ด DB์— ์„ค์น˜๋˜์ง€ ์•Š๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋“ˆ์ฒ˜๋Ÿผ ํ™˜๊ฒฝ์— ์บก์Šํ™”๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“ˆ์„ ๋ช…์‹œ ์ ์œผ๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š์€ ํ™˜๊ฒฝ์— ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ (๋ณด์•ˆ ๋˜๋Š” ๊ธฐํƒ€)๋กœ ๊ฐ„์ฃผ ๋  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

@lmignon์€ ๋ฐฉ๊ธˆ https://github.com/OCA/webhook/pull/3#issuecomment -336935193์—์„œ ์œ„์™€ ์œ ์‚ฌํ•œ ์ธ์ˆ˜๋ฅผ ๋…ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ณ‘๋ ฌ ๋Œ€ํ™”๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ด์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋น„๋“ฑํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ @lmignon ์ด ๋ฐ”๋กœ ์—ฌ๊ธฐ์— ์žˆ์œผ๋ฉฐ ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ lib๋กœ ์ œ๊ณตํ•ด์•ผํ•œ๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค. IIRC์˜ ์กฐ์–ธ์€ ์ œ๊ฐ€ foreach ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋ชจ๋“ˆ์—์„œ ์˜ฎ๊ธด ์ฃผ๋œ ์ด์œ ์˜€์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @lasley.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ ๋ชจ๋“ˆ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๋ชจ๋“  OCA ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ๋งํ•˜๋Š” ๋‚ด์šฉ์˜ ์ƒ˜ํ”Œ์„ ๋งŽ์ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. (report_xls ๋ฐ ์ปค๋„ฅํ„ฐ์— ๋Œ€ํ•ด ๋งŽ์ด).

๋ชจ๋“ˆ๋กœ ์ธํ•ด ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ์ˆ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ์œ„ํ•ด ๋ชจ๋“ˆ์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด oca_api ๋ชจ๋“ˆ์˜ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ํ‹€๋ ธ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์•ˆ ์ธ์‚ฌ.

๋‚˜๋Š” ๋ชจ๋“ˆ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ชจ๋“ˆ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ https://github.com/odoo/odoo/pull/14850 ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋ฅผ ์œ„ํ•ด ๋ชจ๋“ˆ์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด oca_api ๋ชจ๋“ˆ์˜ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Odoo๋Š” addons ๊ฒฝ๋กœ ๋‚ด์˜ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๊ฐ€์ ธ ์˜ค๊ธฐ๋Š” ์ข…์† ํ•ญ๋ชฉ์ด ์‹ค์ œ๋กœ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ๋ชจ๋“ˆ์—์„œ ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Odoo์˜ ํ•ต์‹ฌ์ด๋ฉฐ ํ˜„์‹ค์ ์œผ๋กœ ์šฐํšŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฐ€ Odoo SA์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ณ ๊ฐ์„ ๊ณต๋™ ํ˜ธ์ŠคํŒ…ํ•˜์ง€ ์•Š๋Š” ์ด์œ ์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค. Odoo.sh๋กœ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋‚ด ์ƒ๊ฐ์—๋Š” SaaS์—์„œ ์†์— ๋˜‘๋”ฑ ๊ฑฐ๋ฆฌ๋Š” ์‹œ๊ฐ„ ํญํƒ„์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ์„ค๋ช…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. odoo / odoo # 14850์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์œ ๊ฐ์ž…๋‹ˆ๋‹ค.
๋‚˜๋Š” ์—ฌ์ „ํžˆ ์™ธ๋ถ€ lib์— ๋”ฐ๋ผ ๋งŽ์€ OCA ๋ชจ๋“ˆ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์˜ ์‚ฌ์šฉ์„ ํ™•์‹คํžˆ ์ œํ•œ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“ˆ์€ ์‹ค์ œ๋กœ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ท€ํ•˜์˜ ํ†ต์ฐฐ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค. (https://github.com/OCA/oca-decorators/issues/7๋กœ ์ด๋™)
๋ชจ๋“  ์˜๊ฒฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰