# -*- coding: utf-8 -*-
# [SKRIP 4.1-ArcMap: Penanganan galat dengan ArcPy (Python 2.7)]
# Penulis: Badar Mubarok Yogaswara
# [CEK] Cocokkan dengan versi Anda. Kiriman lapangan diandaikan berbentuk Shapefile di folder Kiriman_Lapangan\shp.
import glob
import os
import sys
import arcpy

DATA = r"D:\Latihan\paket-i4"
FIELD_WAJIB = ["Kondisi", "Tinggi_Phn", "Foto"]
log = []


def periksa(jalur):
    """Berhenti dengan pesan jelas bila masukan tidak layak. Mengembalikan kode EPSG data."""
    if not arcpy.Exists(jalur):
        raise ValueError("data tidak ada atau tidak bisa dibuka")
    nama_field = [f.name for f in arcpy.ListFields(jalur)]
    kurang = [f for f in FIELD_WAJIB if f not in nama_field]
    if kurang:
        raise ValueError("field hilang: " + ", ".join(kurang))
    return arcpy.Describe(jalur).spatialReference.factoryCode


for jalur in sorted(glob.glob(DATA + r"\Kiriman_Lapangan\shp\*.shp")):
    nama = os.path.basename(jalur)
    try:
        epsg = periksa(jalur)
        if epsg != 32749:
            arcpy.Project_management(jalur, "in_memory\\" + nama[:-4], arcpy.SpatialReference(32749))
            log.append((nama, "DITERIMA", "CRS %s diubah ke 32749" % epsg))
        else:
            log.append((nama, "DITERIMA", "sesuai"))
    except ValueError as e:                      # galat milik skrip kita
        log.append((nama, "DITOLAK", str(e)))
    except arcpy.ExecuteError:                   # galat dari alat geoprocessing
        log.append((nama, "GAGAL ALAT", arcpy.GetMessages(2)))
    except Exception:                            # galat Python lain
        log.append((nama, "TAK TERDUGA", str(sys.exc_info()[1])))
for baris in log:
    print("%-14s %-12s %s" % baris)
