Adding Movie Series CRUD Functionality

#controllers/dashboard/movie.py
import config, copy, lib, datetime, uuid, json
from flask import render_template, session, request, redirect
from models.seriesdb import Seriesdb

class Series():
  def __init__(self):
    self.lib = lib.Lib()
    self.seriesdb = Seriesdb()

  def get_post(self):
    vdict = copy.deepcopy(config.vdict)
    vdict['site_title'] = "ទំព័រ​ភាពយន្តភាគ"
    vdict['datetime'] = self.lib.get_timezone()
    session['page'] = 0

    if (request.method == "POST") and ('logged-in' in session):
      title = request.form['ftitle']
      content = request.form['fcontent']
      playlist = request.form['fplaylist']
      country = request.form['fcountry']
      date = request.form['fdate']
      time = request.form['ftime']
      author = session['logged-in']
      ending = request.form['fend']
      edit_id = request.form['fedit-id']
      print(edit_id)
      try:
        date = datetime.datetime.strptime(date, "%d/%m/%Y")
      except ValueError:
        vdict['message'] = 'ទំរង់​កាលបរិច្ឆេទ​មិន​ត្រឹមត្រូវ!'
        return render_template('dashboard/series.html', data=vdict)

      try:
        time = datetime.datetime.strptime(time, "%H:%M:%S")
      except ValueError:
        vdict['message'] = 'ទំរង់​ពេល​វេលា​មិន​ត្រឹមត្រូវ!'
        return render_template('dashboard/series.html', data=vdict)

      if edit_id:
        self.seriesdb.update(playlist, title, country, content, date, time, author, ending, edit_id)
      else:
        id = str(uuid.uuid4().int)
        self.seriesdb.insert(id, playlist, title, country, content, date, time, author, ending)

      vdict['series'] = self.seriesdb.select(vdict['dashboard_max_post'])
      vdict['count'] = self.seriesdb.count()
      vdict['thumbs'] = self.lib.get_thumbs(vdict['series'], 4, type='movie')
      return render_template('dashboard/series.html', data=vdict)

    elif 'logged-in' in session:
      vdict['series'] = self.seriesdb.select(vdict['dashboard_max_post'])
      vdict['count'] = self.seriesdb.count()
      vdict['thumbs'] = self.lib.get_thumbs(vdict['series'], 4, type='movie')
      return render_template('dashboard/series.html', data=vdict)
    else:
      return redirect('/login/')

  def edit(self, id):
    vdict = copy.deepcopy(config.vdict)
    vdict['site_title'] = 'កែតំរូវ​ភាពយន្ត​ភាគ'
    vdict['edit-id'] = id

    if 'logged-in' in session:
      vdict['series'] = self.seriesdb.select(vdict['dashboard_max_post'])
      vdict['count'] = self.seriesdb.count()
      vdict['thumbs'] = self.lib.get_thumbs(vdict['series'], 4, type='movie')
      vdict['serie'] = self.seriesdb.select(id=id)
      date = (vdict['serie'][5]).strftime('%d/%m/%Y')
      time = (vdict['serie'][6]).strftime('%H:%M:%S')
      vdict['datetime'] = (date, time)

      return render_template('dashboard/series.html', data=vdict)

    return redirect('/login/')

  def delete(self, id):
    self.seriesdb.delete(id)
    return redirect('/dashboard/series/')

  def load(self):
    if 'logged-in' in session:
      vdict = copy.deepcopy(config.vdict)
      session['page'] += 1
      vdict['series'] = self.seriesdb.select(vdict['dashboard_max_post'], page=session['page'])
      vdict['thumbs'] = self.lib.get_thumbs(vdict['series'], 4, type="movie")

      new_list = []
      for serie in vdict['series']:
        new_serie = list(serie)
        new_serie[5] = serie[5].strftime('%d/%m/%Y') 
        new_serie[6] = serie[6].strftime('%H:%M:%S') 
        new_list.append(new_serie)

      vdict['series'] = new_list
      return vdict
    else:
      return render_template('login.html', data=vdict)
#models/seriesdb.py
import os, psycopg2

