Beispiel #1
0
class MaxCDNIntegration(unittest.TestCase):
    def setUp(self):
        self.alias = os.environ["ALIAS"]
        self.key = os.environ["KEY"]
        self.secret = os.environ["SECRET"]
        self.time = str(int(time.mktime(time.gmtime())))

        self.max = MaxCDN(self.alias, self.key, self.secret)

    def test_get(self):
        for end_point in [
                "account.json", "account.json/address", "users.json",
                "zones.json"
        ]:
            if "/" in end_point:
                key = end_point.split("/")[1]
            else:
                key = end_point.replace(".json", "")

            rsp = self.max.get(end_point)
            self.assertTrue(rsp["data"][key], "get " + key + " with data")

    def test_get_logs(self):
        rsp = self.max.get("v3/reporting/logs.json")
        self.assertTrue(rsp["next_page_key"],
                        "get v3/reporting/logs.json with data")

    def test_post_and_delete(self):
        data = {"name": self.time, "url": "http://www.example.com/"}
        res = self.max.post("/zones/pull.json", data=data)
        zid = str(res["data"]["pullzone"]["id"])

        rsp = self.max.delete("/zones/pull.json/" + zid)
        self.assertTrue(zid, "post")
        self.assertEqual(200, rsp["code"], "delete")

    def test_put(self):
        street = self.time + "_put"
        rsp = self.max.put("/account.json/address", {"street1": street})
        self.assertEqual(street, str(rsp["data"]["address"]["street1"]))

    def test_purge(self):
        rsp = self.max.get("zones/pull.json")
        zones = rsp["data"]["pullzones"]
        zone = zones[len(zones) - 1]["id"]

        rsp = self.max.purge(zone)
        self.assertEqual(200, rsp["code"])

        rsp = self.max.get("reports/popularfiles.json")
        popularfiles = rsp["data"]["popularfiles"]

        rsp = self.max.purge(zone, popularfiles[0]["uri"])
        self.assertEqual(200, rsp["code"])

        files = [popularfiles[0]["uri"], popularfiles[1]["uri"]]
        rsp = self.max.purge(zone, files)
        self.assertEqual(200, rsp["code"])
Beispiel #2
0
class MaxCDNIntegration(unittest.TestCase):
    def setUp(self):
        self.alias = os.environ["ALIAS"]
        self.key = os.environ["KEY"]
        self.secret = os.environ["SECRET"]
        self.time = str(int(time.mktime(time.gmtime())))

        self.max = MaxCDN(self.alias, self.key, self.secret)

    def test_get(self):
        for end_point in ["account.json",
                          "account.json/address",
                          "users.json",
                          "zones.json"]:
            if "/" in end_point:
                key = end_point.split("/")[1]
            else:
                key = end_point.replace(".json", "")

            rsp = self.max.get(end_point)
            self.assertTrue(rsp["data"][key], "get " + key + " with data")

    def test_get_logs(self):
        rsp = self.max.get("v3/reporting/logs.json")
        self.assertTrue(rsp["next_page_key"],
                        "get v3/reporting/logs.json with data")

    def test_post_and_delete(self):
        data = {"name": self.time, "url": "http://www.example.com/"}
        res = self.max.post("/zones/pull.json", data=data)
        zid = str(res["data"]["pullzone"]["id"])

        rsp = self.max.delete("/zones/pull.json/" + zid)
        self.assertTrue(zid, "post")
        self.assertEqual(200, rsp["code"], "delete")

    def test_put(self):
        street = self.time + "_put"
        rsp = self.max.put("/account.json/address", {"street1": street})
        self.assertEqual(street, str(rsp["data"]["address"]["street1"]))

    def test_purge(self):
        rsp = self.max.get("zones/pull.json")
        zones = rsp["data"]["pullzones"]
        zone = zones[len(zones) - 1]["id"]

        rsp = self.max.purge(zone)
        self.assertEqual(200, rsp["code"])

        rsp = self.max.get("reports/popularfiles.json")
        popularfiles = rsp["data"]["popularfiles"]

        rsp = self.max.purge(zone, popularfiles[0]["uri"])
        self.assertEqual(200, rsp["code"])

        files = [popularfiles[0]["uri"], popularfiles[1]["uri"]]
        rsp = self.max.purge(zone, files)
        self.assertEqual(200, rsp["code"])
