Belajar Menerapkan Flask Configuration

Kondisi:

Server:

menggunakan mongodb authentication

Localhost:

mongodb tanpa authentication

Awalnya cukup merepotkan, karena harus melakukan hardcode, namun setelah baca-baca lagi, dokumentasi, ada teknik konfigurasi yang manjur.

app 
    --- __init__.py
    --- views.py
    --- config/
        --- config.py
        --- __init__.py

Didalam config.py, masukkan konfig berikut:

class Config(object):
    DEBUG = False

class ProductionConfig(Config):
    MONGODB_USERNAME = "username"
    MONGODB_PASSWORD = "password"

class DevelopmentConfig(Config):
    DEBUG = True

class TestingConfig(Config):
    TESTING = True

Kemudian di file __init__.py yang ada di direktori app, tambahkan baris berikut:

app.config.from_object('app.config.config.ProductionConfig')

Biar lebih modular lagi, saya disini menggunakan python-decouple, dan menambahkan di berkas .env saya

ENVIRON=app.config.config.ProductionConfig

Sehingga baris yang kita tambahkan di berkas __init__.py di direktori app tadi, berubah menjadi:

from decouple import config


app.config.from_object(config("ENVIRON"))

Tentunya Anda butuh menambahkan library python-decouple terlebih dahulu:

pip install python-decouple

Dan… success… Meski begitu, saya kurang tau apa ini termasuk best practice apa bukan, mohon bimbingan dan pencerahan dari pembaca sekalian..

 

Terima kasih..

 

Advertisements

Data DateTime di MongoDB Tanpa MicroSecond

Kalau di MySQL, ketika insert datetime dengan format

datetime.datetime.now()

maka data yang masuk adalah tahun bulan hari jam menit detik” tanpa microsecond. Hal ini berbeda ketika kita memasukkan format datetime yang sama ke MongoDB, secara otomatis, waktu microsecond ikut tercatat. Bagaimana cara biar microsecond tidak usah ikut tercatat?

datetime.datetime.now().replace(microsecond=0)

Otomatis, data datetime akan masuk ke mongodb tanpa microsecond.

 

 

Posting ke WordPress Menggunakan Python WordPress XMLRPC

Berikut code snippet untuk melakukan posting ke WP:

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
from wordpress_xmlrpc.methods.users import GetUserInfo
from wordpress_xmlrpc.methods import posts


wp = Client("http://localhost/xmlrpc.php", "admin", "admin")
# posts = wp.call(GetPosts())
# print(posts)
# users = wp.call(GetUserInfo())
# print(users)

post = WordPressPost()
post.title = "My new python title"
post.content = "This is the body of my new post."
post.terms_names = {
 "post_tag": ["test", "firstpost"],
 "category": ["Introductions", "Tests"]
 }
post.id = wp.call(NewPost(post))

post.post_status = "publish"
wp.call(posts.EditPost(post.id, post))

Kenapa wordpress? Karena platform ini terkenal SEO friendly.. Tinggal bagaimana kreativitas kita aja…

Mengubah Jam Server ke Jam Lokal

Mungkin judul inggrisnya “how to convert server time to local time zone?”. Yak kurang lebih begitu… Bagaimana caranya?

import arrow
import pytz
from datetime import datetime

def to_local_tz(s):
    """Convert UTC to local timezone (Asia/Jakarta)."""
    try:
        dt_str = datetime.strftime(s, "%Y-%m-%d %H:%M:%S")
        dt_arr = arrow.Arrow.strptime(dt_str, "%Y-%m-%d %H:%M:%S")
        return dt_arr.to("Asia/Jakarta").naive
    except Exception as e:
        pass

Selamat mencoba…

MySQL di Python3

1200px-MySQL.svg

Jarang banget saya menggunakan engine database yang satu ini, seringnya menggunakan engine NoSQL seperti mongo. Namun, kali ini beda, karena project ini tuntutan klien, dan klien familiar dengan MySQL ya sudah…

Di sini saya menggunakan Python3, library yang saya butuhkan:

  • mysqlclient
  • sqlalchemy
  • sqlalchemy_utils

Saya menggunakan ORM (sqlalchemy) untuk mempermudah kerja, daripada harus menulis raw query syntax, so painful…

Berikut ini contoh kode membuat database dan tabel:

from sqlalchemy import create_engine, MetaData
from sqlalchemy_utils import database_exists, create_database
from sqlalchemy import Column, DateTime, String, Integer, func
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

# create db if not exist
engine = create_engine("mysql://root:@localhost/subdhunter")
if not database_exists(engine.url):
    create_database(engine.url)

# create db model
class Domain(Base):
    __tablename__ = 'domain'
    id= Column(Integer, primary_key=True)
    domain_name = Column(String(100))
    domain_title = Column(String(250))
    domain_status = Column(Integer)
    real_domain_name = Column(String(100))
    created = Column(DateTime, default=func.now())

# create table
from sqlalchemy.orm import sessionmaker
session = sessionmaker()
session.configure(bind=engine)
Base.metadata.create_all(engine)

sdasd

Scraping Tokopedia Menggunakan Python Feedparser

Kali ini saya akan mencontohkan bagaimana kita bisa membuat scraper Tokopedia hanya dengan memanfaatkan Feed URL. Tokopedia memiliki Feed URL untuk setiap kategori yang mereka punya, sebagai contoh kategori Fashion Anak, URL nya adalah:

https://www.tokopedia.com/feed?sc=78

Dengan memanfaatkan library feedparser di Python, kita bisa dengan mudah melakukan scraping terhadap produk-produk terbaru dari Tokopedia. Berikut ini contoh kode-nya:

import feedparser
url = "https://www.tokopedia.com/feed?sc=78"
data = feedparser.parse(url)
data = data['entries']

# selanjutnya tinggal looping, misal kita ingin mendapatkan title:

for i in data:
    print(i['title'])

Jika ingin dikembangkan lagi, kita dapat menggabungkan kode di atas dengan web framework misal Flask atau Django, mongodb untuk menyimpan data, lakukan markup terhadap harga, dan BOOM! Jadilah sebuah aplikasi web dropship instan!!!

Preview Web Dropship Tokopedia Instan

Screen Shot 2017-08-09 at 12.25.04 PM

Install supervisor – the right way

The right way ini maksudnya mirip-mirip best practice lah.. Yakni dengan tidak menggunakan super user (sudo), caranya bagaimana? Cukup tambahkan parameter –user ke perintah pip Anda…

$ pip install supervisor –user

Instalasi terletak di direktori home Anda

~/.local/bin/

Bagaimana jika meng-install sebagai super user? Tidak ada masalah sih, bisa aja, namun Anda harus tahu bahwa instalasi pip menggunakan sudo tidak disarankan dari sisi keamanan sebuah sistem.

Mudah Mengelola Long-running Processes dengan supervisor

Anda memiliki banyak long-running process dalam satu mesin? Misal running beberapa aplikasi django? Gunakan supervisorctl kalau Anda tidak ingin repot. Setelah terpasang dan konfigurasi berjalan dengan baik, mengelola banyak aplikasi menjadi mudah, cukup dengan reread, stop, start…

reread

Perintah ini untuk membaca ulang isi dari supervisord.conf

update

Perintah ini untuk menambahkan proses baru kedalam supervisord

start/stop

Perintah ini untuk memulai/menghentikan sebuah proses

status

Perintah ini untuk melihat status dari masing-masing proses yang kita miliki.