class Seriesdb():
  def __init__(self):
    self.create_table()

  def set_conection(self):
    if 'DYNO' in os.environ:
      DATABASE_URL = os.environ['DATABASE_URL']
      self.conn = psycopg2.connect(DATABASE_URL, sslmode='require')
      self.cursor = self.conn.cursor()
    else: 
      self.conn = psycopg2.connect(
        database="postgres", 
        user="postgres", 
        password="sokhavuth", 
        host="localhost", 
        port="5432"
      )

      self.cursor = self.conn.cursor()

  def create_table(self):
    self.set_conection()
    
    SQL = '''CREATE TABLE IF NOT EXISTS SERIES(
      ID TEXT,
      VIDTYPE TEXT,
      TITLE TEXT,
      COUNTRY TEXT,
      CONTENT TEXT,
      CDATE DATE,
      CTIME TIME,
      AUTHOR TEXT,
      ENDING TEXT
    )'''

    self.cursor.execute(SQL)
    self.conn.commit()
    self.conn.close() 

  def insert(self, *series):
    self.set_conection()

    self.cursor.execute("INSERT INTO SERIES (ID, VIDTYPE, TITLE, COUNTRY, CONTENT, CDATE, CTIME, AUTHOR, ENDING) VALUES %s ", (series,))
  
    self.conn.commit()
    self.conn.close()

  def select(self, amount=5, id='', page=0, random=False, type=None, label=''):
    self.set_conection()

    if id:
      SQL = "SELECT * FROM SERIES WHERE ID=%s"
      self.cursor.execute(SQL, (id,))
      result = self.cursor.fetchone()
    elif page and label:
      if label == "all":
        SQL = "SELECT * FROM SERIES ORDER BY CDATE DESC, CTIME DESC OFFSET %s ROWS FETCH NEXT %s ROWS ONLY"
      else:
        SQL = "SELECT * FROM SERIES WHERE COUNTRY = '"+label+"' ORDER BY CDATE DESC, CTIME DESC OFFSET %s ROWS FETCH NEXT %s ROWS ONLY"

      self.cursor.execute(SQL, (amount*page, amount))
      result = self.cursor.fetchall()
    elif page:
      SQL = "SELECT * FROM SERIES ORDER BY CDATE DESC, CTIME DESC OFFSET %s ROWS FETCH NEXT %s ROWS ONLY"
      self.cursor.execute(SQL, (amount*page, amount))
      result = self.cursor.fetchall()
    elif random:
      SQL = "SELECT	* FROM SERIES WHERE ID != %s ORDER BY RANDOM() LIMIT %s"
      self.cursor.execute(SQL, (random, amount))
      result = self.cursor.fetchall()
    elif type:
      SQL = "SELECT * FROM MOVIES WHERE TYPE = %S ORDER BY CDATE DESC, CTIME DESC LIMIT %s"
      self.cursor.execute(SQL, (type, amount))
      result = self.cursor.fetchall()
    elif label:
      if label == 'all':
        SQL = "SELECT * FROM SERIES ORDER BY CDATE DESC, CTIME DESC LIMIT %s"
      else:
        SQL = "SELECT * FROM SERIES WHERE COUNTRY = '"+label+"' ORDER BY CDATE DESC, CTIME DESC LIMIT %s"

      self.cursor.execute(SQL, (amount,))
      result = self.cursor.fetchall()
    else:
      SQL = "SELECT * FROM SERIES ORDER BY CDATE DESC, CTIME DESC LIMIT %s"
      self.cursor.execute(SQL, (amount,))
      result = self.cursor.fetchall()

    self.conn.close()
    return result

  def delete(self, id):
    self.set_conection()

    SQL = "DELETE FROM SERIES WHERE ID = %s"
    self.cursor.execute(SQL, (id,))

    self.conn.commit()
    self.conn.close()

  def update(self, *series):
    self.set_conection()

    sql = "UPDATE SERIES SET VIDTYPE = %s, TITLE = %s, COUNTRY = %s, CONTENT = %s, CDATE = %s, CTIME = %s, AUTHOR = %s, ENDING = %s WHERE ID = %s"
    self.cursor.execute(sql, series)

    self.conn.commit()
    self.conn.close()

  def count(self):
    self.set_conection()

    sql = "SELECT COUNT(*) FROM SERIES"
    self.cursor.execute(sql)
    result = self.cursor.fetchone()

    self.conn.close()
    return result[0]

  def search(self, query):
    self.set_conection()
  
    sql = "SELECT * from USERS WHERE"
    sql += " EMAIL LIKE '%"+query+"%'"
    sql += " OR CONTENT LIKE '%"+query+"%'"
    sql += " ORDER BY CATDATE DESC, CATTIME DESC LIMIT 20"

    self.cursor.execute(sql)
    
    result = self.cursor.fetchall()
    return result

GitHub: "https://github.com/Sokhavuth/ETV
Heroku: https://khmerweb-etv.herokuapp.com/

Comments

Popular posts from this blog

Boilerplate Code

Adding Frontend Single Movie Template