Beispiel #3
0
def purge_maxcdn_zone(zone_name):
    try:
        account, zone_id = get_maxcdn_zone_id(zone_name)
    except ValueError:
        return get_maxcdn_zone_id(zone_name)
    api = MaxCDN(CREDENTIALS['maxcdn'][account]['alias'],
                 CREDENTIALS['maxcdn'][account]['consumer_key'],
                 CREDENTIALS['maxcdn'][account]['consumer_secret'])
    return api.purge(zone_id)
    cdn_consumer_key = sys.argv[3]
    cdn_consumer_secret = sys.argv[4]
    cdn_zone_id = sys.argv[5]

    dist_path = os.path.join(PROJECT_PATH, 'dist')

    releases = get_paths_list(dist_path, '/releases/%s/' % version)

    legacy_versioned_js = get_paths_list(os.path.join(dist_path, 'js'),
                                         '/js/%s/' % version)
    legacy_versioned_css = get_paths_list(os.path.join(dist_path, 'css'),
                                          '/css/%s/' % version)
    legacy_versioned_themes = get_paths_list(os.path.join(dist_path, 'themes'),
                                             '/themes/%s/' % version)
    legacy_schemas = [
        '/schemas/%s/json-schema.json' % version,
        '/schemas/%s/xml-schema.xsd' % version
    ]

    paths = releases
    paths += legacy_versioned_js + legacy_versioned_css
    paths += legacy_versioned_themes + legacy_schemas

    print "Invalidate following files:"
    print paths

    pieces = list(split(paths, 200))
    for piece in pieces:
        api = MaxCDN(cdn_alias, cdn_consumer_key, cdn_consumer_secret)
        api.purge(cdn_zone_id, piece)
