Commit ddf22976 by Owo Sugiana

Kali pertama

0 parents
dist
*egg-info
0.1 2019-03-12
--------------
- Kali pertama
include *.txt *.rst *.py
recursive-include models *.py
Struktur Tabel Instant Messaging Gateway
========================================
Repository ini berisi struktur tabel dan beberapa fungsi terkait paket Debian
bernama ``im-gw``.
Sebelum Anda menggunakan ini pastikan Anda sudah memasangnya. Berikut
penjelasan singkatnya.
Daftarkan di ``/etc/apt/sources.list``::
deb http://repo.opensipkd.com/debian ./
Perbarui daftar paket::
$ sudo apt-get update
Pasang paketnya::
$ sudo apt-get install im-gw
Sesuaikan database profile di ``/etc/im/gw/config.py``, lalu::
$ sudo dpkg-reconfigure im-gw
Pasang paket pendukung terkait jalur SMS dan email::
$ sudo apt-get install im-modem im-mail
Setelah itu lanjutkan menggunakan repository ini untuk mengirim email::
import base64
import sys
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from imgw.mail import kirim
db_url = 'postgresql://sugiana:FIXME@localhost/imgw'
engine = create_engine(db_url)
session_factory = sessionmaker(bind=engine)
DBSession = session_factory()
files = []
filename = 'test.pdf'
with open(filename, 'rb') as f:
content = f.read()
if sys.version_info.major == 2:
content = base64.encodestring(content)
else:
content = base64.encodebytes(content)
files.append([filename, content])
p = dict(
penerima='sugiana@opensipkd.com', subject='Uji coba',
pesan='Hello world', files=files)
a = kirim(DBSession, p)
DBSession.flush()
DBSession.commit()
Sedangkan untuk mengirim SMS::
from imgw.sms import kirim
p = dict(penerima='+628123456789', pesan='Hello world')
a = kirim(p)
DBSession.add(a)
DBSession.flush()
DBSession.commit()
Selamat mencoba.
File mode changed
import os
from .models import (
Antrian,
Mail,
File,
)
def kirim(db_session, p):
a = Antrian(kirim=True, jalur=6, penerima=p['penerima'], pesan=p['pesan'])
if 'pengirim' in p:
a.pengirim = p['pengirim']
db_session.add(a)
db_session.flush() # Dapatkan nilai id
m = Mail(id=a.id)
m.subject = 'subject' in p and p['subject'] or ''
m.name = 'name' in p and p['name'] or ''
db_session.add(m)
if 'files' in p:
i = 0
for filename, content in p['files']:
i += 1
fname = os.path.split(filename)[-1]
f = File(id=a.id, urutan=i, filename=fname, content=content)
db_session.add(f)
return a
from datetime import datetime
from sqlalchemy import (
Column,
Integer,
Float,
Text,
String,
Boolean,
DateTime,
Date,
ForeignKey,
func,
text,
)
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class CommonModel(object):
def to_dict(self):
values = {}
for column in self.__table__.columns:
values[column.name] = getattr(self, column.name)
return values
def to_dict_without_none(self):
values = {}
for column in self.__table__.columns:
val = getattr(self, column.name)
if val is not None:
values[column.name] = val
return values
def from_dict(self, d):
for column in self.__table__.columns:
if column.name in d:
setattr(self, column.name, d[column.name])
class DefaultModel(CommonModel):
id = Column(Integer, primary_key=True)
class Jalur(Base, DefaultModel):
__tablename__ = 'jalur'
nama = Column(String(15), unique=True, nullable=False)
class Status(Base, DefaultModel):
__tablename__ = 'status'
__table_args__ = dict(schema='im')
ket = Column(String(100), unique=True, nullable=False)
class Antrian(Base, DefaultModel):
__tablename__ = 'antrian'
__table_args__ = dict(schema='im')
jalur = Column(
Integer, ForeignKey(Jalur.id), nullable=False, server_default='1')
kirim = Column(Boolean, nullable=False, server_default='true')
tgl = Column(
DateTime(timezone=True), server_default=func.now(), nullable=False)
tgl_operator = Column(DateTime(timezone=True))
pengirim = Column(String(64))
penerima = Column(String(64))
pesan = Column(Text, nullable=False)
jawaban = Column(Text)
parser = Column(String(64))
status = Column(
Integer, ForeignKey(Status.id), server_default='1', nullable=False)
class Selesai(Base, CommonModel):
__tablename__ = 'selesai'
__table_args__ = dict(schema='im')
id = Column(
Integer, primary_key=True,
server_default=text("nextval('im.antrian_id_seq')"))
jalur = Column(
Integer, ForeignKey(Jalur.id), nullable=False, server_default='1')
kirim = Column(Boolean, nullable=False)
tgl = Column(
DateTime(timezone=True), server_default=func.now(), nullable=False)
tgl_operator = Column(DateTime(timezone=True))
pengirim = Column(String(64))
penerima = Column(String(64))
pesan = Column(Text, nullable=False)
jawaban = Column(Text)
parser = Column(String(64))
status = Column(Integer, ForeignKey(Status.id), nullable=False)
#########
# Agent #
#########
class StatusAgent(Base, DefaultModel):
__tablename__ = 'status_agent'
__table_args__ = dict(schema='im')
ket = Column(String(100), unique=True, nullable=False)
class Agent(Base, CommonModel):
__tablename__ = 'agent'
__table_args__ = dict(schema='im')
id = Column(String(64), primary_key=True)
jalur = Column(Integer, ForeignKey(Jalur.id), nullable=False)
jalur_ref = relationship(Jalur)
status = Column(
Integer, ForeignKey(StatusAgent.id), nullable=False,
server_default='0')
status_ref = relationship(StatusAgent)
job = Column(Integer, nullable=False, server_default='0')
lastjob = Column(
DateTime(timezone=True), nullable=False, server_default=func.now())
startup = Column(
DateTime(timezone=True), nullable=False, server_default=func.now())
ket = Column(Text)
lasterr = Column(Text)
url = Column(String(64))
modem = relationship('Modem', backref='im.agent', uselist=False)
class Produk(Base, CommonModel):
__tablename__ = 'produk'
nama = Column(String(20), primary_key=True)
class MSISDN(Base, CommonModel):
__tablename__ = 'msisdn'
awalan = Column(String(10), primary_key=True)
produk = Column(String(20), ForeignKey(Produk.nama), nullable=False)
wilayah = Column(String(30))
class Modem(Base, CommonModel):
__tablename__ = 'modem'
__table_args__ = dict(schema='im')
msisdn = Column(String(64), nullable=False, primary_key=True)
imei = Column(
String(64), ForeignKey(Agent.id, ondelete='cascade'),
nullable=False)
device = Column(String(20))
sn = Column(String(20))
merk = Column(String(64))
signal = Column(Integer, nullable=False, server_default='0')
produk = Column(String(20), ForeignKey(Produk.nama), nullable=False)
wilayah = Column(String(30))
pulsa = relationship('Pulsa', backref='im.modem', uselist=False)
reply_for = relationship(
'ModemPengirim', backref='im.modem_pengirim',
order_by='ModemPengirim.produk')
class Pulsa(Base, CommonModel):
__tablename__ = 'pulsa'
__table_args__ = dict(schema='im')
msisdn = Column(
String(20), ForeignKey(Modem.msisdn, ondelete='cascade'),
primary_key=True)
request = Column(String(10), nullable=False)
response = Column(Text)
tgl = Column(DateTime(timezone=True))
class ModemPengirim(Base, CommonModel):
__tablename__ = 'modem_pengirim'
__table_args__ = dict(schema='im')
produk = Column(String(20), ForeignKey(Produk.nama), primary_key=True)
msisdn = Column(
String(20), ForeignKey(Modem.msisdn, ondelete='cascade'),
primary_key=True)
msisdn_produk = Column(
String(20), ForeignKey(Produk.nama), nullable=False)
########
# Mail #
########
class Mail(Base, CommonModel):
__tablename__ = 'mail'
__table_args__ = dict(schema='im')
id = Column(Integer, nullable=False, primary_key=True)
subject = Column(String(64))
name = Column(String(64))
class File(Base, CommonModel):
__tablename__ = 'mail_files'
__table_args__ = dict(schema='im')
id = Column(Integer, nullable=False, primary_key=True)
urutan = Column(Integer, nullable=False)
filename = Column(String(64), nullable=False)
content = Column(Text, nullable=False)
from .models import Antrian
def kirim(p):
a = Antrian(kirim=True, jalur=1, penerima=p['penerima'], pesan=p['pesan'])
if 'pengirim' in p:
a.pengirim = p['pengirim']
return a
import os
from setuptools import setup
here = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(here, 'README.rst')) as f:
README = f.read()
with open(os.path.join(here, 'CHANGES.txt')) as f:
CHANGES = f.read()
line = CHANGES.splitlines()[0]
version = line.split()[0]
requires = [
'sqlalchemy',
]
setup(
name='imgw-models',
version=version,
description='Struktur tabel Instant Messaging Gateway',
long_description=README + '\n\n' + CHANGES,
author='Owo Sugiana',
author_email='sugiana@gmail.com',
license='PostgreSQL License',
packages=['imgw'],
install_requires=requires,
zip_safe=False,
)
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!