Beispiel #5
0
          $ export ALIAS=<alias>
          $ export KEY=<key>
          $ export SECRET=<secret>
        """))
    exit(1)

maxcdn = MaxCDN(env["ALIAS"], env["KEY"], env["SECRET"])

if zoneid is None:
    zones = maxcdn.get("/zones/pull.json")
    for zone in zones["data"]["pullzones"]:
        print("Purging zone: %s (%s)" % (
            zone["name"], zone["id"]))

        pp.pprint(maxcdn.purge(zone["id"]))
else:
    print("Purging zone: %s" % (zoneid))
    res = maxcdn.purge(zoneid)
    try:
        if res["code"] == 200:
            print("SUCCESS!")
        else:
            print("Failed with code: " + res["code"])
            exit(res["code"])
    except KeyError:
        print("Something went terribly wrong!")
        pp.pprint(res)
        exit(1)

zoneid = sys.argv[1]

with open(sys.argv[2]) as f:
    config = json.load(f)

if not all(k in config for k in ["key", "secret"]):
    print("Error: secretsfile does not contain key and/or secret!",
          file=sys.stderr)
    sys.exit(1)

MAXCDN_ALIAS = "macports"
MAXCDN_KEY = config['key']
MAXCDN_SECRET = config['secret']

# Initialize MaxCDN API
maxcdn = MaxCDN(MAXCDN_ALIAS, MAXCDN_KEY, MAXCDN_SECRET)

# Purge requested zone
res = maxcdn.purge(zoneid)
if not 'code' in res:
    print("Error: Unexpected response:", file=sys.stderr)
    pp.pprint(res, file=sys.stderr)
    sys.exit(1)
elif res['code'] == 200:
    print("Zone {} purged.".format(zoneid))
else:
    print("Purging of zone {} failed with code: " + res['code'],
          file=sys.stderr)
    sys.exit(1)
Beispiel #7
0
class MaxCDNTests(unittest.TestCase):
    def setUp(self):
        self.alias = "test_alias"
        self.key = "test_key"
        self.secret = "test_secret"
        self.server = "rws.example.com"
        self.maxcdn = MaxCDN(self.alias,
                             self.key,
                             self.secret,
                             server=self.server)

    def test_init(self):
        self.assertTrue(self.maxcdn)
        self.assertEqual(self.maxcdn.url, "https://rws.example.com/test_alias")

    def test_get_url(self):
        self.assertEqual(self.maxcdn._get_url("/foo.json"),
                         "https://rws.example.com/test_alias/foo.json")

        self.assertEqual(self.maxcdn._get_url("foo.json"),
                         "https://rws.example.com/test_alias/foo.json")

    def test_data_request(self):
        for meth in ["post", "put", "delete"]:
            requests.Session.request = mock.create_autospec(
                mock_request, return_value=response(meth))

            data = {"foo": "bar"}
            rsp = self.maxcdn._data_request(meth, meth + ".json", data=data)
            expected = {"code": 200, "method": meth, "data": {"foo": "bar"}}
            self.assertEqual(rsp, expected)

            requests.Session.request = mock.create_autospec(
                mock_request, return_value=error_response())
        with self.assertRaises(MaxCDN.ServerError, None):
            self.maxcdn._data_request(meth,
                                      meth + ".json",
                                      data={"foo": "bar"})

    def test_get(self):
        requests.Session.request = mock.create_autospec(
            mock_request, return_value=response("get"))

        expected = {"code": 200, "method": "get", "data": {"foo": "bar"}}
        self.assertEqual(self.maxcdn.get("/get.json"), expected)

        requests.Session.request = mock.create_autospec(
            mock_request, return_value=error_response())
        with self.assertRaises(MaxCDN.ServerError, None):
            self.maxcdn.get("/get.json")

    def test_post(self):
        requests.Session.request = mock.create_autospec(
            mock_request, return_value=response("post"))

        rsp = self.maxcdn.post("/post.json", data={"foo": "bar"})
        expected = {"code": 200, "method": "post", "data": {"foo": "bar"}}
        self.assertEqual(rsp, expected)

        rsp = self.maxcdn.post("/post.json", params={"foo": "bar"})
        self.assertEqual(rsp, expected)

        rsp = self.maxcdn.post("/post.json", params="foo=bar")
        self.assertEqual(rsp, expected)

    def test_put(self):
        requests.Session.request = mock.create_autospec(
            mock_request, return_value=response("put"))

        expected = {"code": 200, "method": "put", "data": {"foo": "bar"}}
        self.assertEqual(self.maxcdn.put("/put.json"), expected)

    def test_delete(self):
        requests.Session.request = mock.create_autospec(
            mock_request, return_value=response("delete"))

        expected = {"code": 200, "method": "delete", "data": {"foo": "bar"}}
        self.assertEqual(self.maxcdn.delete("/delete.json"), expected)

        rsp = self.maxcdn.patch("/delete.json", file_or_files="/foo.css")
        self.assertEqual(rsp, expected)

        files = ["/foo.css", "/bar.css"]
        expected = {"code": 200, "method": "delete", "data": {"foo": "bar"}}
        rsp = self.maxcdn.patch("/delete.json", file_or_files=files)
        self.assertEqual(rsp, expected)

    def test_purge(self):
        requests.Session.request = mock.create_autospec(
            mock_request, return_value=response("delete"))

        expected = {"code": 200, "method": "delete", "data": {"foo": "bar"}}
        self.assertEqual(self.maxcdn.purge(12345), expected)

        self.assertEqual(self.maxcdn.purge(12345, "/master.css"), expected)

        files = ["/master.css", "/other.css"]
        self.assertEqual(self.maxcdn.purge(12345, files), expected)
Beispiel #8
0
companyalias = "<my_company_name_here>"
# zone_type would be either pull or push - pull indicates ==> pull zones
zone_type = "pull"

# newly created "Purge-Cache" Application has been created
# with permissions to be able to work with MaxCDN via API.
# Below are the consumer_key and consumer_secret for that.
consumer_key = "<consumer_key_here>"
consumer_secret = "<secret_key_here>"

#zones = [] # pull zones list.. ie., comma seperated pull zone numbers
# pull zone ids list.
zones = [123456,234567]

api = MaxCDN(companyalias, consumer_key, consumer_secret)

for zone_id in zones:
  print("Purging zone: %s" % (zone_id))
  res = api.purge(zone_id)
  try:
    if res["code"] == 200:
        print("SUCCESS!")
    else:
        print("Failed with code: " + res["code"])
        exit(res["code"])
  except KeyError:
        print("Something went terribly wrong!")
        pp.pprint(res)
        exit(1)
Beispiel #9
0
class MaxCDNTests(unittest.TestCase):

    def setUp(self):
        self.alias  = "test_alias"
        self.key    = "test_key"
        self.secret = "test_secret"
        self.server = "rws.example.com"
        self.maxcdn = MaxCDN(self.alias, self.key, self.secret, server=self.server)

    def test_init(self):
        self.assertTrue(self.maxcdn)
        self.assertEqual(self.maxcdn.url, "https://rws.example.com/test_alias")

    def test_get_url(self):
        self.assertEqual(self.maxcdn._get_url("/foo.json"),
                "https://rws.example.com/test_alias/foo.json")

        self.assertEqual(self.maxcdn._get_url("foo.json"),
                "https://rws.example.com/test_alias/foo.json")

    def test_data_request(self):
        for meth in [ "post", "put", "delete" ]:
            requests.Session.request = mock.create_autospec(mock_request,
                    return_value=response(meth))
            self.assertEqual(self.maxcdn._data_request(meth, meth+".json",
                data={"foo":"bar"}), { "code": 200, "method": meth, "data": { "foo":"bar" } })

    def test_get(self):
        requests.Session.request = mock.create_autospec(mock_request,
                return_value=response("get"))
        self.assertEqual(self.maxcdn.get("/get.json"),
                { "code": 200, "method": "get", "data": { "foo":"bar" } })

    def test_post(self):
        requests.Session.request = mock.create_autospec(mock_request,
                return_value=response("post"))
        self.assertEqual(self.maxcdn.post("/post.json", data={ "foo": "bar" }),
                { "code": 200, "method": "post", "data": { "foo":"bar" } })
        self.assertEqual(self.maxcdn.post("/post.json", params={ "foo": "bar" }),
                { "code": 200, "method": "post", "data": { "foo":"bar" } })
        self.assertEqual(self.maxcdn.post("/post.json", params="foo=bar"),
                { "code": 200, "method": "post", "data": { "foo":"bar" } })

    def test_put(self):
        requests.Session.request = mock.create_autospec(mock_request,
                return_value=response("put"))
        self.assertEqual(self.maxcdn.put("/put.json"),
                { "code": 200, "method": "put", "data": { "foo":"bar" } })

    def test_purge(self):
        requests.Session.request = mock.create_autospec(mock_request,
                return_value=response("purge"))
        self.assertEqual(self.maxcdn.purge("/purge.json"),
                { "code": 200, "method": "purge", "data": { "foo":"bar" } })

    def test_delete(self):
        requests.Session.request = mock.create_autospec(mock_request,
                return_value=response("delete"))
        self.assertEqual(self.maxcdn.delete("/delete.json"),
                { "code": 200, "method": "delete", "data": { "foo":"bar" } })

        self.assertEqual(self.maxcdn.patch("/delete.json",
                file_or_files="/foo.css"),
                { "code": 200, "method": "delete", "data": { "foo":"bar" } })

        self.assertEqual(self.maxcdn.patch("/delete.json",
                file_or_files=["/foo.css", "/bar.css"]),
                { "code": 200, "method": "delete", "data": { "foo":"bar" } })

    def test_purge(self):
        requests.Session.request = mock.create_autospec(mock_request,
                return_value=response("delete"))
        self.assertEqual(self.maxcdn.purge(12345),
                { "code": 200, "method": "delete", "data": { "foo":"bar" } })
        self.assertEqual(self.maxcdn.purge(12345, "/master.css"),
                { "code": 200, "method": "delete", "data": { "foo":"bar" } })
        self.assertEqual(self.maxcdn.purge(12345, ["/master.css", "/other.css"]),
                { "code": 200, "method": "delete", "data": { "foo":"bar" } })